4848// CONSTANTS
4949// ----------------------------------------------------------------------------------
5050
51- #define EEPROM_VERSION_CODE 2 // Change this value when defaults settings change
51+ #define EEPROM_VERSION_CODE 3 // Change this value when defaults settings change
5252
5353// EEPROM address map (all uint8_t, 1 byte each)
54- #define EEPROM_SIZE 13 // size of EEPROM to save persistent variables
54+ #define EEPROM_SIZE 14 // size of EEPROM to save persistent variables
5555#define ADR_EEPROM_VERSION 0 // uint8_t
5656#define ADR_NM_START_H 1 // uint8_t
5757#define ADR_NM_END_H 2 // uint8_t
6565#define ADR_NM_ACTIVATED 10 // uint8_t
6666#define ADR_COLSHIFTSPEED 11 // uint8_t
6767#define ADR_COLSHIFTACTIVE 12 // uint8_t
68+ #define ADR_NM_BRIGHTNESS 13 // uint8_t
6869
6970// DEFAULT SETTINGS (if one changes this, also increment the EEPROM_VERSION_CODE, to ensure that the EEPROM is updated with the new defaults)
7071#define DEFAULT_NM_START_HOUR 22 // default start hour of nightmode (0-23)
7172#define DEFAULT_NM_START_MIN 5 // default start minute of nightmode (0-59)
7273#define DEFAULT_NM_END_HOUR 7 // default end hour of nightmode (0-23)
7374#define DEFAULT_NM_END_MIN 0 // default end minute of nightmode (0-59)
74- #define DEFAULT_BRIGHTNESS 40 // default brightness of LEDs (0 -255)
75+ #define DEFAULT_BRIGHTNESS 40 // default brightness of LEDs (10 -255)
7576#define DEFAULT_MC_RED 200 // default main color red value
7677#define DEFAULT_MC_GREEN 200 // default main color green value
7778#define DEFAULT_MC_BLUE 0 // default main color blue value
7879#define DEFAULT_NM_ACTIVATED 1 // if function nightmode is activated (0 = deactivated, 1 = activated)
80+ #define DEFAULT_NM_BRIGHTNESS 0 // default brightness during night mode (0-255)
7981#define DEFAULT_COLSHIFT_SPEED 1 // needs to be between larger than 0 (1 = slowest, 255 = fastest)
8082#define DEFAULT_COLSHIFT_ACTIVE 0 // if dynamic color shift is active (0 = deactivated, 1 = activated)
8183
@@ -216,6 +218,7 @@ uint8_t nightModeStartHour = DEFAULT_NM_START_HOUR;
216218uint8_t nightModeStartMin = DEFAULT_NM_START_MIN;
217219uint8_t nightModeEndHour = DEFAULT_NM_END_HOUR;
218220uint8_t nightModeEndMin = DEFAULT_NM_END_MIN;
221+ uint8_t nightModeBrightness = DEFAULT_NM_BRIGHTNESS;
219222
220223// Watchdog counter to trigger restart if NTP update was not possible 30 times in a row (5min)
221224int watchdogCounter = 30 ;
@@ -252,6 +255,7 @@ void setup() {
252255 EEPROM.write (ADR_NM_ACTIVATED, DEFAULT_NM_ACTIVATED);
253256 EEPROM.write (ADR_COLSHIFTSPEED, DEFAULT_COLSHIFT_SPEED);
254257 EEPROM.write (ADR_COLSHIFTACTIVE, DEFAULT_COLSHIFT_ACTIVE);
258+ EEPROM.write (ADR_NM_BRIGHTNESS, DEFAULT_NM_BRIGHTNESS);
255259 EEPROM.commit ();
256260 }
257261
@@ -394,6 +398,7 @@ void setup() {
394398 loadNightmodeSettingsFromEEPROM ();
395399 loadBrightnessSettingsFromEEPROM ();
396400 loadColorShiftStateFromEEPROM ();
401+ loadNightmodeBrightnessFromEEPROM ();
397402
398403 if (ESP.getResetReason ().equals (" Power On" ) || ESP.getResetReason ().equals (" External System" )){
399404 // test quickly each LED
@@ -460,15 +465,23 @@ void loop() {
460465 }
461466
462467 // handle state behaviours (trigger loopCycles of different states depending on current state)
463- if (!nightMode && ! ledOff && (millis () - lastStep > behaviorUpdatePeriod) && (millis () - lastLEDdirect > TIMEOUT_LEDDIRECT)){
468+ if (!ledOff && (millis () - lastStep > behaviorUpdatePeriod) && (millis () - lastLEDdirect > TIMEOUT_LEDDIRECT)){
464469 updateStateBehavior (currentState);
465470 lastStep = millis ();
466471 }
467472
468- // Turn off LEDs if ledOff is true or nightmode is active
469- if (( ledOff || nightMode) && !waitForTimeAfterReboot){
473+ // Turn off LEDs if ledOff is true
474+ if (ledOff && !waitForTimeAfterReboot){
470475 ledmatrix.gridFlush ();
471476 }
477+
478+ // Apply night mode brightness
479+ if (nightMode && !ledOff && !waitForTimeAfterReboot){
480+ ledmatrix.setBrightness (nightModeBrightness);
481+ }
482+ else if (!nightMode && !ledOff && !waitForTimeAfterReboot){
483+ ledmatrix.setBrightness (brightness);
484+ }
472485
473486 // periodically write colors to matrix
474487 if (millis () - lastAnimationStep > PERIOD_MATRIXUPDATE && !waitForTimeAfterReboot && (millis () - lastLEDdirect > TIMEOUT_LEDDIRECT)){
@@ -480,7 +493,7 @@ void loop() {
480493 handleButton ();
481494
482495 // handle state changes
483- if (stateAutoChange && (millis () - lastStateChange > PERIOD_STATECHANGE) && !nightMode && ! ledOff){
496+ if (stateAutoChange && (millis () - lastStateChange > PERIOD_STATECHANGE) && !ledOff){
484497 // increment state variable and trigger state change
485498 stateChange ((currentState + 1 ) % NUM_STATES, false );
486499
@@ -931,6 +944,16 @@ void loadColorShiftStateFromEEPROM()
931944 logger.logString (" ColorShiftActive: " + String (dynColorShiftActive));
932945}
933946
947+ /* *
948+ * @brief Load the night mode brightness from EEPROM
949+ *
950+ */
951+ void loadNightmodeBrightnessFromEEPROM ()
952+ {
953+ nightModeBrightness = EEPROM.read (ADR_NM_BRIGHTNESS);
954+ logger.logString (" Night mode brightness: " + String (nightModeBrightness));
955+ }
956+
934957/* *
935958 * @brief Handler for handling commands sent to "/cmd" url
936959 *
@@ -1003,6 +1026,7 @@ void handleCommand() {
10031026 nightModeEndMin = split (timestr, ' -' , 3 ).toInt ();
10041027 brightness = split (timestr, ' -' , 4 ).toInt ();
10051028 dynColorShiftSpeed = split (timestr, ' -' , 5 ).toInt ();
1029+ nightModeBrightness = split (timestr, ' -' , 6 ).toInt ();
10061030 if (nightModeStartHour < 0 || nightModeStartHour > 23 ) nightModeStartHour = 22 ;
10071031 if (nightModeStartMin < 0 || nightModeStartMin > 59 ) nightModeStartMin = 0 ;
10081032 if (nightModeEndHour < 0 || nightModeEndHour > 23 ) nightModeEndHour = 7 ;
@@ -1015,11 +1039,13 @@ void handleCommand() {
10151039 EEPROM.write (ADR_NM_END_M, nightModeEndMin);
10161040 EEPROM.write (ADR_BRIGHTNESS, brightness);
10171041 EEPROM.write (ADR_COLSHIFTSPEED, dynColorShiftSpeed);
1042+ EEPROM.write (ADR_NM_BRIGHTNESS, nightModeBrightness);
10181043 EEPROM.commit ();
10191044 logger.logString (" Nightmode starts at: " + String (nightModeStartHour) + " :" + String (nightModeStartMin));
10201045 logger.logString (" Nightmode ends at: " + String (nightModeEndHour) + " :" + String (nightModeEndMin));
10211046 logger.logString (" Brightness: " + String (brightness));
10221047 logger.logString (" ColorShiftSpeed: " + String (dynColorShiftSpeed));
1048+ logger.logString (" Night mode brightness: " + String (nightModeBrightness));
10231049 ledmatrix.setBrightness (brightness);
10241050 lastNightmodeCheck = millis () - PERIOD_NIGHTMODECHECK;
10251051 }
@@ -1173,6 +1199,8 @@ void handleDataRequest() {
11731199 message += " ," ;
11741200 message += " \" brightness\" :\" " + String (brightness) + " \" " ;
11751201 message += " ," ;
1202+ message += " \" nightModeBrightness\" :\" " + String (nightModeBrightness) + " \" " ;
1203+ message += " ," ;
11761204 message += " \" colorshift\" :\" " + String (dynColorShiftActive) + " \" " ;
11771205 message += " ," ;
11781206 message += " \" colorshiftspeed\" :\" " + String (dynColorShiftSpeed) + " \" " ;
0 commit comments