SG90 MIcro伺服电机按钮Arduino用于自动售货机原型

时间:2016-02-27 10:13:43

标签: rotation arduino

我再次为我的原型制作了新代码,问题是: 当arduino开始运行时,三台SG90微型伺服电机同时旋转360度并且没有停止。当我按下圆形按钮时,它减慢了伺服电机的旋转速度。

当我尝试将我的程序模拟到123d.circuits.io时,它有效。我使用了瞬时按钮,因为那里没有圆形按钮。

我想要达到的目标是:

按下按钮A / B / C时,伺服电机A / B / C将旋转360度,为自动售货机原型分配物品。

这是我的代码。希望您能够帮助我。

#include <Servo.h>

const int pushButtonA = 2;
const int pushButtonB = 4;
const int pushButtonC = 7;

Servo myservoA;
Servo myservoB;
Servo myservoC;

int pos = 0;
int buttonStateA = 0;
int buttonStateB = 0;
int buttonStateC = 0;

void setup() {

  Serial.begin(9600);
  pinMode(pushButtonA, INPUT);
  pinMode(pushButtonB, INPUT);
  pinMode(pushButtonC, INPUT);

  myservoA.attach(3);
  myservoB.attach(5);
  myservoC.attach(9);
}

void loop() {

  buttonStateA = digitalRead (pushButtonA);
  buttonStateB = digitalRead (pushButtonB);
  buttonStateC = digitalRead (pushButtonC);

  if((buttonStateA == LOW) && (buttonStateB == HIGH) && (buttonStateC == HIGH)){
    digitalWrite(3, HIGH);
    for(pos = 0; pos <=360; pos++);
    myservoA.write(pos);
    delay(15);
    digitalWrite(3, HIGH);
  }
      if((buttonStateB == LOW) && (buttonStateA == HIGH) && (buttonStateC == HIGH)){
    digitalWrite(5, HIGH);
    for(pos = 0; pos <=360; pos++);
    myservoB.write(pos);
    delay(15);
    digitalWrite(5, HIGH);
  }
          if((buttonStateC == LOW) && (buttonStateB == HIGH) && (buttonStateA == HIGH)){
    digitalWrite(9, HIGH);
    for(pos = 0; pos <=360; pos++);
    myservoC.write(pos);
    delay(15);
    digitalWrite(9, HIGH);
  };
}

1 个答案:

答案 0 :(得分:0)

您的代码存在两个问题。

  1. 正如@MikeCAT所提到的,代码中的for循环是空的,因为你在它们之后添加了一个分号。有关进一步说明,请参阅Effect of semicolon after 'for' loop

  2. 无需在伺服引脚中执行digitalWrite。要控制它们,只需使用 Servo 类中的方法write

  3. 更正后的代码:

     #include <Servo.h>
    
    const int pushButtonA = 2;
    const int pushButtonB = 4;
    const int pushButtonC = 7;
    
    Servo myservoA;
    Servo myservoB;
    Servo myservoC;
    
    int pos = 0;
    int buttonStateA = 0;
    int buttonStateB = 0;
    int buttonStateC = 0;
    
    void setup() {
    
      Serial.begin(9600);
      pinMode(pushButtonA, INPUT);
      pinMode(pushButtonB, INPUT);
      pinMode(pushButtonC, INPUT);
    
      myservoA.attach(3);
      myservoB.attach(5);
      myservoC.attach(9);
    }
    
    void loop() {
    
      buttonStateA = digitalRead (pushButtonA);
      buttonStateB = digitalRead (pushButtonB);
      buttonStateC = digitalRead (pushButtonC);
    
      if((buttonStateA == LOW) && (buttonStateB == HIGH) && (buttonStateC == HIGH)){
        for(pos = 0; pos <=360; pos++) {
           myservoA.write(pos);
           delay(15);
        }
      }
    
      if((buttonStateB == LOW) && (buttonStateA == HIGH) && (buttonStateC == HIGH)){
        for(pos = 0; pos <=360; pos++) {
           myservoB.write(pos);
           delay(15);
        }
      }
    
      if((buttonStateC == LOW) && (buttonStateB == HIGH) && (buttonStateA == HIGH)){
        for(pos = 0; pos <=360; pos++) {
           myservoC.write(pos);
           delay(15);
        }
      }
    }