darkleviathan
@darkleviathan

Как при помощи arduino с реле замыкать и размыкать цепь по времени?

помогите разобраться с простой задачей.
Вот скетч под размыкание замыкание цепи включения моторчкика через релешку при нажатии кнопки.
#define button_pin 3  // пин кнопки
#define relay_pin 6   // пин реле

boolean butt_flag = 0;     // флажок нажатия кнопки
boolean butt;              // переменная, хранящая состояние кнопки
boolean flag = 0;          // флажок режима
//const int mtime = 120000;
unsigned long last_press;  // таймер для фильтра дребезга
unsigned long my_timer;  
unsigned long my_timer2;  
void setup() {
  pinMode(button_pin, INPUT_PULLUP);  // кнопка подтянута внутренним резистором 
  pinMode(relay_pin, OUTPUT);         // пин реле как выход
}

void loop() {
  butt = !digitalRead(button_pin);   // считать текущее положение кноопки
  
  if (butt == 1 && butt_flag == 0 && millis() - last_press > 100) {  // если кнопка нажата, до этого была бы отпущена
      butt_flag = 1;                 // запоминаем, что нажали кнопку
	  flag = !flag;                  // инвертируем флажок
	  last_press = millis();         // запоминаем время
	  
	  digitalWrite(relay_pin, flag); // подаем сигнал на пин реле
  }
  if (butt == 0 && butt_flag == 1) { // если кнопка отпущена, и до этого была нажата
      butt_flag = 0;                 // запоминаем, что отпустили кнопку  
	  my_timer = millis();           // таймер
  }
  if (butt == 1 && butt_flag == 0 && millis() - my_timer == 120000 ) {  
      butt_flag = 1;                 // запоминаем статус нажатия
	  flag = !flag;                  // инвертируем флажок
	  
	  
	  digitalWrite(relay_pin, flag); // подаем сигнал на пин реле
	  my_timer2 = millis();
  }
  if (butt == 0 && butt_flag == 1 && millis() - my_timer2 == 120000 ) {  
      butt_flag = 0;                 // запоминаем статус нажатия
	  flag = !flag;                  // инвертируем флажок
	  my_timer = millis();
	  
	  digitalWrite(relay_pin, flag); // подаем сигнал на пин реле
  }
}


Как мне заставить замыкат\размыкать релешку постоянно через каждые 2 минуты, и где ошибка в логике?
Старт начинаеться разумеется после нажатия кнопки. и потом в цикле через 2 минуты замыкание\размыкание.
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
@deliro
Агрессивное программирование
Не используй delay. Это тупиковое решение, которое будет тормозить абсолютно всё, если действий будет больше одного. Ну например, если нужно замыкать реле №1 каждые 2 минуты на 10 секунд, а реле №2 каждые 3 минуты на 6 секунд

https://alexgyver.ru/lessons/time/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы