我是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);
}
答案 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);
如果它没有被破坏并且它是连续的数字伺服,这将使它停止。