13
13
GNU General Public License for more details.
14
14
15
15
You should have received a copy of the GNU General Public License
16
- along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
*/
18
18
19
19
// #define FASTLED_ALLOW_INTERRUPTS 1
@@ -80,7 +80,7 @@ CRGB leds[NUM_LEDS];
80
80
81
81
const uint8_t brightnessCount = 5 ;
82
82
uint8_t brightnessMap[brightnessCount] = { 16 , 32 , 64 , 128 , 255 };
83
- uint8_t brightnessIndex = 0 ;
83
+ uint8_t brightnessIndex = 3 ;
84
84
85
85
// ten seconds per color palette makes a good demo
86
86
// 20-120 is better for deployment
@@ -112,7 +112,7 @@ CRGBPalette16 gTargetPalette( gGradientPalettes[0] );
112
112
113
113
CRGBPalette16 IceColors_p = CRGBPalette16(CRGB::Black, CRGB::Blue, CRGB::Aqua, CRGB::White);
114
114
115
- uint8_t currentPatternIndex = 0 ; // Index number of which pattern is current
115
+ uint8_t currentPatternIndex = 3 ; // Index number of which pattern is current
116
116
uint8_t autoplay = 0 ;
117
117
118
118
uint8_t autoplayDuration = 10 ;
@@ -305,7 +305,7 @@ void setup() {
305
305
FastLED.show ();
306
306
307
307
EEPROM.begin (512 );
308
- loadSettings ();
308
+ readSettings ();
309
309
310
310
FastLED.setBrightness (brightness);
311
311
@@ -320,6 +320,7 @@ void setup() {
320
320
Serial.print ( F (" Flash ID: " ) ); Serial.println (spi_flash_get_id ());
321
321
Serial.print ( F (" Flash Size: " ) ); Serial.println (ESP.getFlashChipRealSize ());
322
322
Serial.print ( F (" Vcc: " ) ); Serial.println (ESP.getVcc ());
323
+ Serial.print ( F (" MAC Address: " ) ); Serial.println (WiFi.macAddress ());
323
324
Serial.println ();
324
325
325
326
SPIFFS.begin ();
@@ -337,17 +338,23 @@ void setup() {
337
338
338
339
// Do a little work to get a unique-ish name. Get the
339
340
// last two bytes of the MAC (HEX'd)":
341
+
342
+ // copy the mac address to a byte array
340
343
uint8_t mac[WL_MAC_ADDR_LENGTH];
341
344
WiFi.softAPmacAddress (mac);
342
- String macID = String (mac[WL_MAC_ADDR_LENGTH - 2 ], HEX) +
343
- String (mac[WL_MAC_ADDR_LENGTH - 1 ], HEX);
344
- macID.toUpperCase ();
345
345
346
- nameString = " Fibonacci256-" + macID;
346
+ // format the last two digits to hex character array, like 0A0B
347
+ char macID[5 ];
348
+ sprintf (macID, " %02X%02X" , mac[WL_MAC_ADDR_LENGTH - 2 ], mac[WL_MAC_ADDR_LENGTH - 1 ]);
349
+
350
+ // convert the character arry to a string
351
+ String macIdString = macID;
352
+ macIdString.toUpperCase ();
353
+
354
+ nameString = " Fibonacci256-" + macIdString;
347
355
348
356
char nameChar[nameString.length () + 1 ];
349
357
memset (nameChar, 0 , nameString.length () + 1 );
350
-
351
358
for (int i = 0 ; i < nameString.length (); i++)
352
359
nameChar[i] = nameString.charAt (i);
353
360
@@ -886,8 +893,15 @@ void loop() {
886
893
// }
887
894
// }
888
895
889
- void loadSettings ()
896
+ void readSettings ()
890
897
{
898
+ // check for "magic number" so we know settings have been written to EEPROM
899
+ // and it's not just full of random bytes
900
+
901
+ if (EEPROM.read (511 ) != 55 ) {
902
+ return ;
903
+ }
904
+
891
905
brightness = EEPROM.read (0 );
892
906
893
907
currentPatternIndex = EEPROM.read (1 );
@@ -923,33 +937,42 @@ void loadSettings()
923
937
clockBackgroundFade = EEPROM.read (10 );
924
938
}
925
939
926
- void setPower ( uint8_t value )
940
+ void writeAndCommitSettings ( )
927
941
{
928
- power = value == 0 ? 0 : 1 ;
929
-
942
+ EEPROM.write (0 , brightness);
943
+ EEPROM.write (1 , currentPatternIndex);
944
+ EEPROM.write (2 , solidColor.r );
945
+ EEPROM.write (3 , solidColor.g );
946
+ EEPROM.write (4 , solidColor.b );
930
947
EEPROM.write (5 , power);
948
+ EEPROM.write (6 , autoplay);
949
+ EEPROM.write (7 , autoplayDuration);
950
+ EEPROM.write (8 , currentPaletteIndex);
951
+ EEPROM.write (9 , showClock);
952
+ EEPROM.write (10 , clockBackgroundFade);
953
+
954
+ EEPROM.write (511 , 55 );
931
955
EEPROM.commit ();
956
+ }
932
957
958
+ void setPower (uint8_t value)
959
+ {
960
+ power = value == 0 ? 0 : 1 ;
961
+ writeAndCommitSettings ();
933
962
broadcastInt (" power" , power);
934
963
}
935
964
936
965
void setAutoplay (uint8_t value)
937
966
{
938
967
autoplay = value == 0 ? 0 : 1 ;
939
-
940
- EEPROM.write (6 , autoplay);
941
- EEPROM.commit ();
942
-
968
+ writeAndCommitSettings ();
943
969
broadcastInt (" autoplay" , autoplay);
944
970
}
945
971
946
972
void setAutoplayDuration (uint8_t value)
947
973
{
948
974
autoplayDuration = value;
949
-
950
- EEPROM.write (7 , autoplayDuration);
951
- EEPROM.commit ();
952
-
975
+ writeAndCommitSettings ();
953
976
autoPlayTimeout = millis () + (autoplayDuration * 1000 );
954
977
955
978
broadcastInt (" autoplayDuration" , autoplayDuration);
@@ -963,12 +986,7 @@ void setSolidColor(CRGB color)
963
986
void setSolidColor (uint8_t r, uint8_t g, uint8_t b)
964
987
{
965
988
solidColor = CRGB (r, g, b);
966
-
967
- EEPROM.write (2 , r);
968
- EEPROM.write (3 , g);
969
- EEPROM.write (4 , b);
970
- EEPROM.commit ();
971
-
989
+ writeAndCommitSettings ();
972
990
setPattern (patternCount - 1 );
973
991
974
992
broadcastString (" color" , String (solidColor.r ) + " ," + String (solidColor.g ) + " ," + String (solidColor.b ));
@@ -989,8 +1007,7 @@ void adjustPattern(bool up)
989
1007
currentPatternIndex = 0 ;
990
1008
991
1009
if (autoplay == 0 ) {
992
- EEPROM.write (1 , currentPatternIndex);
993
- EEPROM.commit ();
1010
+ writeAndCommitSettings ();
994
1011
}
995
1012
996
1013
broadcastInt (" pattern" , currentPatternIndex);
@@ -1004,8 +1021,7 @@ void setPattern(uint8_t value)
1004
1021
currentPatternIndex = value;
1005
1022
1006
1023
if (autoplay == 0 ) {
1007
- EEPROM.write (1 , currentPatternIndex);
1008
- EEPROM.commit ();
1024
+ writeAndCommitSettings ();
1009
1025
}
1010
1026
1011
1027
broadcastInt (" pattern" , currentPatternIndex);
@@ -1027,10 +1043,7 @@ void setPalette(uint8_t value)
1027
1043
value = paletteCount - 1 ;
1028
1044
1029
1045
currentPaletteIndex = value;
1030
-
1031
- EEPROM.write (8 , currentPaletteIndex);
1032
- EEPROM.commit ();
1033
-
1046
+ writeAndCommitSettings ();
1034
1047
broadcastInt (" palette" , currentPaletteIndex);
1035
1048
}
1036
1049
@@ -1054,10 +1067,7 @@ void adjustBrightness(bool up)
1054
1067
brightness = brightnessMap[brightnessIndex];
1055
1068
1056
1069
FastLED.setBrightness (brightness);
1057
-
1058
- EEPROM.write (0 , brightness);
1059
- EEPROM.commit ();
1060
-
1070
+ writeAndCommitSettings ();
1061
1071
broadcastInt (" brightness" , brightness);
1062
1072
}
1063
1073
@@ -1070,10 +1080,7 @@ void setBrightness(uint8_t value)
1070
1080
brightness = value;
1071
1081
1072
1082
FastLED.setBrightness (brightness);
1073
-
1074
- EEPROM.write (0 , brightness);
1075
- EEPROM.commit ();
1076
-
1083
+ writeAndCommitSettings ();
1077
1084
broadcastInt (" brightness" , brightness);
1078
1085
}
1079
1086
0 commit comments