Создаю простейший макет лифта. При запуске светодиоды на драйвере мерцают, а шаговик не крутится (только греется). В порт бесконечно выводится "Вызов на 2 этаж" (иногда "Вызов на 1 этаж"). На нажатия кнопок при этом не реагирует. Я думал, что проблема с контактами кнопок или в целом всех проводов, но это не так. Вот код:
C++:
#include <GyverStepper.h>
#include <AnalogKey.h>
#include <GyverButton.h>
#define redpin A2
#define greenpin A3
GButton lift1(4);
GButton lift2(3);
GButton lift3(2);
bool liftflag1 = true;
bool liftflag2 = false;
bool liftflag3 = false;
GStepper<STEPPER4WIRE> ENGINE(2048, 11, 9, 10, 8);
void setup() {
Serial.begin(9600);
pinMode(redpin, OUTPUT);
pinMode(greenpin, OUTPUT);
ENGINE.setRunMode(FOLLOW_POS);
if(ENGINE.getCurrent() > -2048) {
ENGINE.setTarget(-2048);
}
digitalWrite(greenpin, LOW);
digitalWrite(redpin, LOW);
}
void loop() {
ENGINE.tick();
lift1.tick();
lift2.tick();
lift3.tick();
// Если кнопка "1 этаж" нажата и лифт не на 1 этаже
if(lift1.isPress() || liftflag1 == false) {
// Вывод сообщения "Вызов на 1 этаж"
Serial.println("Вызов на 1 этаж");
// Выключение зелёного и включение красного светодиода, сигнализируещего о движении лифта на этаж
digitalWrite(greenpin, LOW);
digitalWrite(redpin, HIGH);
// Запуск двигателя
ENGINE.setTarget(-2000);
// Если двигатель остановился
if(ENGINE.getState() == false) {
// Если положение двигателя "1 этаж"
if(ENGINE.getCurrent() == -2048) {
// Статус лифта задаётся "На 1 этаже" и отключение статусов других этажей
liftflag1 = true;
liftflag2 = false;
liftflag3 = false;
// Сообщение о прибытии лифта на этаж
Serial.println("Лифт приехал на 1 этаж");
// Выключение красного светодиода и включение зелёного, сигнализируещего о нахождении лифта на этаже
digitalWrite(redpin, LOW);
digitalWrite(greenpin, HIGH);
}
}
}
else if(lift2.isPress() || liftflag2 == false){
Serial.println("Вызов на 2 этаж");
digitalWrite(greenpin, LOW);
digitalWrite(redpin, HIGH);
ENGINE.setTarget(-1000);
if(ENGINE.getState() == false) {
if(ENGINE.getCurrent() == -1024) {
liftflag2 = true;
liftflag1 = false;
liftflag3 = false;
Serial.println("Лифт приехал на 2 этаж");
digitalWrite(redpin, LOW);
digitalWrite(greenpin, HIGH);
}
}
}
else if(lift3.isPress() || liftflag3 == false) {
Serial.println("Вызов на 3 этаж");
digitalWrite(greenpin, LOW);
digitalWrite(redpin, HIGH);
ENGINE.setTarget(1000);
if(ENGINE.getState() == false) {
if(ENGINE.getCurrent() == 1024) {
liftflag3 = true;
liftflag2 = false;
liftflag1 = false;
Serial.println("Лифт приехал на 3 этаж");
digitalWrite(redpin, LOW);
digitalWrite(greenpin, HIGH);
}
}
}
}