Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用映射函数在arduino中编程死区?_Arduino_Servo - Fatal编程技术网

如何使用映射函数在arduino中编程死区?

如何使用映射函数在arduino中编程死区?,arduino,servo,Arduino,Servo,我用PS3控制器来控制一个连续的伺服阵列。我用map函数来写伺服位置。我的代码的相关部分是 servo1.writeMicroseconds(map(PS3.getAnalogHat(RightHatY), 0, 255, 1300, 1700)); 我的问题是,操纵手柄通常不会精确复位到中点,这使得伺服系统在我希望它们保持静止时缓慢旋转。我想忽略ps3控制器从115到140的输入 我该怎么做呢?选项一 以下是map函数的定义,其中包括115和140之间的输入信号。你可以根据自

我用PS3控制器来控制一个连续的伺服阵列。我用map函数来写伺服位置。我的代码的相关部分是

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;
}
长映射(长x、长in_最小值、长in_最大值、长out_最小值、长out_最大值){
如果(x>115&&x<140)
返回1500;
否则返回(x-输入最小值)*(输出最大值-输出最小值)/(输入最大值-输入最小值)+输出最小值;
}
选项二

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

long analogPS3Value = PS3.getAnalogHat(RightHatY);
if(analogPS3Value > 115 && analogPS3Value < 140)
   servo1.writeMicroseconds(1500);
else
   servo1.writeMicroseconds(map(analogPS3Value, 0, 255, 1300, 1700));
long-analogPS3Value=PS3.getAnalogHat(RightHatY);
如果(analogPS3Value>115&&analogPS3Value<140)
伺服1.写微秒(1500);
其他的
servo1.writeMicroseconds(映射(analogPS3Value,0,255,1300,1700));
实际上,当您想要实现的上述任一选项的读取值介于115和140之间时,它会使伺服稳定在1300和1700(即1500)之间的中间距离