我想创建一个Arduino程序,该程序仅通过串行接收两个命令:“ 1”和“ 2”。通过这些命令,我希望Arduino这样操作步进电机:
我已经写了只在一半时有效的代码:
#include <Stepper.h>
const int stepsPerRevolution = 1500;
int incomingByte;
Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);
void setup() {
myStepper.setSpeed(20);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
Serial.print("I received: ");
Serial.println(incomingByte);
if (incomingByte = "1") {
Serial.println("Moving clockwise...");
myStepper.step(stepsPerRevolution);
delay(500);
}
if (incomingByte = "2") {
Serial.println("Moving counterclockwise...");
myStepper.step(-stepsPerRevolution);
delay(500);
}
}
}
处于活动状态时,程序等待串行端口上的命令并设法读取它们。问题在于,在两种情况下(1和2),电动机都先顺时针运动,然后再逆时针运动,这不是我想要获得的结果。
您能帮我这个忙吗?
使用比较运算代替像这样的赋值运算符。因为变量是int
数据类型,所以不需要在双引号周围加上1。在第一个if语句之后使用else
命令,以便仅其中一个命令可以运行。
const int stepsPerRevolution = 1500;
int incomingByte;
Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);
void setup() {
myStepper.setSpeed(20);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
Serial.print("I received: ");
Serial.println(incomingByte);
if (incomingByte == 49) {
Serial.println("Moving clockwise...");
myStepper.step(stepsPerRevolution);
delay(500);
}
else
if (incomingByte == 50) {
Serial.println("Moving counterclockwise...");
myStepper.step(-stepsPerRevolution);
delay(500);
}
}
}
确定,这是最终代码;全部正常!
#include <Stepper.h>
const int stepsPerRevolution = 1500;
int incomingByte;
Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);
void setup() {
myStepper.setSpeed(20);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
Serial.print("I received: ");
Serial.println(incomingByte);
if (incomingByte == 49) {
Serial.println("Moving clockwise...");
myStepper.step(stepsPerRevolution);
delay(500);
}
else
if (incomingByte == 50) {
Serial.println("Moving counterclockwise...");
myStepper.step(-stepsPerRevolution);
delay(500);
}
}
}