我再次为我的原型制作了新代码,问题是: 当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);
};
}
答案 0 :(得分:0)
您的代码存在两个问题。
正如@MikeCAT所提到的,代码中的for循环是空的,因为你在它们之后添加了一个分号。有关进一步说明,请参阅Effect of semicolon after 'for' loop。
无需在伺服引脚中执行digitalWrite
。要控制它们,只需使用 Servo 类中的方法write
。
更正后的代码:
#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);
}
}
}