mirror of
https://github.com/gunner47/GyverLamp.git
synced 2025-08-07 09:00:30 +03:00
Добавлены "ночные часы" с регулировкой яркости для вывода времени
This commit is contained in:
@@ -17,7 +17,7 @@ uint8_t espMode = ESP_MODE; // ESP_MODE може
|
||||
#define ESP_UDP_PORT (8888U) // номер порта, который будет "слушать" UDP сервер во время работы лампы как в режиме WiFi точки доступа, так и в режиме WiFi клиента (лучше не менять)
|
||||
#define ESP_CONN_TIMEOUT (7U) // время в секундах (ДОЛЖНО БЫТЬ МЕНЬШЕ 8, иначе сработает WDT), которое ESP будет пытаться подключиться к WiFi сети, после его истечения автоматически развернёт WiFi точку доступа
|
||||
#define ESP_CONF_TIMEOUT (300U) // время в секундах, которое ESP будет ждать ввода SSID и пароля WiFi сети роутера в конфигурационном режиме, после его истечения ESP перезагружается
|
||||
//#define GENERAL_DEBUG // если строка не закомментирована, будут выводиться отладочные сообщения
|
||||
#define GENERAL_DEBUG // если строка не закомментирована, будут выводиться отладочные сообщения
|
||||
#define WIFIMAN_DEBUG (true) // вывод отладочных сообщений при подключении к WiFi сети: true - выводятся, false - не выводятся; настройка не зависит от GENERAL_DEBUG
|
||||
#define OTA // если строка не закомментирована, модуль будет ждать два последдовательных запроса пользователя на прошивку по воздуху (см. документацию в "шапке")
|
||||
#ifdef OTA
|
||||
@@ -42,6 +42,11 @@ const uint8_t AP_STATIC_IP[] = {192, 168, 4, 1}; // статичес
|
||||
#define NTP_INTERVAL (30UL * 60UL * 1000UL) // интервал синхронизации времени (30 минут)
|
||||
#define PRINT_TIME (0U) // 0U - не выводить время бегущей строкой; 1U - вывод времени каждый час; 2U - каждый час + каждые 30 минут; 3U - каждый час + каждые 15 минут
|
||||
// 4U - каждый час + каждые 10 минут; 5U - каждый час + каждые 5 минут; 6U - каждый час + каждую минуту
|
||||
#define NIGHT_HOURS_START (1380U) // начало действия "ночного времени" (в минутах от начала суток, 23:00), текущее время бегущей строкой будет выводиться с яркостью NIGHT_HOURS_BRIGHTNESS
|
||||
#define NIGHT_HOURS_STOP (479U) // конец действия "ночного времени" (в минутах от начала суток, 7:59)
|
||||
#define DAY_HOURS_BRIGHTNESS (255) // яркость для вывода текущего времени бегущей строкой днём; если -1, будет использована яркость текущего эффекта (она известна, даже когда матрица выключена)
|
||||
#define NIGHT_HOURS_BRIGHTNESS (5) // яркость для вывода текущего времени бегущей строкой ночью; если -1, будет использована яркость текущего эффекта (она известна, даже когда матрица выключена)
|
||||
// константы DAY_HOURS_BRIGHTNESS и NIGHT_HOURS_BRIGHTNESS используются только, когда матрица выключена, иначе будет использована яркость текущего эффекта
|
||||
|
||||
// --- ВНЕШНЕЕ УПРАВЛЕНИЕ --------------
|
||||
#define USE_MQTT (false) // true - используется mqtt клиент, false - нет
|
||||
|
@@ -92,6 +92,8 @@
|
||||
- Добавлен вывод времени бегущей строкой:
|
||||
- * по запросу - шестикратному клику - текущее время белым цветом;
|
||||
- * периодически - определяется константой PRINT_TIME в Constants.h - от раза в час (красным цветом) до раза в минуту (синим цветом) с яркостью текущего эффекта как при включенной, так и при выключенной матрице
|
||||
--- 19.10.2019
|
||||
- Добавлены "ночные часы" (от NIGHT_HOURS_START до NIGHT_HOURS_STOP включительно) и "дневные часы" (всё остальное время), для которых доступна регулировка яркости для вывода времени бегущей строкой - NIGHT_HOURS_BRIGHTNESS и DAY_HOURS_BRIGHTNESS
|
||||
*/
|
||||
|
||||
// Ссылка для менеджера плат:
|
||||
|
@@ -109,7 +109,7 @@ void buttonTick()
|
||||
// шестикратное нажатие
|
||||
if (clickCount == 6U) // вывод текущего времени бегущей строкой
|
||||
{
|
||||
printTime(thisTime, true);
|
||||
printTime(thisTime, true, ONflag);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -63,9 +63,10 @@ bool fillString(const char* text, CRGB letterColor)
|
||||
}
|
||||
|
||||
|
||||
void printTime(uint32_t thisTime, bool onDemand) // периодический вывод времени бегущей строкой; onDemand - по требованию, вывод текущего времени; иначе - вывод времени по расписанию
|
||||
void printTime(uint32_t thisTime, bool onDemand, bool ONflag) // периодический вывод времени бегущей строкой; onDemand - по требованию, вывод текущего времени; иначе - вывод времени по расписанию
|
||||
{
|
||||
#if defined(USE_NTP) && defined(PRINT_TIME) // вывод, только если используется синхронизация времени и если заказан его вывод бегущей строкой
|
||||
|
||||
if (espMode != 1U || !ntpServerAddressResolved) // вывод только в режиме WiFi клиента и только, если имя сервера времени разрезолвлено
|
||||
{
|
||||
return;
|
||||
@@ -133,7 +134,7 @@ void printTime(uint32_t thisTime, bool onDemand) // периодич
|
||||
char stringTime[10U]; // буффер для выводимого текста, его длина должна быть НЕ МЕНЬШЕ, чем длина текста + 1
|
||||
sprintf_P(stringTime, PSTR("-> %u:%02u"), (uint8_t)((thisTime - thisTime % 60U) / 60U), (uint8_t)(thisTime % 60U));
|
||||
loadingFlag = true;
|
||||
FastLED.setBrightness(modes[currentMode].Brightness);
|
||||
FastLED.setBrightness(getBrightnessForPrintTime(thisTime, ONflag));
|
||||
delay(1);
|
||||
while (!fillString(stringTime, letterColor)) { delay(1); ESP.wdtFeed(); }
|
||||
loadingFlag = true;
|
||||
@@ -143,6 +144,45 @@ void printTime(uint32_t thisTime, bool onDemand) // периодич
|
||||
}
|
||||
|
||||
|
||||
uint8_t getBrightnessForPrintTime(uint32_t thisTime, bool ONflag) // определение яркости для вывода времени бегущей строкой в зависимости от ESP_MODE, USE_NTP, успешности синхронизации времени,
|
||||
// текущего времени суток, настроек дневного/ночного времени и того, включена ли сейчас матрица
|
||||
{
|
||||
#if defined(USE_NTP) && defined(PRINT_TIME)
|
||||
|
||||
if (espMode != 1U || !ntpServerAddressResolved || ONflag)
|
||||
{
|
||||
return modes[currentMode].Brightness;
|
||||
}
|
||||
|
||||
if (NIGHT_HOURS_START >= NIGHT_HOURS_STOP) // ночное время включает переход через полночь
|
||||
{
|
||||
if (thisTime >= NIGHT_HOURS_START || thisTime <= NIGHT_HOURS_STOP)// период действия ночного времени
|
||||
{
|
||||
return (NIGHT_HOURS_BRIGHTNESS >= 0)
|
||||
? NIGHT_HOURS_BRIGHTNESS
|
||||
: modes[currentMode].Brightness;
|
||||
}
|
||||
}
|
||||
else // ночное время не включает переход через полночь
|
||||
{
|
||||
if (thisTime >= NIGHT_HOURS_START && thisTime <= NIGHT_HOURS_STOP)// период действия ночного времени
|
||||
{
|
||||
return (NIGHT_HOURS_BRIGHTNESS >= 0)
|
||||
? NIGHT_HOURS_BRIGHTNESS
|
||||
: modes[currentMode].Brightness;
|
||||
}
|
||||
}
|
||||
|
||||
return (DAY_HOURS_BRIGHTNESS >= 0) // дневное время
|
||||
? DAY_HOURS_BRIGHTNESS
|
||||
: modes[currentMode].Brightness;
|
||||
|
||||
#endif
|
||||
|
||||
return modes[currentMode].Brightness;
|
||||
}
|
||||
|
||||
|
||||
void drawLetter(uint8_t letter, int8_t offset, CRGB letterColor)
|
||||
{
|
||||
uint8_t start_pos = 0, finish_pos = LET_WIDTH;
|
||||
|
@@ -60,7 +60,7 @@ void timeTick()
|
||||
thisTime = timeClient.getHours() * 60 + timeClient.getMinutes();
|
||||
uint32_t thisFullTime = timeClient.getHours() * 3600 + timeClient.getMinutes() * 60 + timeClient.getSeconds();
|
||||
|
||||
printTime(thisTime, false);
|
||||
printTime(thisTime, false, ONflag);
|
||||
|
||||
// проверка рассвета
|
||||
if (alarms[thisDay].State && // день будильника
|
||||
|
Reference in New Issue
Block a user