简体   繁体   English

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

[英]Controlling a stepper motor using Arduino and serial

I would like to create an Arduino program that receives (via serial) only two commands: "1" and "2".我想创建一个仅接收(通过串行)两个命令的 Arduino 程序:“1”和“2”。 Through these commands, I would like Arduino to operate a stepper motor like this:通过这些命令,我希望 Arduino 像这样操作步进电机:

  • If I write "1" on the serial, the motor must move clockwise如果我在序列号上写“1”,电机必须顺时针移动
  • If I write "2" on the serial, the motor must move counterclockwise如果我在串口上写“2”,电机必须逆时针移动

I have already written a code that only works halfway:我已经写了一个只能半途而废的代码:

#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);
      }
   }
}

When active, the program waits for the commands on the serial port and manages to read them.激活时,程序等待串行端口上的命令并设法读取它们。 The problem is that in both cases (1 and 2) the motor moves first clockwise and then subsequently anticlockwise and it is not the result I would like to achieve.问题在于,在两种情况下(1 和 2),电机首先顺时针移动,然后逆时针移动,这不是我想要达到的结果。

Can you give me a hand in this endeavor?你能帮我做这件事吗?

Use comparison operation instead of assignment operator like so.Double quote around 1 is not required since the variable is int datatype.使用比较运算而不是像这样的赋值运算符。由于变量是int数据类型,因此不需要 1 左右的双引号。 Use an else command after the first if statement so that only one of the commands will operate.在第一个 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);
      }
   }
}

Ok, here is the final code;好的,这是最终的代码; all working!一切正常!

#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);
      }
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM