-1

我是 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);

}

在此处输入图像描述在此处输入图像描述在此处输入图像描述

4

3 回答 3

0
myServo.writeMicroseconds(1500);

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

于 2013-11-20T19:37:43.867 回答
0

您应该使用Bounce 库来捕捉您正在寻找的边缘。您编写的脚本不断将 PWM 更新为 50 或 0。它永远没有机会真正做到这一点。因此,您只想在更改时更新它;要么按下要么释放。

我没有测试以下。它确实可以编译,并且是来自示例和您上面的简单破解。

#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...
}
于 2013-01-29T00:51:19.850 回答
0

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

我的无运动值可能是错误的(可能不是 90)并且我的逆时针/顺时针方向反转,但我几乎可以肯定这是你的问题。基本上你的电机不是你想象的那样:)

于 2013-01-29T04:57:21.053 回答