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

How to program a dead zone in arduino using the mapping function?

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

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;
}

选项二

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

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)。