Как я могу запустить шаговый двигатель, пока не нажму определенную кнопку клавиатуры на Arduino?

Вот мой код:

#include <LiquidCrystal.h>
#include <Stepper.h>
#include <Key.h>
#include <Keypad.h>

const int stepsPerRevolution = 200;
const byte ROWS = 4; //four rows
const byte COLS = 1; //one column
char keys[ROWS][COLS] = {
{'-'},
{'+'},
{'I'},
{'0'}};
byte rowPins[ROWS] = {6,7,8,9};
byte colPins[COLS] = {10};

int count = 0;
LiquidCrystal lcd(A5,A4,A3,A2,A1,A0);
Stepper myStepper(stepsPerRevolution, 2,4,3,5);
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int plannedSpeed = 50;

void setup() {
lcd.begin(16,2);
Stepper.setSpeed(plannedSpeed);
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
char key = keypad.getKey();
Serial.println(plannedSpeed);
if (key == '-') {
plannedSpeed = plannedSpeed - 1;
Serial.println(plannedSpeed);
delay(10);
}
if (key == '+') {
plannedSpeed = plannedSpeed +1;
Serial.println(plannedSpeed);
delay(10);
}
if (key == 'I') {
myStepper.step(stepsPerRevolution);
Serial.print("Running at " );
Serial.println(plannedSpeed);
delay(10);
}
}

Я пытаюсь закодировать его, чтобы выбрать скорость с помощью клавиатуры, и двигатель запускается, когда я нажимаю кнопку «I», и останавливается, когда я нажимаю кнопку «O». Как я могу это сделать? Спасибо!

1

Решение

Я исправил ваш код и прокомментировал, где это необходимо. У меня были небольшие проблемы, которые я также исправил:

  1. Ты убывал plannedSpeed не останавливая его от падения ниже минимального значения, т.е. 0,
  2. Вы увеличивали plannedSpeed не останавливая его от превышения максимального значения, т.е. stepsPerRevolution,
  3. Вы не меняли значение plannedSpeed при запуске шагового двигателя.
#include <LiquidCrystal.h>
#include <Stepper.h>
#include <Key.h>
#include <Keypad.h>

const int stepsPerRevolution = 200;
const byte ROWS = 4; //four rows
const byte COLS = 1; //one column
char keys[ROWS][COLS] = {
{'-'},
{'+'},
{'I'},
{'0'}
};
byte rowPins[ROWS] = {6, 7, 8, 9};
byte colPins[COLS] = {10};

int count = 0;
LiquidCrystal lcd(A5, A4, A3, A2, A1, A0);
Stepper myStepper(stepsPerRevolution, 2, 4, 3, 5);
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

int plannedSpeed = 50;
void setup() {
// put your setup code here, to run once:
lcd.begin(16, 2);
Stepper.setSpeed(plannedSpeed);
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
char key = keypad.getKey();
Serial.println(plannedSpeed);
if (key == '-') {
if (--plannedSpeed < 0) // Decrease plannedSpeed
plannedSpeed = 0; // Make sure it does not go below 0
Serial.println(plannedSpeed);
delay(10);
}
else if (key == '+') {
if (++plannedSpeed > stepsPerRevolution) // Increase plannedSpeed
plannedSpeed = stepsPerRevolution; // Make sure it does not go above stepsPerRevolution
Serial.println(plannedSpeed);
delay(10);
}
else if (key == 'I') {
plannedSpeed = stepsPerRevolution; // Set plannedSpeed to maximum
myStepper.step(plannedSpeed); // Set stepper to plannedSpeed
Serial.print("Running at " );
Serial.println(plannedSpeed);
delay(10);
}
else if (key == '0') {
plannedSpeed = 0; // Set plannedSpeed to 0
myStepper.step(plannedSpeed); // Set stepper to plannedSpeed
Serial.print("Stopping at " );
Serial.println(plannedSpeed);
delay(10);
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]