I am using the attached code. What I am trying to do is:
Test if there is a personalized "board serial number" written in the EEPROM (by previous code run)
If data found was not 7 characters (e.g SN-XXXX
), then generate a serial number and save it to EEPROM
Problem is: it generates a serial correctly, it even stores and reads it a few times, but when I disconnect the USB cable and reconnect to test again, it returns some bad data from the EEPROM, like: ⸮^R⸮y⸮|
which seems to pass my 7 characters test and it doesn't generate a new one.
What am I doing wrong ?
#include <EEPROM.h>
// board SERIAL number
char serial_characters[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"};
// will be filled as SN-A2KH
String serial_number;
void setup() {
Serial.begin(9600);
// Get the float data from the EEPROM at position 0
EEPROM.get(0, serial_number);
// serial from EEPROM valid
if (serial_number.length() == 7) {
Serial.println("Found valid serial in EEPROM");
Serial.println(serial_number);
}
// serial from EEPROM not valid (e.g not: SN-XYZ5)
if (serial_number.length() != 7) {
Serial.println("Serial from eeprom is NOT 7 chars, generating a random serial");
Serial.println(serial_number);
// if analog input pin 0 is not connected, use noise from it in order to generate a random seed, otherwise random is not so random
randomSeed(analogRead(0));
// serial might be empty now, set a "SN-" prefix
serial_number = "SN-";
for (int i = 1; i <= 4 ; i++) {
serial_number = serial_number + serial_characters[random(0, 35)];
}
Serial.println("Generated serial now: " + serial_number);
// save to eeprom if format is valid
if (serial_number.length() == 7) {
EEPROM.put(0, serial_number);
Serial.println("Written serial to EEPROM");
}
} // <<< serial from eeprom not correct, generated one
}
void loop() {}