Нужна помощь в скетче
- Войдите на сайт для отправки комментариев
Пт, 10/12/2021 - 12:16
Всем привет, изучаю первые пару дней ардуинку.
написал такой скетч:
==============================================
На выходах стоит двух канальное реле, которая управляет двигателем, в разные стороны (переполюсовка).
На btn1 - кнопка
На btn2 - датчик с NC и NO, срабатывает через таймер.
На btn3 - оптопара которая отключает первый канал реле
На btn4 - оптопара которая отключает второй канал реле
Не могу понять как сделать так, что в случае если одна из оптопар на btn3 или btn4 в активном режиме, то блjкируется выполнение команд btn1 или btn2.
Для того что бы электропривод не возможно было запустить дважды в одну сторону.
Заранее благодарю за помощь.
Всем привет, изучаю первые пару дней ардуинку.
От малодец какой. Теперь изучи местные правила
Извиняюсь.
#define EB_HOLD 500 #define EB_DEB 100 #include <EncButton.h> EncButton<EB_TICK, A1>btn1(INPUT_PULLUP); //Разблокировка EncButton<EB_TICK, A2>btn2(INPUT_PULLUP); //Блокировка EncButton<EB_TICK, A3>btn3(INPUT_PULLUP); //Стоп разблокировки EncButton<EB_TICK, A4>btn4(INPUT_PULLUP); //Стоп Блокировки void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); digitalWrite (2,1); //разблокировка digitalWrite (3,1); //блокировка } void loop(){ static uint32_t tmr; static bool flag = false; //для таймера открытия btn1.tick(); //пуск разблокировки if (btn1.isHeld()) digitalWrite(3,0); btn2.tick(); //пуск разблокировки if (btn2.isRelease()) { flag = true; tmr = millis(); } if (flag && millis() - tmr >=10000) { digitalWrite(2, !digitalRead(2)); flag = false; } btn3.tick(); //остановка разблокировки if (btn3.isRelease()) digitalWrite(3,1); btn4.tick(); //остановка блокировки if (btn4.isRelease()) digitalWrite(2 ,1); }Схему рисуйте. А то пальцем в небо получается.
В программе есть flag. Сейчас это условие по времени. Такие же флаги надо завести для режимов и проверять какой режим используется. Обходить действия другого режима. Соответственно переключать режимы по условию изменяя флаги.
/sites/default/files/u64854/bezymyannyy.png
Или использовать схемотехническое решение для блокировки. Это нужно в качестве защиты от глюков софта.