简体   繁体   中英

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". Through these commands, I would like Arduino to operate a stepper motor like this:

  • If I write "1" on the serial, the motor must move clockwise
  • If I write "2" on the serial, the motor must move counterclockwise

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.

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. Use an else command after the first if statement so that only one of the commands will operate.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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