Arduino:伺服连接到按钮

时间:2013-01-28 23:18:31

标签: arduino

我是Arduino的新手并试图创建一个简单的应用程序,因此当按下按钮(不连续)时伺服器会前进50度,当松开时它会回到50度。出于某种原因,我的伺服系统一直在运转我该怎么做才能调试这个。

#include <Servo.h>

Servo myservo; // creating myservo object
int buttonPin = 2;
int servoPin = 3;
int buttonState = 0; // set buttonState 

void setup()
{
myservo.attach(servoPin); 
pinMode(buttonPin, INPUT); 
}


void loop()
{ buttonState = digitalRead(buttonPin); // read and save to the variable "buttonState" the actual state of button
if (buttonState == HIGH)
myservo.write(50); else
myservo.write(0);

}

enter image description here enter image description here enter image description here

3 个答案:

答案 0 :(得分:0)

您应该使用Bounce library库来捕捉您正在寻找的边缘。你编写的脚本不断用50或0更新PWM。它永远不会有机会实际执行它。因此,您只想在更改时更新它;压抑或释放。

我没有测试过以下内容。它确实编译,并且是一个简单的hack来自示例和您的上面。

#include <Servo.h>
#include <Bounce.h>

#define BUTTON 2
#define servoPin 3
#define LED 13

Servo myservo;  // create servo object to control a servo
Bounce bouncer = Bounce( BUTTON, 5 );

void setup() {
  pinMode(BUTTON,INPUT);
  pinMode(LED,OUTPUT);
  digitalWrite(LED, HIGH);
  myservo.attach(servoPin);
}

void loop() {

  if ( bouncer.update() ) {
    if ( bouncer.fallingEdge()) {
      myservo.write(50);
      digitalWrite(LED, LOW);
    } else if ( bouncer.risingEdge()) {
      myservo.write(0);
      digitalWrite(LED, HIGH);
    }
  }
  // foo bar...
}

答案 1 :(得分:0)

我会猜测你有一个连续旋转伺服。这些伺服系统将电位器的位置反馈移除/断开,因此当您对伺服器施加任何旋转时,它将继续旋转,认为它尚未处于所需位置。这些伺服系统有三个控制位置:顺时针(可能90度)顺时针(大于90)和逆时针(任何小于90)。有些人也允许你控制速度(我认为你引用的VEX可能是一个 - 查看规格表)。

我可能没有错误的运动值(它可能不是90)而我的计数器/顺时针反转,但我几乎可以肯定这是你的问题。基本上你的马达不是你想象的那样:)。

答案 2 :(得分:0)

myServo.writeMicroseconds(1500);

如果它没有被破坏并且它是连续的数字伺服,这将使它停止。