Имеется шаговый двигатель 28BYJ-48, подключен через драйвер ULN2003, при подаче питания вращается с определённой скоростью (2,125) в прямом направлении, но требуется им дополнительно управлять с помощью трёх кнопок (притянуты к +5в через резистор, кнопка на GND), ускорение вперёд, назад и с той же скоростью назад, при нажатой кнопке, когда кнопка отпущен шаговый двигатель должен продолжить двигаться с заданной скоростью (2,125).
Данный код, написанный мною, работает не корректно, случайным образом реагирует на кнопки с задержкой, и при отпускании кнопки скорость не возвращается. Подскажите пожалуйста, где кроется ошибка?
Код:
#include <GyverStepper.h>
#include <EncButton.h>
GStepper<STEPPER4WIRE_HALF> stepper(4076, 8, 10, 9, 11);
// мотор с драйвером ULN2003 подключается по порядку пинов, но крайние нужно поменять местами
// то есть у меня подключено D2-IN1, D3-IN2, D4-IN3, D5-IN4, но в программе поменял 5 и 2
Button btn1(4); // указываем пин
Button btn2(5);
Button btn3(6);
void setup() {
stepper.setRunMode(KEEP_SPEED); // режим поддержания скорости
stepper.setSpeedDeg(2,125); // в градусах/сек
}
void loop() {
stepper.tick();
btn1.tick();
btn2.tick();
btn3.tick();
if (btn1.click()) stepper.setSpeedDeg(4);
if (btn2.click()) stepper.setSpeedDeg(-2);
if (btn3.click()) stepper.setSpeedDeg(-4);
}