ARDUINO Управление шаговым двигателем для привода астро монтировки телескопа

Zinovaleks

✩✩✩✩✩✩✩
20 Мар 2019
2
0
Имеется шаговый двигатель 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);
}
Данный код, написанный мною, работает не корректно, случайным образом реагирует на кнопки с задержкой, и при отпускании кнопки скорость не возвращается. Подскажите пожалуйста, где кроется ошибка?
 

Zinovaleks

✩✩✩✩✩✩✩
20 Мар 2019
2
0
Вроде разобрался, только с библиотекой от Гайвера
Код:
#include <GyverStepper.h>
#include "GyverButton.h"
GStepper<STEPPER4WIRE_HALF> stepper(4076, 8, 10, 9, 11);
// мотор с драйвером ULN2003 подключается по порядку пинов, но крайние нужно поменять местами
// то есть у меня подключено D2-IN1, D3-IN2, D4-IN3, D5-IN4, но в программе поменял 5 и 2
GButton btn1(4, LOW_PULL); // указываем пин
GButton btn2(5, LOW_PULL);
GButton btn3(6, LOW_PULL);

void setup() {
    stepper.setRunMode(KEEP_SPEED);  // режим поддержания скорости
    stepper.setSpeedDeg(2.125); // в градусах/сек
     
}
void loop() {
  stepper.tick();
  btn1.tick();
  btn2.tick();
  btn3.tick();
   if (btn1.isPress()) stepper.setSpeedDeg(20);
   if (btn2.isPress()) stepper.setSpeedDeg(-2.125);
   if (btn3.isPress()) stepper.setSpeedDeg(-20);
   if (btn1.isRelease() || btn2.isRelease() || btn3.isRelease()) stepper.setSpeedDeg(2.125);
}
Двигатель моментально реагирует на нажатие и отпускание кнопок.