Variable ändern und nach Reset änderung beibehalten?

Gibt es eine Möglichkeit eine "Zählvariable", die bei jedem drücken eines Buttons hochzählt, und von dieser Zahl dann nach einem Reset (oder einem Ausschalten und einer nicht Nutzung des Arduino über längere Zeit) weiterzählt?

Wie sieht so was aus. Das würde ja bedeuten, dass der Arduino sein Programm selbstständig ändert. geht das??

Bis denn

Dafür hat der Arduino eingebauten EEPROM-Speicher, der ist nichtflüchtig. Der Nachteil ist dass er eine maximale zugesicherte Anzahl von Schreibzyklen pro Speicherzelle hat, dann ist er ausgebrannt und kann nicht mehr benutzt werden. Sind aber immerhin 100.000 Schreibzugriffe oder so.

Du kannst das Problem der maximalen Schreibzugriffe aber umgehen indem Du zusätzliches NVRAM verwendest, z.B. wies in einer DS1307 (56 Bytes) eingebaut ist, wenn Du denkst dass Du an die 100.000 rankommst.

100000 reichen vollkommen. Das ist genau das, was ich brauche. Super danke dir.

Eine Alternative ist F-Ram von Ramtron. Unbegrenzte Schreib/Lesezugriffe. Ohne Batterie! Schnell.

100.000 klingt zwar verflucht viel, kann bei unbedachter Programmierung (gerade in Testphasen) schnell erreicht werden. Also keinesfalls in der loop() "dauerspeichern", sondern eher nach der Wenn-sich-der-Zählwert-ändert-warte-3-Sekunden-und schreib-es-erst-dann-ins-Eeprom-Methode. ;)

Hallo,
ich hab das mal ausprobiert, Schreiben und Lesen mit Kontrolle, bei 300 000 habe ich dann aufgehört, ohne Fehlermeldung.
Die 100 000 sind ja auch Werte, auf die man sich verlassen kann. Für eine Anwendung, wo man auf Zuverlässigkeit angewiesen ist,
wird man keinen Arduino einsetzen.

Hier meine Lösung im Temperaturprogramm :

void EEPROMaus()
{
SensorADR=200;
for(i=0;i<4;i++)
{
A=byte(Sensor >> 8 );

  • EEPROM.write(SensorADR,A);*
  • SensorADR++;*
    _ A=byte(Sensor & 0x0FF);_
    * EEPROM.write(SensorADR,A);*
    * SensorADR++;*
    * }*
    }
    void EEPROMein()
    {
    * SensorADR=200;*
    * for(i=0;i<4;i++)*
    * {*
    * A=EEPROM.read(SensorADR);*
    * SensorADR++;*
    * B=EEPROM.read(SensorADR);*
    * SensorADR++;*
    _ Sensor*=int (A << 8 )+ int(B);
    }
    }*
    Schreiben erfolgt, wenn Daten geändert wurden, lesen beim Programmstart.
    Gruss Kalli_