M
M
Max Darkleviathan2021-07-05 16:59:33
Arduino
Max Darkleviathan, 2021-07-05 16:59:33

How to close and open a circuit with an arduino with a relay?

help with a simple problem.
Here is a sketch for opening the circuit for turning on the motor through the relay when the button is pressed.

#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); // подаем сигнал на пин реле
  }
}


How can I force the relay to close / open constantly every 2 minutes, and where is the error in the logic?
Start nachaetsya of course after pressing the button. and then in a cycle after 2 minutes, closing / opening.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
R
Roman Kitaev, 2021-07-05
@deliro

Don't use delay. This is a dead end solution that will slow down absolutely everything if there are more than one action. Well, for example, if you need to close relay No. 1 every 2 minutes for 10 seconds, and relay No. 2 every 3 minutes for 6 seconds
https://alexgyver.ru/lessons/time/

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question