Всем привет, подскажите пожалуйста что я делаю не так. Суть делаю таймер в обычном режиме не что не происходит, при долгом нажатие на кнопку таймер переключается в состояние отсчёта времени. После того как первый лимит времени вышел, таймер спрашивает у пользователя продолжить, если пользователь нажимает на кнопку, то запускается 2й таймер. По окончании 2го лимита времени таймер снова спрашивает продолжить, если пользователь нажимает на кнопку то запускается 1й таймер и так по кругу. Но если пользователь не нажмёт на кнопку во время подтверждения или нажмёт во время любого таймера на длительное время, то программа выходит из режима таймер.
Вот сам код:
#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"); }
}
Вложения
-
2 KB Просмотры: 2