我使用PS3控制器来控制连续伺服阵列。我正在使用映射函数来写入伺服位置。我的代码的相关部分是
servo1.writeMicroseconds(map(PS3.getAnalogHat(RightHatY), 0, 255, 1300, 1700));
我的问题是操纵杆通常不会精确地重置回中点,这使得伺服系统在我希望它们保持静止时缓慢旋转。我想忽略来自ps3控制器的从115到140的输入。
我该怎么做?
选项一
以下是映射函数的定义,包括忽略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;
}
选项二
另一个选项是在主函数(循环(中包含一个选择语句,不映射给定范围内的任何内容,如下所示:
long analogPS3Value = PS3.getAnalogHat(RightHatY);
if(analogPS3Value > 115 && analogPS3Value < 140)
servo1.writeMicroseconds(1500);
else
servo1.writeMicroseconds(map(analogPS3Value, 0, 255, 1300, 1700));
实际上,当您想要实现的上述任一选项的读取值在115和140之间时,它会将伺服保持在1300和1700(即1500(之间的中间距离。