我有一个伺服电机,当我按下按钮时我希望它旋转一定程度的度数。 目前,只要按下按钮,伺服器就会旋转。我还需要按住按钮大约半秒钟,直到伺服移动或控制LED亮起。 我希望伺服在我按下时执行x度或x毫秒的旋转,无论你按下按钮多久,它都应该执行该动作。 这是我现在的代码:
#include <Servo.h>
Servo myServo;
int LED = 13;
int BUTTON = 4;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
myServo.attach(9);
}
void loop()
{
if(digitalRead(BUTTON)==HIGH)
{
digitalWrite(LED, HIGH);
myServo.writeMicroseconds(1700); // Counter clockwise
delay(200);
}
else
{ myServo.writeMicroseconds(1500); // Stop
delay(200);
digitalWrite(LED, LOW);
}
}
答案 0 :(得分:0)
使用首次按下按钮时设置的标志,并在未按下按钮时取消设置。
要检查按钮是否已按下一段时间,请在几毫秒后再次调用读取功能,如果仍然按下,则继续。有更优雅的解决方案,但它们需要使用中断。
...
int ButtonPressed = 0;
...
void loop()
{
// Button pressed?
if (digitalRead(BUTTON)==HIGH)
{
// Try again in a while
delay_ms(500);
// Still pressed?
if (digitalRead(BUTTON)==HIGH)
{
// Has button been pressed previously?
if ((ButtonPressed & (1<<BUTTON)) == 0)
{
// Yes
ButtonPressed |= (1<<BUTTON);
...
}
}
}
else
{
// Button has been released
ButtonPressed &= ^(1<<BUTTON);
...
}
}