From d407c1d0f558ac9b92fa9db873a5bed8796e97f3 Mon Sep 17 00:00:00 2001 From: Edgar W Date: Sat, 3 Jan 2026 14:41:05 +0100 Subject: [PATCH] feat: add night mode brightness setting --- data/index.html | 10 +++++++++- wordclock_esp8266.ino | 42 +++++++++++++++++++++++++++++++++++------- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/data/index.html b/data/index.html index 4bce60d..15700fd 100644 --- a/data/index.html +++ b/data/index.html @@ -243,7 +243,7 @@ } .show{ - height: 280px; + height: 320px; transition: height 1s; } @@ -280,6 +280,10 @@

WORDCLOCK 2.0

+
+ + +
@@ -536,6 +540,7 @@

WORDCLOCK 2.0

document.getElementById("nm_start").value = myVar.nightModeStart.replace("-", ":"); document.getElementById("nm_end").value = myVar.nightModeEnd.replace("-", ":"); document.getElementById("brightness").value = parseInt(myVar.brightness); + document.getElementById("nm_brightness").value = parseInt(myVar.nightModeBrightness); document.getElementById("colorshiftspeed").value = parseInt(myVar.colorshiftspeed); updateDisplay(parseInt(myVar.modeid)); @@ -606,6 +611,7 @@

WORDCLOCK 2.0

var nmStart = document.getElementById("nm_start"); var nmEnd = document.getElementById("nm_end"); var sld_brightness = document.getElementById("brightness"); + var sld_nm_brightness = document.getElementById("nm_brightness"); var sld_colorshiftspeed = document.getElementById("colorshiftspeed"); var ckb_resetWifi = document.querySelector('input[id="ResetWifi"]'); var cmdstr = "./cmd?setting="; @@ -616,6 +622,8 @@

WORDCLOCK 2.0

cmdstr += sld_brightness.value; cmdstr += "-"; cmdstr += sld_colorshiftspeed.value; + cmdstr += "-"; + cmdstr += sld_nm_brightness.value; console.log(cmdstr); sendCommand(cmdstr); if(ckb_resetWifi.checked) { diff --git a/wordclock_esp8266.ino b/wordclock_esp8266.ino index 9435069..2dc2dbb 100644 --- a/wordclock_esp8266.ino +++ b/wordclock_esp8266.ino @@ -48,10 +48,10 @@ // CONSTANTS // ---------------------------------------------------------------------------------- -#define EEPROM_VERSION_CODE 2 // Change this value when defaults settings change +#define EEPROM_VERSION_CODE 3 // Change this value when defaults settings change // EEPROM address map (all uint8_t, 1 byte each) -#define EEPROM_SIZE 13 // size of EEPROM to save persistent variables +#define EEPROM_SIZE 14 // size of EEPROM to save persistent variables #define ADR_EEPROM_VERSION 0 // uint8_t #define ADR_NM_START_H 1 // uint8_t #define ADR_NM_END_H 2 // uint8_t @@ -65,17 +65,19 @@ #define ADR_NM_ACTIVATED 10 // uint8_t #define ADR_COLSHIFTSPEED 11 // uint8_t #define ADR_COLSHIFTACTIVE 12 // uint8_t +#define ADR_NM_BRIGHTNESS 13 // uint8_t // DEFAULT SETTINGS (if one changes this, also increment the EEPROM_VERSION_CODE, to ensure that the EEPROM is updated with the new defaults) #define DEFAULT_NM_START_HOUR 22 // default start hour of nightmode (0-23) #define DEFAULT_NM_START_MIN 5 // default start minute of nightmode (0-59) #define DEFAULT_NM_END_HOUR 7 // default end hour of nightmode (0-23) #define DEFAULT_NM_END_MIN 0 // default end minute of nightmode (0-59) -#define DEFAULT_BRIGHTNESS 40 // default brightness of LEDs (0-255) +#define DEFAULT_BRIGHTNESS 40 // default brightness of LEDs (10-255) #define DEFAULT_MC_RED 200 // default main color red value #define DEFAULT_MC_GREEN 200 // default main color green value #define DEFAULT_MC_BLUE 0 // default main color blue value #define DEFAULT_NM_ACTIVATED 1 // if function nightmode is activated (0 = deactivated, 1 = activated) +#define DEFAULT_NM_BRIGHTNESS 0 // default brightness during night mode (0-255) #define DEFAULT_COLSHIFT_SPEED 1 // needs to be between larger than 0 (1 = slowest, 255 = fastest) #define DEFAULT_COLSHIFT_ACTIVE 0 // if dynamic color shift is active (0 = deactivated, 1 = activated) @@ -216,6 +218,7 @@ uint8_t nightModeStartHour = DEFAULT_NM_START_HOUR; uint8_t nightModeStartMin = DEFAULT_NM_START_MIN; uint8_t nightModeEndHour = DEFAULT_NM_END_HOUR; uint8_t nightModeEndMin = DEFAULT_NM_END_MIN; +uint8_t nightModeBrightness = DEFAULT_NM_BRIGHTNESS; // Watchdog counter to trigger restart if NTP update was not possible 30 times in a row (5min) int watchdogCounter = 30; @@ -252,6 +255,7 @@ void setup() { EEPROM.write(ADR_NM_ACTIVATED, DEFAULT_NM_ACTIVATED); EEPROM.write(ADR_COLSHIFTSPEED, DEFAULT_COLSHIFT_SPEED); EEPROM.write(ADR_COLSHIFTACTIVE, DEFAULT_COLSHIFT_ACTIVE); + EEPROM.write(ADR_NM_BRIGHTNESS, DEFAULT_NM_BRIGHTNESS); EEPROM.commit(); } @@ -394,6 +398,7 @@ void setup() { loadNightmodeSettingsFromEEPROM(); loadBrightnessSettingsFromEEPROM(); loadColorShiftStateFromEEPROM(); + loadNightmodeBrightnessFromEEPROM(); if(ESP.getResetReason().equals("Power On") || ESP.getResetReason().equals("External System")){ // test quickly each LED @@ -460,15 +465,23 @@ void loop() { } // handle state behaviours (trigger loopCycles of different states depending on current state) - if(!nightMode && !ledOff && (millis() - lastStep > behaviorUpdatePeriod) && (millis() - lastLEDdirect > TIMEOUT_LEDDIRECT)){ + if(!ledOff && (millis() - lastStep > behaviorUpdatePeriod) && (millis() - lastLEDdirect > TIMEOUT_LEDDIRECT)){ updateStateBehavior(currentState); lastStep = millis(); } - // Turn off LEDs if ledOff is true or nightmode is active - if((ledOff || nightMode) && !waitForTimeAfterReboot){ + // Turn off LEDs if ledOff is true + if(ledOff && !waitForTimeAfterReboot){ ledmatrix.gridFlush(); } + + // Apply night mode brightness + if(nightMode && !ledOff && !waitForTimeAfterReboot){ + ledmatrix.setBrightness(nightModeBrightness); + } + else if(!nightMode && !ledOff && !waitForTimeAfterReboot){ + ledmatrix.setBrightness(brightness); + } // periodically write colors to matrix if(millis() - lastAnimationStep > PERIOD_MATRIXUPDATE && !waitForTimeAfterReboot && (millis() - lastLEDdirect > TIMEOUT_LEDDIRECT)){ @@ -480,7 +493,7 @@ void loop() { handleButton(); // handle state changes - if(stateAutoChange && (millis() - lastStateChange > PERIOD_STATECHANGE) && !nightMode && !ledOff){ + if(stateAutoChange && (millis() - lastStateChange > PERIOD_STATECHANGE) && !ledOff){ // increment state variable and trigger state change stateChange((currentState + 1) % NUM_STATES, false); @@ -931,6 +944,16 @@ void loadColorShiftStateFromEEPROM() logger.logString("ColorShiftActive: " + String(dynColorShiftActive)); } +/** + * @brief Load the night mode brightness from EEPROM + * + */ +void loadNightmodeBrightnessFromEEPROM() +{ + nightModeBrightness = EEPROM.read(ADR_NM_BRIGHTNESS); + logger.logString("Night mode brightness: " + String(nightModeBrightness)); +} + /** * @brief Handler for handling commands sent to "/cmd" url * @@ -1003,6 +1026,7 @@ void handleCommand() { nightModeEndMin = split(timestr, '-', 3).toInt(); brightness = split(timestr, '-', 4).toInt(); dynColorShiftSpeed = split(timestr, '-', 5).toInt(); + nightModeBrightness = split(timestr, '-', 6).toInt(); if(nightModeStartHour < 0 || nightModeStartHour > 23) nightModeStartHour = 22; if(nightModeStartMin < 0 || nightModeStartMin > 59) nightModeStartMin = 0; if(nightModeEndHour < 0 || nightModeEndHour > 23) nightModeEndHour = 7; @@ -1015,11 +1039,13 @@ void handleCommand() { EEPROM.write(ADR_NM_END_M, nightModeEndMin); EEPROM.write(ADR_BRIGHTNESS, brightness); EEPROM.write(ADR_COLSHIFTSPEED, dynColorShiftSpeed); + EEPROM.write(ADR_NM_BRIGHTNESS, nightModeBrightness); EEPROM.commit(); logger.logString("Nightmode starts at: " + String(nightModeStartHour) + ":" + String(nightModeStartMin)); logger.logString("Nightmode ends at: " + String(nightModeEndHour) + ":" + String(nightModeEndMin)); logger.logString("Brightness: " + String(brightness)); logger.logString("ColorShiftSpeed: " + String(dynColorShiftSpeed)); + logger.logString("Night mode brightness: " + String(nightModeBrightness)); ledmatrix.setBrightness(brightness); lastNightmodeCheck = millis() - PERIOD_NIGHTMODECHECK; } @@ -1173,6 +1199,8 @@ void handleDataRequest() { message += ","; message += "\"brightness\":\"" + String(brightness) + "\""; message += ","; + message += "\"nightModeBrightness\":\"" + String(nightModeBrightness) + "\""; + message += ","; message += "\"colorshift\":\"" + String(dynColorShiftActive) + "\""; message += ","; message += "\"colorshiftspeed\":\"" + String(dynColorShiftSpeed) + "\"";