-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

探しているエッジをキャッチするには、 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

私はあなたが連続回転サーボを持っていると勝手に推測します。これらのサーボは、ポテンショメーターからの位置フィードバックが取り外されている/接続されていないため、サーボに回転を加えると、サーボはまだ目的の位置にないと考えて連続的に回転します。これらのサーボには 3 つの制御位置があります。オフ (おそらく 90 度) 時計回り (90 度より大きいもの) と反時計回り (90 度未満のもの) です。速度を制御できるものもあります(あなたが引用したVEXのものは1つである可能性があると思います-スペックシートを調べてください)。

動きのない値が間違っている可能性があり (90 ではない可能性があります)、反時計回り/時計回りが逆になっている可能性がありますが、これがあなたの問題であることはほぼ確実です。基本的に、あなたのモーターはあなたが思っているものではありません:)

于 2013-01-29T04:57:21.053 に答える