Skip to content

Commit d407c1d

Browse files
feat: add night mode brightness setting
1 parent 2c95a5f commit d407c1d

2 files changed

Lines changed: 44 additions & 8 deletions

File tree

data/index.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@
243243
}
244244

245245
.show{
246-
height: 280px;
246+
height: 320px;
247247
transition: height 1s;
248248
}
249249

@@ -280,6 +280,10 @@ <h1 id="headline">WORDCLOCK 2.0</h1>
280280
<label for="colorshiftspeed">Color shift speed:</label>
281281
<input type="range" id="colorshiftspeed" name="volume" min="0" max="50">
282282
</div>
283+
<div class="number-container">
284+
<label for="nm_brightness">Nightmode brightness:</label>
285+
<input type="range" id="nm_brightness" name="volume" min="0" max="100">
286+
</div>
283287
<div class="number-container">
284288
<label for="nm_start" style="align-self: flex-start">Nightmode start time: </label>
285289
<input type="time" id="nm_start" name="nm_start" min="00:00" max="23:59">
@@ -536,6 +540,7 @@ <h1 id="headline">WORDCLOCK 2.0</h1>
536540
document.getElementById("nm_start").value = myVar.nightModeStart.replace("-", ":");
537541
document.getElementById("nm_end").value = myVar.nightModeEnd.replace("-", ":");
538542
document.getElementById("brightness").value = parseInt(myVar.brightness);
543+
document.getElementById("nm_brightness").value = parseInt(myVar.nightModeBrightness);
539544
document.getElementById("colorshiftspeed").value = parseInt(myVar.colorshiftspeed);
540545

541546
updateDisplay(parseInt(myVar.modeid));
@@ -606,6 +611,7 @@ <h1 id="headline">WORDCLOCK 2.0</h1>
606611
var nmStart = document.getElementById("nm_start");
607612
var nmEnd = document.getElementById("nm_end");
608613
var sld_brightness = document.getElementById("brightness");
614+
var sld_nm_brightness = document.getElementById("nm_brightness");
609615
var sld_colorshiftspeed = document.getElementById("colorshiftspeed");
610616
var ckb_resetWifi = document.querySelector('input[id="ResetWifi"]');
611617
var cmdstr = "./cmd?setting=";
@@ -616,6 +622,8 @@ <h1 id="headline">WORDCLOCK 2.0</h1>
616622
cmdstr += sld_brightness.value;
617623
cmdstr += "-";
618624
cmdstr += sld_colorshiftspeed.value;
625+
cmdstr += "-";
626+
cmdstr += sld_nm_brightness.value;
619627
console.log(cmdstr);
620628
sendCommand(cmdstr);
621629
if(ckb_resetWifi.checked) {

wordclock_esp8266.ino

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@
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
@@ -65,17 +65,19 @@
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;
216218
uint8_t nightModeStartMin = DEFAULT_NM_START_MIN;
217219
uint8_t nightModeEndHour = DEFAULT_NM_END_HOUR;
218220
uint8_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)
221224
int 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

Comments
 (0)