使用Arduino和串行控制步进电机

问题描述 投票:-1回答:2

我想创建一个Arduino程序,该程序仅通过串行接收两个命令:“ 1”和“ 2”。通过这些命令,我​​希望Arduino这样操作步进电机:

  • 如果我在序列号上写“ 1”,则电动机必须顺时针旋转
  • 如果我在序列号上写“ 2”,则电动机必须逆时针旋转

我已经写了只在一半时有效的代码:

#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),电动机都先顺时针运动,然后再逆时针运动,这不是我想要获得的结果。

您能帮我这个忙吗?

c++ arduino serial-port arduino-uno arduino-c++
2个回答
1
投票

使用比较运算代替像这样的赋值运算符。因为变量是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);
      }
   }
}

0
投票

确定,这是最终代码;全部正常!

#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);
      }
   }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.