如何使用映射函数在arduino中编程死区?
我用PS3控制器来控制一个连续的伺服阵列。我用map函数来写伺服位置。我的代码的相关部分是如何使用映射函数在arduino中编程死区?,arduino,servo,Arduino,Servo,我用PS3控制器来控制一个连续的伺服阵列。我用map函数来写伺服位置。我的代码的相关部分是 servo1.writeMicroseconds(map(PS3.getAnalogHat(RightHatY), 0, 255, 1300, 1700)); 我的问题是,操纵手柄通常不会精确复位到中点,这使得伺服系统在我希望它们保持静止时缓慢旋转。我想忽略ps3控制器从115到140的输入 我该怎么做呢?选项一 以下是map函数的定义,其中包括115和140之间的输入信号。你可以根据自
servo1.writeMicroseconds(map(PS3.getAnalogHat(RightHatY), 0, 255, 1300, 1700));
我的问题是,操纵手柄通常不会精确复位到中点,这使得伺服系统在我希望它们保持静止时缓慢旋转。我想忽略ps3控制器从115到140的输入
我该怎么做呢?选项一 以下是map函数的定义,其中包括115和140之间的输入信号。你可以根据自己的喜好改变这些
long map(long x, long in_min, long in_max, long out_min, long out_max) {
if(x > 115 && x < 140)
return 1500;
else return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
长映射(长x、长in_最小值、长in_最大值、长out_最小值、长out_最大值){
如果(x>115&&x<140)
返回1500;
否则返回(x-输入最小值)*(输出最大值-输出最小值)/(输入最大值-输入最小值)+输出最小值;
}
选项二
另一个选项是包含一个选择语句,以便在主函数(循环)中不映射给定范围内的任何内容,如下所示:
long analogPS3Value = PS3.getAnalogHat(RightHatY);
if(analogPS3Value > 115 && analogPS3Value < 140)
servo1.writeMicroseconds(1500);
else
servo1.writeMicroseconds(map(analogPS3Value, 0, 255, 1300, 1700));
long-analogPS3Value=PS3.getAnalogHat(RightHatY);
如果(analogPS3Value>115&&analogPS3Value<140)
伺服1.写微秒(1500);
其他的
servo1.writeMicroseconds(映射(analogPS3Value,0,255,1300,1700));
实际上,当您想要实现的上述任一选项的读取值介于115和140之间时,它会使伺服稳定在1300和1700(即1500)之间的中间距离