Добавлены "ночные часы" с регулировкой яркости для вывода времени

This commit is contained in:
gunner47
2019-10-19 15:09:51 +03:00
parent 39e304497b
commit ec679047bf
5 changed files with 52 additions and 5 deletions

View File

@@ -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 - нет

View File

@@ -92,6 +92,8 @@
- Добавлен вывод времени бегущей строкой:
- * по запросу - шестикратному клику - текущее время белым цветом;
- * периодически - определяется константой PRINT_TIME в Constants.h - от раза в час (красным цветом) до раза в минуту (синим цветом) с яркостью текущего эффекта как при включенной, так и при выключенной матрице
--- 19.10.2019
- Добавлены "ночные часы" (от NIGHT_HOURS_START до NIGHT_HOURS_STOP включительно) и "дневные часы" (всё остальное время), для которых доступна регулировка яркости для вывода времени бегущей строкой - NIGHT_HOURS_BRIGHTNESS и DAY_HOURS_BRIGHTNESS
*/
// Ссылка для менеджера плат:

View File

@@ -109,7 +109,7 @@ void buttonTick()
// шестикратное нажатие
if (clickCount == 6U) // вывод текущего времени бегущей строкой
{
printTime(thisTime, true);
printTime(thisTime, true, ONflag);
}

View File

@@ -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;

View File

@@ -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 && // день будильника