如何使用映射功能在arduino中编程死区?

时间:2018-11-05 20:01:44

标签: arduino servo

我正在使用PS3控制器来控制连续伺服阵列。我正在使用地图功能来写入伺服位置。我的代码的相关部分是

servo1.writeMicroseconds(map(PS3.getAnalogHat(RightHatY), 0, 255, 1300, 1700));        

我的问题是,操纵杆通常不会完全重设回中点,这会使伺服器在我希望保持静止时缓慢旋转。我想忽略ps3控制器从115到140的输入。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

选项一

以下是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;
}

选项二

另一种选择是包括选择语句,以不映射主函数(循环)中给定范围内的任何内容,如下所示:

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)之间的中途距离。