вы не поняли. Алекс пошутил.Спасибо за ответ, попробую.
P.S.: Я же могу оставить тело циклаwhileпустым?
Код
while (!timer.isReady());
вообще ничем не отличается от delay() - он точно также блокирует программу.
Применять его не нужно
вы не поняли. Алекс пошутил.Спасибо за ответ, попробую.
P.S.: Я же могу оставить тело циклаwhileпустым?
#define BTN     2       // Пин кнопки
#define BUZZER_PIN  5       // Пин для баззера (если нужен)
#define BUZZER_TONE 2500    // Частота баззера в герцах
#define BUZZER_DUR  300     // Длинна сигнала баззера в мс
#include <GyverButton.h>
GButton btn(BTN, HIGH_PULL);
#include "GyverTimer.h"
GTimer_ms Timer_1((long)3 * 60 * 1000);         // 3 минут
GTimer_ms Timer_2((long)5 * 60 * 1000);         // 5 минуты
bool checkFlag = false;
uint32_t checkTimer;
void setup()
{
  Serial.begin(9600);
  pinMode(BUZZER_PIN, OUTPUT);  // Пин баззера как выход
  btn.setTimeout(1500);  
}
void loop()
{
  btn.tick();     // опрос кнопки
  if (btn.isClick()) {    // короткое нажатие
      checkFlag = !checkFlag;   // инверт флага
      Serial.print("checkFlag ");
      Serial.println(checkFlag);
  }
  if (btn.isHolded()) { // длинное нажатие
    Serial.println("Tick");
    tone(BUZZER_PIN, BUZZER_TONE, BUZZER_DUR); // подаем сигнал
    Tick();        // переход в рабочий цикл
  }
}
void Tick()
{
  if (Timer_1.isReady()) { // Запуск 1го таймера на 3 минуты
    checkFlag = true;
    checkTimer = millis();
    tone(BUZZER_PIN, BUZZER_TONE, BUZZER_DUR); // подаем сигнал
    Serial.println(3);
  }
  if (checkFlag && millis() - checkTimer >= 1500) { // после конца 1го таймера дается 1.5 сек. на нажатие кнопки. Если нажата, запуск 2го таймера, иначе вывод ошибки
    //checkTimer = millis();
    checkFlag = false;
    Serial.println("Click");
  } //else { Serial.println("NOOOOOOOOOOOOOOOOOOOOO Click");}
  if (!checkFlag) {
    Timer_2.start();
  }
  if (Timer_2.isReady()) {  // Запуск 2го таймера на 5 минут
    tone(BUZZER_PIN, BUZZER_TONE, BUZZER_DUR); // подаем сигнал
    Serial.println(5);
  }
  //else { Serial.println("EROR"); }
}
	#include <GyverTimer.h>
GTimer dayPeriod_relay_myTimer(MS);
GTimer nightPeriod_relay_myTimer(MS);
GTimer relay_OnWork_myTimer(MS);
void setup()
{
  Serial.begin(9600);
    pinMode(2, OUTPUT);
    digitalWrite(2, 0);
   dayPeriod_relay_myTimer.setInterval(5000);
   nightPeriod_relay_myTimer.setInterval(10000);
   relay_OnWork_myTimer.setTimeout(3000); 
}
void loop() { 
  if (analogRead(2) > 400) {
    
    if (dayPeriod_relay_myTimer.isEnabled())nightPeriod_relay_myTimer.stop();
    
    if (dayPeriod_relay_myTimer.isReady()){
    digitalWrite(2,HIGH);
    relay_OnWork_myTimer.start();
    }
  if (relay_OnWork_myTimer.isReady()) digitalWrite(2,LOW);
  }
  if (analogRead(2) < 400) {
    
    if (nightPeriod_relay_myTimer.isEnabled())dayPeriod_relay_myTimer.stop();
    
    if (nightPeriod_relay_myTimer.isReady()){
    digitalWrite(2,HIGH);
    relay_OnWork_myTimer.start();
    }
  if (relay_OnWork_myTimer.isReady()) digitalWrite(2,LOW);
  }
}
	#include <GyverTimer.h>
GTimer dayPeriod_relay_myTimer(MS);
GTimer nightPeriod_relay_myTimer(MS);
GTimer relay_OnWork_myTimer(MS);
void setup()
{
  Serial.begin(9600);
    pinMode(2, OUTPUT);
    digitalWrite(2, 0);
   dayPeriod_relay_myTimer.setInterval(5000);
   nightPeriod_relay_myTimer.setInterval(10000);
   relay_OnWork_myTimer.setTimeout(3000); 
}
void loop() { 
  if (analogRead(2) > 400) {
    
    if (dayPeriod_relay_myTimer.isEnabled())nightPeriod_relay_myTimer.stop();
    dayPeriod_relay_myTimer.start();
    if (dayPeriod_relay_myTimer.isReady()){
    digitalWrite(2,HIGH);
    relay_OnWork_myTimer.start();
    }
  if (relay_OnWork_myTimer.isReady()) digitalWrite(2,LOW);
  }
  if (analogRead(2) < 400) {
    
    if (nightPeriod_relay_myTimer.isEnabled())dayPeriod_relay_myTimer.stop();
    nightPeriod_relay_myTimer.start();
    if (nightPeriod_relay_myTimer.isReady()){
    digitalWrite(2,HIGH);
    relay_OnWork_myTimer.start();
    }
  if (relay_OnWork_myTimer.isReady()) digitalWrite(2,LOW);
  }
}