Библиотека кнопок GyverButton и шаговик 28BYJ-48 с драйвером ULN2003
- Войдите на сайт для отправки комментариев
Вс, 07/02/2021 - 10:00
Хочу создать простейший макет лифта. Когда кнопка только 1 - всё работает безупречно. Однако если добавить 2 или 3, а то и обе кнопки сразу - в порт бесконечно выводится текст, что кнопка 2 или 3 нажата, даже если ничего не нажимать. А шаговик только греется и очень медленно вращается в одну сторону. Начинающий немного, пока хочу переписать код на OneButton. Вот код:\
#include <GyverStepper.h> #include <AnalogKey.h> #include <GyverButton.h> #define redpin A2 #define greenpin A3 GButton lift1(2); GButton lift2(3); GButton lift3(4); 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); // Скорость 600 ENGINE.setMaxSpeed(600); // Ускорение 0 (сразу максимальная скорость) ENGINE.setAcceleration(0); // Автоматическое выключение шаговика при достижении нужной позиции ENGINE.autoPower(true); // Если положение шаговика больше или меньше -2048 (1 этаж) if(ENGINE.getCurrent() > -2048 && ENGINE.getCurrent() < -2048) { // Едем на 1 этаж (-2048) ENGINE.setTarget(-2048); } /*digitalWrite(greenpin, LOW); digitalWrite(redpin, LOW);*/ } void loop() { // Объявление шаговика и 3 кнопок. ENGINE.tick(); lift1.tick(); lift2.tick(); lift3.tick(); // Если кнопка lift1 (1 этаж) нажата и положение шаговика не 1 этаж if(lift1.isClick() || liftflag1 == false) { // Вывод в порт "CLICKED 1" Serial.println("CLICKED 1"); // Едем на 1 этаж (-2048) ENGINE.setTarget(-2048); // Включение красного светодиода, сигнализирующего движение лифта digitalWrite(greenpin, LOW); digitalWrite(redpin, HIGH); // Если шаговик остановился if(ENGINE.getState() == false) { // Переключение состояния положения лифта на "1 этаж" liftflag3 = false; liftflag2 = false; liftflag1 = true; // Включение зелёного светодиода, сигнализирующего прибытие и нахождение на этаже digitalWrite(redpin, LOW); digitalWrite(greenpin, HIGH); } } else if(lift2.isClick() || liftflag2 == false) { Serial.println("CLICKED 2"); ENGINE.setTarget(-1024); digitalWrite(greenpin, LOW); digitalWrite(redpin, HIGH); if(ENGINE.getState() == false) { liftflag1 = false; liftflag3 = false; liftflag2 = true; digitalWrite(redpin, LOW); digitalWrite(greenpin, HIGH); } } else if(lift3.isClick() || liftflag3 == false) { Serial.println("CLICKED 3"); ENGINE.setTarget(1024); digitalWrite(greenpin, LOW); digitalWrite(redpin, HIGH); if(ENGINE.getState() == false) { liftflag1 = false; liftflag1 = false; liftflag3 = true; digitalWrite(redpin, LOW); digitalWrite(greenpin, HIGH); } } }
Вместо ИЛИ нужно И
Условия срабатывают по, например,
liftflag3 ==
false.
Я перепутал ИЛИ с И??!!! Какой стыд... Спасибо!
-> https://community.alexgyver.ru/