@@ -71,7 +71,7 @@ CRGB leds[NUM_LEDS];
71
71
72
72
const uint8_t brightnessCount = 5 ;
73
73
uint8_t brightnessMap[brightnessCount] = { 16 , 32 , 64 , 128 , 255 };
74
- uint8_t brightnessIndex = 0 ;
74
+ uint8_t brightnessIndex = 3 ;
75
75
76
76
// ten seconds per color palette makes a good demo
77
77
// 20-120 is better for deployment
@@ -231,7 +231,7 @@ void setup() {
231
231
FastLED.show ();
232
232
233
233
EEPROM.begin (512 );
234
- loadSettings ();
234
+ readSettings ();
235
235
236
236
FastLED.setBrightness (brightness);
237
237
@@ -246,6 +246,7 @@ void setup() {
246
246
Serial.print ( F (" Flash ID: " ) ); Serial.println (spi_flash_get_id ());
247
247
Serial.print ( F (" Flash Size: " ) ); Serial.println (ESP.getFlashChipRealSize ());
248
248
Serial.print ( F (" Vcc: " ) ); Serial.println (ESP.getVcc ());
249
+ Serial.print ( F (" MAC Address: " ) ); Serial.println (WiFi.macAddress ());
249
250
Serial.println ();
250
251
251
252
SPIFFS.begin ();
@@ -263,13 +264,20 @@ void setup() {
263
264
264
265
// Do a little work to get a unique-ish name. Get the
265
266
// last two bytes of the MAC (HEX'd)":
267
+
268
+ // copy the mac address to a byte array
266
269
uint8_t mac[WL_MAC_ADDR_LENGTH];
267
270
WiFi.softAPmacAddress (mac);
268
- String macID = String (mac[WL_MAC_ADDR_LENGTH - 2 ], HEX) +
269
- String (mac[WL_MAC_ADDR_LENGTH - 1 ], HEX);
270
- macID.toUpperCase ();
271
271
272
- nameString = " ESP8266-" + macID;
272
+ // format the last two digits to hex character array, like 0A0B
273
+ char macID[5 ];
274
+ sprintf (macID, " %02X%02X" , mac[WL_MAC_ADDR_LENGTH - 2 ], mac[WL_MAC_ADDR_LENGTH - 1 ]);
275
+
276
+ // convert the character array to a string
277
+ String macIdString = macID;
278
+ macIdString.toUpperCase ();
279
+
280
+ nameString = " ESP8266-" + macIdString;
273
281
274
282
char nameChar[nameString.length () + 1 ];
275
283
memset (nameChar, 0 , nameString.length () + 1 );
@@ -326,8 +334,7 @@ void setup() {
326
334
webServer.on (" /cooling" , HTTP_POST, []() {
327
335
String value = webServer.arg (" value" );
328
336
cooling = value.toInt ();
329
- EEPROM.write (11 , cooling);
330
- EEPROM.commit ();
337
+ writeAndCommitSettings ();
331
338
broadcastInt (" cooling" , cooling);
332
339
webServer.sendHeader (" Access-Control-Allow-Origin" , " *" );
333
340
sendInt (cooling);
@@ -336,8 +343,7 @@ void setup() {
336
343
webServer.on (" /sparking" , HTTP_POST, []() {
337
344
String value = webServer.arg (" value" );
338
345
sparking = value.toInt ();
339
- EEPROM.write (12 , sparking);
340
- EEPROM.commit ();
346
+ writeAndCommitSettings ();
341
347
broadcastInt (" sparking" , sparking);
342
348
webServer.sendHeader (" Access-Control-Allow-Origin" , " *" );
343
349
sendInt (sparking);
@@ -356,8 +362,7 @@ void setup() {
356
362
twinkleSpeed = value.toInt ();
357
363
if (twinkleSpeed < 0 ) twinkleSpeed = 0 ;
358
364
else if (twinkleSpeed > 8 ) twinkleSpeed = 8 ;
359
- EEPROM.write (9 , twinkleSpeed);
360
- EEPROM.commit ();
365
+ writeAndCommitSettings ();
361
366
broadcastInt (" twinkleSpeed" , twinkleSpeed);
362
367
webServer.sendHeader (" Access-Control-Allow-Origin" , " *" );
363
368
sendInt (twinkleSpeed);
@@ -368,8 +373,7 @@ void setup() {
368
373
twinkleDensity = value.toInt ();
369
374
if (twinkleDensity < 0 ) twinkleDensity = 0 ;
370
375
else if (twinkleDensity > 8 ) twinkleDensity = 8 ;
371
- EEPROM.write (10 , twinkleDensity);
372
- EEPROM.commit ();
376
+ writeAndCommitSettings ();
373
377
broadcastInt (" twinkleDensity" , twinkleDensity);
374
378
webServer.sendHeader (" Access-Control-Allow-Origin" , " *" );
375
379
sendInt (twinkleDensity);
@@ -380,8 +384,7 @@ void setup() {
380
384
coolLikeIncandescent = value.toInt ();
381
385
if (coolLikeIncandescent < 0 ) coolLikeIncandescent = 0 ;
382
386
else if (coolLikeIncandescent > 1 ) coolLikeIncandescent = 1 ;
383
- EEPROM.write (13 , coolLikeIncandescent);
384
- EEPROM.commit ();
387
+ writeAndCommitSettings ();
385
388
broadcastInt (" coolLikeIncandescent" , coolLikeIncandescent);
386
389
sendInt (coolLikeIncandescent);
387
390
});
@@ -815,8 +818,15 @@ void loop() {
815
818
// }
816
819
// }
817
820
818
- void loadSettings ()
821
+ void readSettings ()
819
822
{
823
+ // check for "magic number" so we know settings have been written to EEPROM
824
+ // and it's not just full of random bytes
825
+
826
+ if (EEPROM.read (511 ) != 55 ) {
827
+ return ;
828
+ }
829
+
820
830
brightness = EEPROM.read (0 );
821
831
822
832
currentPatternIndex = EEPROM.read (1 );
@@ -857,33 +867,44 @@ void loadSettings()
857
867
coolLikeIncandescent = EEPROM.read (13 );
858
868
}
859
869
860
- void setPower ( uint8_t value )
870
+ void writeAndCommitSettings ( )
861
871
{
862
- power = value == 0 ? 0 : 1 ;
863
-
872
+ EEPROM.write (0 , brightness);
873
+ EEPROM.write (1 , currentPatternIndex);
874
+ EEPROM.write (2 , solidColor.r );
875
+ EEPROM.write (3 , solidColor.g );
876
+ EEPROM.write (4 , solidColor.b );
864
877
EEPROM.write (5 , power);
878
+ EEPROM.write (6 , autoplay);
879
+ EEPROM.write (7 , autoplayDuration);
880
+ EEPROM.write (8 , currentPaletteIndex);
881
+ EEPROM.write (9 , twinkleSpeed);
882
+ EEPROM.write (10 , twinkleDensity);
883
+ EEPROM.write (11 , cooling);
884
+ EEPROM.write (12 , sparking);
885
+
886
+ EEPROM.write (511 , 55 );
865
887
EEPROM.commit ();
888
+ }
866
889
890
+ void setPower (uint8_t value)
891
+ {
892
+ power = value == 0 ? 0 : 1 ;
893
+ writeAndCommitSettings ();
867
894
broadcastInt (" power" , power);
868
895
}
869
896
870
897
void setAutoplay (uint8_t value)
871
898
{
872
899
autoplay = value == 0 ? 0 : 1 ;
873
-
874
- EEPROM.write (6 , autoplay);
875
- EEPROM.commit ();
876
-
900
+ writeAndCommitSettings ();
877
901
broadcastInt (" autoplay" , autoplay);
878
902
}
879
903
880
904
void setAutoplayDuration (uint8_t value)
881
905
{
882
906
autoplayDuration = value;
883
-
884
- EEPROM.write (7 , autoplayDuration);
885
- EEPROM.commit ();
886
-
907
+ writeAndCommitSettings ();
887
908
autoPlayTimeout = millis () + (autoplayDuration * 1000 );
888
909
889
910
broadcastInt (" autoplayDuration" , autoplayDuration);
@@ -897,12 +918,7 @@ void setSolidColor(CRGB color)
897
918
void setSolidColor (uint8_t r, uint8_t g, uint8_t b)
898
919
{
899
920
solidColor = CRGB (r, g, b);
900
-
901
- EEPROM.write (2 , r);
902
- EEPROM.write (3 , g);
903
- EEPROM.write (4 , b);
904
- EEPROM.commit ();
905
-
921
+ writeAndCommitSettings ();
906
922
setPattern (patternCount - 1 );
907
923
908
924
broadcastString (" color" , String (solidColor.r ) + " ," + String (solidColor.g ) + " ," + String (solidColor.b ));
@@ -923,8 +939,7 @@ void adjustPattern(bool up)
923
939
currentPatternIndex = 0 ;
924
940
925
941
if (autoplay == 0 ) {
926
- EEPROM.write (1 , currentPatternIndex);
927
- EEPROM.commit ();
942
+ writeAndCommitSettings ();
928
943
}
929
944
930
945
broadcastInt (" pattern" , currentPatternIndex);
@@ -938,8 +953,7 @@ void setPattern(uint8_t value)
938
953
currentPatternIndex = value;
939
954
940
955
if (autoplay == 0 ) {
941
- EEPROM.write (1 , currentPatternIndex);
942
- EEPROM.commit ();
956
+ writeAndCommitSettings ();
943
957
}
944
958
945
959
broadcastInt (" pattern" , currentPatternIndex);
@@ -961,10 +975,7 @@ void setPalette(uint8_t value)
961
975
value = paletteCount - 1 ;
962
976
963
977
currentPaletteIndex = value;
964
-
965
- EEPROM.write (8 , currentPaletteIndex);
966
- EEPROM.commit ();
967
-
978
+ writeAndCommitSettings ();
968
979
broadcastInt (" palette" , currentPaletteIndex);
969
980
}
970
981
@@ -988,10 +999,7 @@ void adjustBrightness(bool up)
988
999
brightness = brightnessMap[brightnessIndex];
989
1000
990
1001
FastLED.setBrightness (brightness);
991
-
992
- EEPROM.write (0 , brightness);
993
- EEPROM.commit ();
994
-
1002
+ writeAndCommitSettings ();
995
1003
broadcastInt (" brightness" , brightness);
996
1004
}
997
1005
@@ -1004,10 +1012,7 @@ void setBrightness(uint8_t value)
1004
1012
brightness = value;
1005
1013
1006
1014
FastLED.setBrightness (brightness);
1007
-
1008
- EEPROM.write (0 , brightness);
1009
- EEPROM.commit ();
1010
-
1015
+ writeAndCommitSettings ();
1011
1016
broadcastInt (" brightness" , brightness);
1012
1017
}
1013
1018
0 commit comments