C语言中是否有与Arduino类似的地图?我已经搜索过,但是找不到可以使用的类似内容。
现在我得到的值从50到700,但是我想将它们映射为50为0,700为1023。在C中有没有办法做到这一点?

Map in arduino

void backRight(void)
{
        printf("Ch5 %i\n", readADC(ADC_CHANNEL_5));

        error5 = setpoint5 - (float)readADC(ADC_CHANNEL_5);
        printf("error 5 %i\n", (int) error5);

        if(abs(error5) > MIN5)
        {
            integral5 = integral5 + error5 * dt5;
        }
        derivative5 = (error5 - pre_error5)/dt5;

        output5 = Kp5 * error5 + Ki5 * integral5 + Kd5 * derivative5;

        printf("Output %i\n",(int) output5);
        if(output5 > MAX5)
        {
            output5 = MAX5;
        }
        else if(output5 < MIN5)
        {
            output5 = MIN5;
        }

        pre_error5 = error5;
        printf("output5 %i\n", (int)output5);

        changeDutyCycle(pwm_pin8, (output5/1023)*100);
}

最佳答案

map实际上是类似于Python的dict的数据类型,而不是函数。

来自arduino的函数最好称为scaletransform。它执行两个线性变换:偏移和缩放。您可以通过复制实现(即在链接的页面上)轻松地自己采用它。

并且:这仅仅是一个功能;是的,您可以在C中实现和使用函数。

08-17 04:53