伺服电机的Arduino代码

时间:2015-02-25 14:39:14

标签: c++ arduino arduino-uno

我有一个伺服电机,当我按下按钮时我希望它旋转一定程度的度数。 目前,只要按下按钮,伺服器就会旋转。我还需要按住按钮大约半秒钟,直到伺服移动或控制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);
  }
}

1 个答案:

答案 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);
        ...
    }
}