#include <EEPROM.h>
// start reading from the first byte (address 0) of the EEPROM
int address = 0;
byte value;
void setup()
{
// initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
EEPROM.begin(512);
}
void loop()
{
// read a byte from the current address of the EEPROM
value = EEPROM.read(address);
Serial.print(address);
Serial.print("\t");
Serial.print(value);
Serial.println();
// advance to the next address of the EEPROM
address = address + 1;
// there are only 512 bytes of EEPROM, from 0 to 511, so if we're
// on address 512, wrap around to address 0
if (address == 512)
address = 0;
delay(5000);
}
255 ist die leere (gelöschte) Zelle.
Auch solltest Du Deinen EEprom-vollschreib-Sketch eher mit put arbeiten - Das schreibt nur ins EEprom, wenn dort was Anderes steht, als Du dort rein schreiben willst.
Mit write wird der Inhalt erneut dort reingeschrieben, was einen zusätzlichen Lösch-Schreib-Zyklus entspricht und Die sind beim EEprom in absehbarer Zeit aufgebraucht - und dann ist diese eine Stelle im EEprom eben kaputt.
Bei Deinem Sketch wunderte ich mich eh, wenn Du maximal 512 Platz hast, aber bei 512 mit Schreiben beginnst, stimmt doch was nicht, oder? ... EEPROM hat doch gar keine .begin() Methode ?!? Edit ... zumindest schreibt die Arduino-Referenz dazu Nix - und im Update-Beispiel wird's auch nicht benutzt.
Wenn's aber trotzdem da ist, wie #5 von Tommy56 vermuten lässt, soll's mich aber nicht stören.
du machst den commit nur alle 512 durchläufe.
Hast du 512 x 10000 Millis gewartet bevor du den anderen Sketch aufgespielt hast?
Vorschlag:
gib deine Schreibeoperation in das Setup und lass das delay weg.
Dann erwartest auch das vollständige beschreiben des eeproms
Schreibe ans Ende vom Setup ein Serial.println(F("fertig samma"));
dann weist, dass du den anderen Sketch aufspielen kannst.
da die ESP8266 und ESP32 keinen EEPROM haben, ist es eine Emulation in Ram und Flash.
Es wird mit den EEPROM Funktionen nur in der Ram-Kopie gearbeitet, erst ein EEPROM.commit(); schreibt die Daten vom Ram ins Flash.
Man sollte das geziehlt einsetzen, wenn es nötig ist. Auch bei nur einem geänderten Wert wird auch die komplette Flashpage gelöscht und neu aus dem Ram beschreiben, weil es nur so geht.