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的函数最好称为scale
或transform
。它执行两个线性变换:偏移和缩放。您可以通过复制实现(即在链接的页面上)轻松地自己采用它。
并且:这仅仅是一个功能;是的,您可以在C中实现和使用函数。