Управление шаговым двигателем с помощью Arduino и серийного - PullRequest
0 голосов
/ 10 апреля 2020

Я хотел бы создать программу 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) двигатель вращается сначала по часовой стрелке, а затем против часовой стрелки, и это не тот результат, которого я хотел бы достичь.

Не могли бы вы помочь мне в этом начинании?

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Используйте операцию сравнения вместо оператора присваивания, например, так. Двойная кавычка около 1 не требуется, поскольку переменная имеет тип int datatype. Используйте команду else после первого оператора if, чтобы работала только одна из команд.

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 голосов
/ 10 апреля 2020

Хорошо, вот окончательный код; все работает!

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