Button 使用两个按钮输入的伺服方向控制

Button 使用两个按钮输入的伺服方向控制,button,arduino,rotation,servo,Button,Arduino,Rotation,Servo,我想要一个标准的伺服旋转180度时,按钮1是按下和释放。但我希望伺服仅在按下按钮2时旋转回初始位置(松开按钮2后停止旋转)。我现在使用的arduino代码正确地允许伺服通过按下和释放按钮1进行180度的完全旋转,但伺服也通过按下和释放按钮2错误地旋转回初始位置,而不是在释放后停止。如果您对以下代码有任何帮助,我们将不胜感激: #include <Servo.h> Servo myservo; int pos; const int buttonPin = 2; const int

我想要一个标准的伺服旋转180度时,按钮1是按下和释放。但我希望伺服仅在按下按钮2时旋转回初始位置(松开按钮2后停止旋转)。我现在使用的arduino代码正确地允许伺服通过按下和释放按钮1进行180度的完全旋转,但伺服也通过按下和释放按钮2错误地旋转回初始位置,而不是在释放后停止。如果您对以下代码有任何帮助,我们将不胜感激:

#include <Servo.h>
Servo myservo;

int pos;

const int buttonPin = 2;
const int buttonPin2 = 3;
int buttonState = 0;
int buttonState2 = 0;

void setup()
{
  myservo.attach(9);

  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2,INPUT);

}
void loop()

{

  buttonState = digitalRead(buttonPin);
  buttonState2 = digitalRead(buttonPin2); 

  if (buttonState == HIGH) {  
    pos=180;
    myservo.write(180);    

  }

  if (buttonState2 == HIGH) {  
    pos-=1;
    myservo.write(pos); 

  } 
} 
#包括
伺服myservo;
int pos;
常量int buttonPin=2;
const int buttonPin2=3;
int buttonState=0;
int buttonState2=0;
无效设置()
{
附件(9);
pinMode(按钮输入,输入);
pinMode(按键in2,输入);
}
void循环()
{
buttonState=digitalRead(buttonPin);
buttonState2=数字读取(buttonPin2);
如果(按钮状态==高){
pos=180;
myservo.write(180);
}
如果(buttonState2==高){
pos-=1;
myservo.write(pos);
} 
} 

循环中没有任何延迟。您的
pos-=1行将以高频率执行,伺服无法跟随


一个简单的解决方案是在
myservo.write(pos)之后引入一个短延迟(例如
delay(20);
这样伺服系统就有时间到达新的位置。

你能告诉我一次按下并释放按钮2得到了什么吗。不要长时间按下按钮,只是突然按下并释放。检查并更新
delay()
可以避免问题,但有点不推荐使用。最好使用
millis()
delay()
没有被弃用,它可以很好地完成任务。很明显,您得不到任何并发性,这就是为什么在更大的项目中,您想要。但对于这一点,在我看来,这是恰到好处的。是的,不推荐我的意思是使用它没有得到很好的推广。我想这听起来对你们两个都一样。如果我们能解决你们的问题,别忘了把一个答案标记为解决方案:)