Here's the code in a crude, preliminary form. I snipped out a lot of irreevant code so I might have introduced a few errors, but I'm sure folks can figure it out.
static int boardIdBaseAddress = 0;
static int timer = 0;
static byte b5 = 0;
static byte b6 = 0;
static byte b7 = 0;
static byte b8 = 0;
unsigned long setupEeprom()
{
byte b1 = EEPROM.read(boardIdBaseAddress);
byte b2 = EEPROM.read(boardIdBaseAddress + 1);
byte b3 = EEPROM.read(boardIdBaseAddress + 2);
byte b4 = EEPROM.read(boardIdBaseAddress + 3);
b5 = EEPROM.read(boardIdBaseAddress + 4);
b6 = EEPROM.read(boardIdBaseAddress + 5);
b7 = EEPROM.read(boardIdBaseAddress + 6);
b8 = EEPROM.read(boardIdBaseAddress + 7);
if ((b1 != 'A') || (b2 != 'P') || (b3 != 'P') || (b4 != '1') || ((b5 == 0xff) && (b6 == 0xff) && (b7 == 0xff) && (b8 == 0xff)))
{
b1 = 'A';
b2 = 'P';
b3 = 'P';
b4 = '1';
randomSeed(timer);
b5 = random(256);
b6 = random(256);
b7 = random(256);
b8 = random(256);
EEPROM.write(boardIdBaseAddress, b1);
EEPROM.write(boardIdBaseAddress + 1, b2);
EEPROM.write(boardIdBaseAddress + 2, b3);
EEPROM.write(boardIdBaseAddress + 3, b4);
EEPROM.write(boardIdBaseAddress + 4, b5);
EEPROM.write(boardIdBaseAddress + 5, b6);
EEPROM.write(boardIdBaseAddress + 6, b7);
EEPROM.write(boardIdBaseAddress + 7, b8);
}
}
void loop()
{
// ...
if (computer_asks_for_ID)
{
setupEeprom();
// ID will be in b5, b6, b7, b8
send_to_computer(b5, b6, b7, b8);
}
// ...
timer++;
}