Skip to content

Commit 607efe9

Browse files
Merge branch 'frame_light' into hour_animation_frame_light
2 parents 6473a83 + be5b1a3 commit 607efe9

File tree

3 files changed

+97
-23
lines changed

3 files changed

+97
-23
lines changed

data/index.html

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@
243243
}
244244

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

@@ -295,11 +295,21 @@ <h1 id="headline">WORDCLOCK 2.0</h1>
295295
</div>
296296
</div>
297297
<div class="checkbox-container">
298-
<label for="ResetWifi" style="align-self: flex-start">Reset Wifi</label>
298+
<label for="ResetWifi" style="align-self: flex-start">Reset Wifi settings</label>
299299
<div>
300300
<input name= "ResetWifi" id="ResetWifi" type="checkbox" class="toggle">
301301
</div>
302302
</div>
303+
<div class="number-container">
304+
<label for="brightnessFrame">Brightness Frame:</label>
305+
<input type="range" id="brightnessFrame" name="volume" min="10" max="255">
306+
</div>
307+
<div class="checkbox-container">
308+
<label for="frameLight" style="align-self: flex-start">Frame On/Off</label>
309+
<div>
310+
<input name= "frameLight" id="frameLight" type="checkbox" class="toggle">
311+
</div>
312+
</div>
303313
<div class="buttonClass save-button" onclick="saveSettings()">SAVE</div>
304314
</div>
305315

@@ -555,10 +565,28 @@ <h1 id="headline">WORDCLOCK 2.0</h1>
555565
sendCommand("./cmd?houranimation=0");
556566
}
557567
});
568+
569+
var ckb_frameLight = document.querySelector('input[id="frameLight"]');
570+
if(myVar.frameLight == "1") {
571+
console.log("frameLight == 1");
572+
ckb_frameLight.checked = true;
573+
}
574+
else {
575+
console.log("frameLight == 0");
576+
ckb_frameLight.checked = false;
577+
}
578+
ckb_frameLight.addEventListener('change', () => {
579+
if(ckb_frameLight.checked) {
580+
sendCommand("./cmd?frameLight=1");
581+
} else {
582+
sendCommand("./cmd?frameLight=0");
583+
}
584+
});
558585

559586
document.getElementById("nm_start").value = myVar.nightModeStart.replace("-", ":");
560587
document.getElementById("nm_end").value = myVar.nightModeEnd.replace("-", ":");
561588
document.getElementById("brightness").value = parseInt(myVar.brightness);
589+
document.getElementById("brightnessFrame").value = parseInt(myVar.brightnessFrame);
562590
document.getElementById("colorshiftspeed").value = parseInt(myVar.colorshiftspeed);
563591

564592
updateDisplay(parseInt(myVar.modeid));
@@ -635,6 +663,7 @@ <h1 id="headline">WORDCLOCK 2.0</h1>
635663
var nmStart = document.getElementById("nm_start");
636664
var nmEnd = document.getElementById("nm_end");
637665
var sld_brightness = document.getElementById("brightness");
666+
var sld_brightnessFrame = document.getElementById("brightnessFrame");
638667
var sld_colorshiftspeed = document.getElementById("colorshiftspeed");
639668
var ckb_resetWifi = document.querySelector('input[id="ResetWifi"]');
640669
var cmdstr = "./cmd?setting=";
@@ -645,6 +674,8 @@ <h1 id="headline">WORDCLOCK 2.0</h1>
645674
cmdstr += sld_brightness.value;
646675
cmdstr += "-";
647676
cmdstr += sld_colorshiftspeed.value;
677+
cmdstr += "-";
678+
cmdstr += sld_brightnessFrame.value;
648679
console.log(cmdstr);
649680
sendCommand(cmdstr);
650681
if(ckb_resetWifi.checked) {

wordclock_esp8266.ino

Lines changed: 62 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,15 @@
5050

5151
#define EEPROM_SIZE 32 // size of EEPROM to save persistent variables
5252
#define ADR_NM_START_H 0
53-
#define ADR_NM_END_H 4
54-
#define ADR_NM_START_M 8
55-
#define ADR_NM_END_M 12
56-
#define ADR_BRIGHTNESS 16
57-
#define ADR_MC_RED 20
58-
#define ADR_MC_GREEN 22
59-
#define ADR_MC_BLUE 24
53+
#define ADR_NM_END_H 1
54+
#define ADR_NM_START_M 2
55+
#define ADR_NM_END_M 3
56+
#define ADR_BRIGHTNESS 4
57+
#define ADR_MC_RED 5
58+
#define ADR_MC_GREEN 6
59+
#define ADR_MC_BLUE 7
60+
#define ADR_BRIGHTNESS_FRAME 10
61+
#define ADR_FRAMELIGHTACTIVE 11
6062
#define ADR_STATE 26
6163
#define ADR_NM_ACTIVATED 27
6264
#define ADR_COLSHIFTSPEED 28
@@ -65,6 +67,7 @@
6567

6668

6769
#define NEOPIXELPIN 5 // pin to which the NeoPixels are attached
70+
#define NEOPIXELPIN_FRAME 4 // pin to which the NeoPixels for the frame light are attached
6871
#define BUTTONPIN 14 // pin to which the button is attached
6972
#define LEFT 1
7073
#define RIGHT 2
@@ -101,6 +104,8 @@ enum direction {right, left, up, down};
101104
// height of the led matrix
102105
#define HEIGHT 11
103106

107+
#define NUM_LEDS_FRAME_LIGHT 56
108+
104109
// own datatype for state machine states
105110
#define NUM_STATES 6
106111
enum ClockState {st_clock, st_diclock, st_spiral, st_tetris, st_snake, st_pingpong};
@@ -149,6 +154,7 @@ Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(WIDTH, HEIGHT+1, NEOPIXELPIN,
149154
NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
150155
NEO_GRB + NEO_KHZ800);
151156

157+
Adafruit_NeoPixel backgroundLEDStrip = Adafruit_NeoPixel(NUM_LEDS_FRAME_LIGHT, NEOPIXELPIN_FRAME, NEO_GRB + NEO_KHZ800);
152158

153159
// seven predefined colors24bit (green, red, yellow, purple, orange, lightgreen, blue)
154160
const uint32_t colors24bit[NUM_COLORS] = {
@@ -161,6 +167,7 @@ const uint32_t colors24bit[NUM_COLORS] = {
161167
LEDMatrix::Color24bit(0, 0, 255) };
162168

163169
uint8_t brightness = 40; // current brightness of leds
170+
uint8_t brightnessFrame = 40; // brightness of leds for frame light
164171
bool animationDir = false;
165172

166173
// timestamp variables
@@ -198,6 +205,7 @@ uint8_t dynColorShiftPhase = 0; // stores the phase of the dynamic
198205
uint8_t dynColorShiftSpeed = 1; // stores the speed of the dynamic color shift -> used to calc update period
199206
bool hourAnimation = false; // stores if the hour animation is active
200207
uint32_t hourAnimationDuration = 18000; // stores the duration of the hour animation in seconds
208+
bool frameLightActive = false; // stores if frame light is active
201209

202210
// nightmode settings
203211
uint8_t nightModeStartHour = 22;
@@ -228,6 +236,9 @@ void setup() {
228236
// configure button pin as input
229237
pinMode(BUTTONPIN, INPUT_PULLUP);
230238

239+
// init background LED strip
240+
backgroundLEDStrip.begin();
241+
231242
// setup Matrix LED functions
232243
ledmatrix.setupMatrix();
233244
ledmatrix.setCurrentLimit(CURRENT_LIMIT_LED);
@@ -463,6 +474,8 @@ void loop() {
463474
// periodically write colors to matrix
464475
if(millis() - lastAnimationStep > PERIOD_MATRIXUPDATE && !waitForTimeAfterReboot && (millis() - lastLEDdirect > TIMEOUT_LEDDIRECT)){
465476
ledmatrix.drawOnMatrixSmooth(filterFactor);
477+
if (frameLightActive && !nightMode) turnOnFrameLight(maincolor_clock);
478+
else turnOffFrameLight();
466479
lastAnimationStep = millis();
467480
}
468481

@@ -874,6 +887,8 @@ void loadCurrentStateFromEEPROM(){
874887
EEPROM.write(ADR_STATE, currentState);
875888
EEPROM.commit();
876889
}
890+
891+
frameLightActive = EEPROM.read(ADR_FRAMELIGHTACTIVE);
877892
}
878893

879894
/**
@@ -903,9 +918,13 @@ void loadNightmodeSettingsFromEEPROM()
903918
void loadBrightnessSettingsFromEEPROM()
904919
{
905920
brightness = EEPROM.read(ADR_BRIGHTNESS);
921+
brightnessFrame = EEPROM.read(ADR_BRIGHTNESS_FRAME);
906922
if(brightness < 10) brightness = 10;
923+
if(brightnessFrame < 10) brightnessFrame = 10;
907924
logger.logString("Brightness: " + String(brightness));
925+
logger.logString("Brightness Frame: " + String(brightnessFrame));
908926
ledmatrix.setBrightness(brightness);
927+
backgroundLEDStrip.setBrightness(brightnessFrame);
909928
}
910929

911930
/**
@@ -1004,24 +1023,29 @@ void handleCommand() {
10041023
nightModeEndMin = split(timestr, '-', 3).toInt();
10051024
brightness = split(timestr, '-', 4).toInt();
10061025
dynColorShiftSpeed = split(timestr, '-', 5).toInt();
1026+
brightnessFrame = split(timestr, '-', 6).toInt();
10071027
if(nightModeStartHour < 0 || nightModeStartHour > 23) nightModeStartHour = 22;
10081028
if(nightModeStartMin < 0 || nightModeStartMin > 59) nightModeStartMin = 0;
10091029
if(nightModeEndHour < 0 || nightModeEndHour > 23) nightModeEndHour = 7;
10101030
if(nightModeEndMin < 0 || nightModeEndMin > 59) nightModeEndMin = 0;
10111031
if(brightness < 10) brightness = 10;
1032+
if(brightnessFrame < 10) brightnessFrame = 10;
10121033
if(dynColorShiftSpeed == 0) dynColorShiftSpeed = 1;
10131034
EEPROM.write(ADR_NM_START_H, nightModeStartHour);
10141035
EEPROM.write(ADR_NM_START_M, nightModeStartMin);
10151036
EEPROM.write(ADR_NM_END_H, nightModeEndHour);
10161037
EEPROM.write(ADR_NM_END_M, nightModeEndMin);
10171038
EEPROM.write(ADR_BRIGHTNESS, brightness);
1039+
EEPROM.write(ADR_BRIGHTNESS_FRAME, brightnessFrame);
10181040
EEPROM.write(ADR_COLSHIFTSPEED, dynColorShiftSpeed);
10191041
EEPROM.commit();
10201042
logger.logString("Nightmode starts at: " + String(nightModeStartHour) + ":" + String(nightModeStartMin));
10211043
logger.logString("Nightmode ends at: " + String(nightModeEndHour) + ":" + String(nightModeEndMin));
10221044
logger.logString("Brightness: " + String(brightness));
1045+
logger.logString("Brightness Frame: " + String(brightnessFrame));
10231046
logger.logString("ColorShiftSpeed: " + String(dynColorShiftSpeed));
10241047
ledmatrix.setBrightness(brightness);
1048+
backgroundLEDStrip.setBrightness(brightnessFrame);
10251049
lastNightmodeCheck = millis() - PERIOD_NIGHTMODECHECK;
10261050
}
10271051
else if (server.argName(0) == "resetwifi"){
@@ -1123,6 +1147,14 @@ void handleCommand() {
11231147
EEPROM.write(ADR_HOURANIMATION, hourAnimation);
11241148
EEPROM.commit();
11251149
}
1150+
else if(server.argName(0) == "frameLight"){
1151+
Serial.println("FrameLight change via Webserver");
1152+
String str = server.arg(0);
1153+
if(str == "1") frameLightActive = true;
1154+
else frameLightActive = false;
1155+
EEPROM.write(ADR_FRAMELIGHTACTIVE, frameLightActive);
1156+
EEPROM.commit();
1157+
}
11261158
server.send(204, "text/plain", "No Content"); // this page doesn't send back content --> 204
11271159
}
11281160

@@ -1182,11 +1214,15 @@ void handleDataRequest() {
11821214
message += ",";
11831215
message += "\"brightness\":\"" + String(brightness) + "\"";
11841216
message += ",";
1217+
message += "\"brightnessFrame\":\"" + String(brightnessFrame) + "\"";
1218+
message += ",";
11851219
message += "\"colorshift\":\"" + String(dynColorShiftActive) + "\"";
11861220
message += ",";
11871221
message += "\"colorshiftspeed\":\"" + String(dynColorShiftSpeed) + "\"";
11881222
message += ",";
11891223
message += "\"houranimation\":\"" + String(hourAnimation) + "\"";
1224+
message += ",";
1225+
message += "\"frameLight\":\"" + String(frameLightActive) + "\"";
11901226
}
11911227
message += "}";
11921228
server.send(200, "application/json", message);
@@ -1207,3 +1243,22 @@ String leadingZero2Digit(int value){
12071243
msg += String(value);
12081244
return msg;
12091245
}
1246+
1247+
/**
1248+
* @brief Turn on the frame light with given color
1249+
*
1250+
* @param color
1251+
*/
1252+
void turnOnFrameLight(uint32_t color){
1253+
backgroundLEDStrip.fill(color);
1254+
backgroundLEDStrip.show();
1255+
}
1256+
1257+
/**
1258+
* @brief Turn off the frame light
1259+
*
1260+
*/
1261+
void turnOffFrameLight(){
1262+
backgroundLEDStrip.clear();
1263+
backgroundLEDStrip.show();
1264+
}

wordclockfunctions.ino_swiss

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ const String clockStringSwiss = "ESPESCHAFUFVIERTUBFZAAZWANZGSIVORABOHWORTUHRHA
99
*/
1010
void drawMinuteIndicator(uint8_t minutes, uint32_t color){
1111
//separate LEDs for minutes in an additional row
12-
{
1312
switch (minutes%5)
1413
{
1514
case 0:
@@ -31,7 +30,6 @@ void drawMinuteIndicator(uint8_t minutes, uint32_t color){
3130
ledmatrix.setMinIndicator(0b1111, color);
3231
break;
3332
}
34-
}
3533
}
3634

3735
/**
@@ -93,20 +91,10 @@ int showStringOnClock(String message, uint32_t color){
9391
* @param minutes minutes of the time value
9492
* @return String time as sentence
9593
*/
96-
String timeToString(uint8_t hours, uint8_t minutes, bool puristModeActive){
94+
String timeToString(uint8_t hours, uint8_t minutes){
9795

9896
//ES IST
99-
String message = "";
100-
101-
if(puristModeActive){
102-
message = "";
103-
if(minutes < 5 || (minutes >=30 && minutes < 35)){
104-
message = "ES ESCH ";
105-
}
106-
}
107-
else{
108-
message = "ES ESCH ";
109-
}
97+
String message = "ES ESCH ";
11098

11199
//show minutes
112100
if(minutes >= 5 && minutes < 10)

0 commit comments

Comments
 (0)