@@ -79,7 +79,7 @@ CRGB leds[NUM_LEDS];
79
79
80
80
const uint8_t brightnessCount = 5 ;
81
81
uint8_t brightnessMap[brightnessCount] = { 16 , 32 , 64 , 128 , 255 };
82
- uint8_t brightnessIndex = 0 ;
82
+ uint8_t brightnessIndex = 3 ;
83
83
84
84
// ten seconds per color palette makes a good demo
85
85
// 20-120 is better for deployment
@@ -300,7 +300,7 @@ void setup() {
300
300
FastLED.show ();
301
301
302
302
EEPROM.begin (512 );
303
- loadSettings ();
303
+ readSettings ();
304
304
305
305
FastLED.setBrightness (brightness);
306
306
@@ -315,6 +315,7 @@ void setup() {
315
315
Serial.print ( F (" Flash ID: " ) ); Serial.println (spi_flash_get_id ());
316
316
Serial.print ( F (" Flash Size: " ) ); Serial.println (ESP.getFlashChipRealSize ());
317
317
Serial.print ( F (" Vcc: " ) ); Serial.println (ESP.getVcc ());
318
+ Serial.print ( F (" MAC Address: " ) ); Serial.println (WiFi.macAddress ());
318
319
Serial.println ();
319
320
320
321
SPIFFS.begin ();
@@ -332,13 +333,20 @@ void setup() {
332
333
333
334
// Do a little work to get a unique-ish name. Get the
334
335
// last two bytes of the MAC (HEX'd)":
336
+
337
+ // copy the mac address to a byte array
335
338
uint8_t mac[WL_MAC_ADDR_LENGTH];
336
339
WiFi.softAPmacAddress (mac);
337
- String macID = String (mac[WL_MAC_ADDR_LENGTH - 2 ], HEX) +
338
- String (mac[WL_MAC_ADDR_LENGTH - 1 ], HEX);
339
- macID.toUpperCase ();
340
340
341
- nameString = " Fibonacci512-" + macID;
341
+ // format the last two digits to hex character array, like 0A0B
342
+ char macID[5 ];
343
+ sprintf (macID, " %02X%02X" , mac[WL_MAC_ADDR_LENGTH - 2 ], mac[WL_MAC_ADDR_LENGTH - 1 ]);
344
+
345
+ // convert the character array to a string
346
+ String macIdString = macID;
347
+ macIdString.toUpperCase ();
348
+
349
+ nameString = " Fibonacci512-" + macIdString;
342
350
343
351
char nameChar[nameString.length () + 1 ];
344
352
memset (nameChar, 0 , nameString.length () + 1 );
@@ -395,6 +403,7 @@ void setup() {
395
403
webServer.on (" /cooling" , HTTP_POST, []() {
396
404
String value = webServer.arg (" value" );
397
405
cooling = value.toInt ();
406
+ writeAndCommitSettings ();
398
407
broadcastInt (" cooling" , cooling);
399
408
webServer.sendHeader (" Access-Control-Allow-Origin" , " *" );
400
409
sendInt (cooling);
@@ -403,6 +412,7 @@ void setup() {
403
412
webServer.on (" /sparking" , HTTP_POST, []() {
404
413
String value = webServer.arg (" value" );
405
414
sparking = value.toInt ();
415
+ writeAndCommitSettings ();
406
416
broadcastInt (" sparking" , sparking);
407
417
webServer.sendHeader (" Access-Control-Allow-Origin" , " *" );
408
418
sendInt (sparking);
@@ -421,6 +431,7 @@ void setup() {
421
431
twinkleSpeed = value.toInt ();
422
432
if (twinkleSpeed < 0 ) twinkleSpeed = 0 ;
423
433
else if (twinkleSpeed > 8 ) twinkleSpeed = 8 ;
434
+ writeAndCommitSettings ();
424
435
broadcastInt (" twinkleSpeed" , twinkleSpeed);
425
436
webServer.sendHeader (" Access-Control-Allow-Origin" , " *" );
426
437
sendInt (twinkleSpeed);
@@ -431,11 +442,22 @@ void setup() {
431
442
twinkleDensity = value.toInt ();
432
443
if (twinkleDensity < 0 ) twinkleDensity = 0 ;
433
444
else if (twinkleDensity > 8 ) twinkleDensity = 8 ;
445
+ writeAndCommitSettings ();
434
446
broadcastInt (" twinkleDensity" , twinkleDensity);
435
447
webServer.sendHeader (" Access-Control-Allow-Origin" , " *" );
436
448
sendInt (twinkleDensity);
437
449
});
438
450
451
+ webServer.on (" /coolLikeIncandescent" , HTTP_POST, []() {
452
+ String value = webServer.arg (" value" );
453
+ coolLikeIncandescent = value.toInt ();
454
+ if (coolLikeIncandescent < 0 ) coolLikeIncandescent = 0 ;
455
+ else if (coolLikeIncandescent > 1 ) coolLikeIncandescent = 1 ;
456
+ writeAndCommitSettings ();
457
+ broadcastInt (" coolLikeIncandescent" , coolLikeIncandescent);
458
+ sendInt (coolLikeIncandescent);
459
+ });
460
+
439
461
webServer.on (" /solidColor" , HTTP_POST, []() {
440
462
String r = webServer.arg (" r" );
441
463
String g = webServer.arg (" g" );
@@ -881,8 +903,15 @@ void loop() {
881
903
// }
882
904
// }
883
905
884
- void loadSettings ()
906
+ void readSettings ()
885
907
{
908
+ // check for "magic number" so we know settings have been written to EEPROM
909
+ // and it's not just full of random bytes
910
+
911
+ if (EEPROM.read (511 ) != 55 ) {
912
+ return ;
913
+ }
914
+
886
915
brightness = EEPROM.read (0 );
887
916
888
917
currentPatternIndex = EEPROM.read (1 );
@@ -914,37 +943,56 @@ void loadSettings()
914
943
else if (currentPaletteIndex >= paletteCount)
915
944
currentPaletteIndex = paletteCount - 1 ;
916
945
917
- showClock = EEPROM.read (9 );
918
- clockBackgroundFade = EEPROM.read (10 );
946
+ twinkleSpeed = EEPROM.read (9 );
947
+ twinkleDensity = EEPROM.read (10 );
948
+
949
+ cooling = EEPROM.read (11 );
950
+ sparking = EEPROM.read (12 );
951
+
952
+ coolLikeIncandescent = EEPROM.read (13 );
953
+
954
+ showClock = EEPROM.read (14 );
955
+ clockBackgroundFade = EEPROM.read (15 );
919
956
}
920
957
921
- void setPower ( uint8_t value )
958
+ void writeAndCommitSettings ( )
922
959
{
923
- power = value == 0 ? 0 : 1 ;
924
-
960
+ EEPROM.write (0 , brightness);
961
+ EEPROM.write (1 , currentPatternIndex);
962
+ EEPROM.write (2 , solidColor.r );
963
+ EEPROM.write (3 , solidColor.g );
964
+ EEPROM.write (4 , solidColor.b );
925
965
EEPROM.write (5 , power);
966
+ EEPROM.write (6 , autoplay);
967
+ EEPROM.write (7 , autoplayDuration);
968
+ EEPROM.write (8 , currentPaletteIndex);
969
+ EEPROM.write (9 , twinkleSpeed);
970
+ EEPROM.write (10 , twinkleDensity);
971
+ EEPROM.write (11 , cooling);
972
+ EEPROM.write (12 , sparking);
973
+
974
+ EEPROM.write (511 , 55 );
926
975
EEPROM.commit ();
976
+ }
927
977
978
+ void setPower (uint8_t value)
979
+ {
980
+ power = value == 0 ? 0 : 1 ;
981
+ writeAndCommitSettings ();
928
982
broadcastInt (" power" , power);
929
983
}
930
984
931
985
void setAutoplay (uint8_t value)
932
986
{
933
987
autoplay = value == 0 ? 0 : 1 ;
934
-
935
- EEPROM.write (6 , autoplay);
936
- EEPROM.commit ();
937
-
988
+ writeAndCommitSettings ();
938
989
broadcastInt (" autoplay" , autoplay);
939
990
}
940
991
941
992
void setAutoplayDuration (uint8_t value)
942
993
{
943
994
autoplayDuration = value;
944
-
945
- EEPROM.write (7 , autoplayDuration);
946
- EEPROM.commit ();
947
-
995
+ writeAndCommitSettings ();
948
996
autoPlayTimeout = millis () + (autoplayDuration * 1000 );
949
997
950
998
broadcastInt (" autoplayDuration" , autoplayDuration);
@@ -958,12 +1006,7 @@ void setSolidColor(CRGB color)
958
1006
void setSolidColor (uint8_t r, uint8_t g, uint8_t b)
959
1007
{
960
1008
solidColor = CRGB (r, g, b);
961
-
962
- EEPROM.write (2 , r);
963
- EEPROM.write (3 , g);
964
- EEPROM.write (4 , b);
965
- EEPROM.commit ();
966
-
1009
+ writeAndCommitSettings ();
967
1010
setPattern (patternCount - 1 );
968
1011
969
1012
broadcastString (" color" , String (solidColor.r ) + " ," + String (solidColor.g ) + " ," + String (solidColor.b ));
@@ -984,8 +1027,7 @@ void adjustPattern(bool up)
984
1027
currentPatternIndex = 0 ;
985
1028
986
1029
if (autoplay == 0 ) {
987
- EEPROM.write (1 , currentPatternIndex);
988
- EEPROM.commit ();
1030
+ writeAndCommitSettings ();
989
1031
}
990
1032
991
1033
broadcastInt (" pattern" , currentPatternIndex);
@@ -999,8 +1041,7 @@ void setPattern(uint8_t value)
999
1041
currentPatternIndex = value;
1000
1042
1001
1043
if (autoplay == 0 ) {
1002
- EEPROM.write (1 , currentPatternIndex);
1003
- EEPROM.commit ();
1044
+ writeAndCommitSettings ();
1004
1045
}
1005
1046
1006
1047
broadcastInt (" pattern" , currentPatternIndex);
@@ -1022,10 +1063,7 @@ void setPalette(uint8_t value)
1022
1063
value = paletteCount - 1 ;
1023
1064
1024
1065
currentPaletteIndex = value;
1025
-
1026
- EEPROM.write (8 , currentPaletteIndex);
1027
- EEPROM.commit ();
1028
-
1066
+ writeAndCommitSettings ();
1029
1067
broadcastInt (" palette" , currentPaletteIndex);
1030
1068
}
1031
1069
@@ -1049,10 +1087,7 @@ void adjustBrightness(bool up)
1049
1087
brightness = brightnessMap[brightnessIndex];
1050
1088
1051
1089
FastLED.setBrightness (brightness);
1052
-
1053
- EEPROM.write (0 , brightness);
1054
- EEPROM.commit ();
1055
-
1090
+ writeAndCommitSettings ();
1056
1091
broadcastInt (" brightness" , brightness);
1057
1092
}
1058
1093
@@ -1065,10 +1100,7 @@ void setBrightness(uint8_t value)
1065
1100
brightness = value;
1066
1101
1067
1102
FastLED.setBrightness (brightness);
1068
-
1069
- EEPROM.write (0 , brightness);
1070
- EEPROM.commit ();
1071
-
1103
+ writeAndCommitSettings ();
1072
1104
broadcastInt (" brightness" , brightness);
1073
1105
}
1074
1106
0 commit comments