diff --git a/firmware/GyverLamp_v1.5.1/GyverLamp_v1.5.1.ino b/firmware/GyverLamp_v1.5.1/GyverLamp_v1.5.1.ino index b8c281a..d7c4a7f 100644 --- a/firmware/GyverLamp_v1.5.1/GyverLamp_v1.5.1.ino +++ b/firmware/GyverLamp_v1.5.1/GyverLamp_v1.5.1.ino @@ -74,7 +74,7 @@ byte IP_AP[] = {192, 168, 4, 66}; // статический IP точки до #define FASTLED_ESP8266_RAW_PIN_ORDER #define NTP_INTERVAL 60 * 1000 // обновление (1 минута) -#include "timerMinim.h" +#include "timer2Minim.h" #include #include #include diff --git a/firmware/GyverLamp_v1.5.1/time.ino b/firmware/GyverLamp_v1.5.1/time.ino index 9ec0991..ba7d14b 100644 --- a/firmware/GyverLamp_v1.5.1/time.ino +++ b/firmware/GyverLamp_v1.5.1/time.ino @@ -18,7 +18,7 @@ void timeTick() { } } - if (minuteCounter > 5) { // синхронизация каждые 5 минут + if (minuteCounter > 30 && WiFi.status() == WL_CONNECTED) { // синхронизация каждые 30 минут minuteCounter = 0; if (timeClient.update()) { hrs = timeClient.getHours(); diff --git a/firmware/GyverLamp_v1.5.1/timerMinim.h b/firmware/GyverLamp_v1.5.1/timer2Minim.h similarity index 60% rename from firmware/GyverLamp_v1.5.1/timerMinim.h rename to firmware/GyverLamp_v1.5.1/timer2Minim.h index 643a7f6..d912e02 100644 --- a/firmware/GyverLamp_v1.5.1/timerMinim.h +++ b/firmware/GyverLamp_v1.5.1/timer2Minim.h @@ -1,4 +1,6 @@ -// мини-класс таймера, версия 1.0 +// мини-класс таймера, версия 2.0 +// использован улучшенный алгоритм таймера на millis +// алгоритм чуть медленнее, но обеспечивает кратные интервалы и защиту от пропусков и переполнений class timerMinim { @@ -23,8 +25,12 @@ void timerMinim::setInterval(uint32_t interval) { } boolean timerMinim::isReady() { - if ((long)millis() - _timer >= _interval) { - _timer = millis(); + uint32_t thisMls = millis(); + if (thisMls - _timer >= _interval) { + do { + _timer += _interval; + if (_timer < _interval) break; // переполнение uint32_t + } while (_timer < thisMls - _interval); // защита от пропуска шага return true; } else { return false;