ARDUINO Помогите c шаговиком с ULN2003

Ukt208208

✩✩✩✩✩✩✩
16 Янв 2021
6
0
Создаю простейший макет лифта. При запуске светодиоды на драйвере мерцают, а шаговик не крутится (только греется). В порт бесконечно выводится "Вызов на 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);
        }
      }
    }
}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
Попробуйте поменять скорость вращения. Для начала поставьте 6 оборотов в минуту, 1 оборот за 10 секунд, т.е. 205 шагов в секунду выходит.
 
  • Лойс +1
Реакции: Ukt208208

Ukt208208

✩✩✩✩✩✩✩
16 Янв 2021
6
0
Попробуйте поменять скорость вращения. Для начала поставьте 6 оборотов в минуту, 1 оборот за 10 секунд, т.е. 205 шагов в секунду выходит.
Тааак.... Работаю-работаю с библиотекой и не знаю, как мне выставить скорость. Не подскажите, в документации не вижу совсем?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
тут вся документация. Я с этой библиотекой не работал, но знаю, что если попытаться вращать быстрее чем надо, то вращения не будет.
... degPerMinute() и degPerHour() , которые нужно использовать совместно с
setSpeedDeg() и setMaxSpeedDeg()
:
stepper.setMaxSpeedDeg(degPerMinute(360)); // скорость 360 градусов в минуту для режима FOLLOW_POS
 
  • Лойс +1
Реакции: Ukt208208

Ukt208208

✩✩✩✩✩✩✩
16 Янв 2021
6
0
Сейчас я упростил код, но суть та же. Однако всё же хочу сделать акцент на бесконечное нажатие кнопок. Если кнопка только одна - всё работает безупречно. Но если добавить 2 или 3, а то и сразу обе кнопки - в порт выводится бесконечное нажатие. В чём загвоздка?
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
178
51
выводите в сериал все параметры, которые прописаны в условиях срабатывания кнопок.
тогда будете представлять что у вас происходит и где косяк.