#define ledPin 25 // Светодиод повесим на 26 пин.
bool ledState = false; // по дефолту в 0.
uint32_t previousMillis = 0; // запоминаем время, последнего срабатывания таймера.
const long interval = 1; // цикличность обратного отсчета времени 1 сек.
bool triggerActive = false; // переменная для отслеживания, был ли активирован триггер или нет.
uint32_t timer; // Переменная хранения времени
uint32_t t1 = 13; // период включения в секундах
uint32_t t3 = 4; // длительность в секундах
void setup() {
Serial.begin(9600);
delay(1000);
pinMode(ledPin, OUTPUT);
}
void loop()
{
uint32_t currentMillis = millis() / 1000; // аптайм в секундах.
// ####################### Таймер #######################
if (currentMillis - timer >= (ledState ? t3 : t1) && !triggerActive) // Условие включения таймера
{
timer = currentMillis;
ledState = !ledState;
digitalWrite(ledPin, ledState);
Serial.println("ON");
}
// ############# Вывод остатка времени до включения таймера ##############
if (currentMillis - previousMillis >= interval)
{
if (!ledState)
{
uint32_t countdown = t1 - (currentMillis - timer);
uint8_t H = countdown / 3600; // остаток часов
uint8_t M = countdown / 60 % 60; // остаток минут
uint8_t S = countdown % 60; // остаток секунд
char buffer[9]; // кол-во знаков
sprintf(buffer, "%02d:%02d:%02d", H, M, S); // в буфер формат чч:мм:cc
Serial.println(buffer); // в сериал порт
}
previousMillis = currentMillis;
}
}