вы не поняли. Алекс пошутил.Спасибо за ответ, попробую.
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);
}
}