如何使用映射功能在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)。
我正在使用 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)。