如何使用映射函数对arduino中的死区进行编程



我使用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(之间的中间距离。

最新更新