Нужна помощь в скетче

cargoluxe
Offline
Зарегистрирован: 10.12.2021

Всем привет, изучаю первые пару дней ардуинку.

написал такой скетч:

 

 

==============================================
 
 
 
 
На выходах стоит двух канальное реле, которая управляет двигателем, в разные стороны (переполюсовка).
На btn1 - кнопка
На btn2 - датчик с NC и NO, срабатывает через таймер.
На btn3 - оптопара которая отключает первый канал реле
На btn4 - оптопара которая отключает второй канал реле
 
Не могу понять как сделать так, что в случае если одна из оптопар на btn3 или btn4 в активном режиме, то блjкируется выполнение команд btn1 или btn2.
Для того что бы электропривод не возможно было запустить дважды в одну сторону.
Заранее благодарю за помощь.

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

cargoluxe пишет:

Всем привет, изучаю первые пару дней ардуинку.

От малодец какой.  Теперь изучи местные правила

cargoluxe
Offline
Зарегистрирован: 10.12.2021

Извиняюсь.


#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);   
  
}
 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Схему рисуйте. А то пальцем в небо получается.

nik182
Offline
Зарегистрирован: 04.05.2015

В программе есть flag. Сейчас это условие по времени. Такие же флаги надо завести для режимов и проверять какой режим используется. Обходить действия другого режима. Соответственно переключать режимы по условию изменяя флаги.

cargoluxe
Offline
Зарегистрирован: 10.12.2021
-NMi-
Offline
Зарегистрирован: 20.08.2018

Или использовать схемотехническое решение для блокировки. Это нужно в качестве защиты от глюков софта.