Frage bezügl. Speichern ohne Datenverlust ( Frage an die Profis hier )

Mag sein, dass dies eine dumme Frage ist, aber ich stell sie trotzdem.

In einem Setup steht bei mir folgende Zeile:

int messwert[21];

In "messwert" werden im Laufe einer Zeit x ( hier 21 Tage ) 21 Werte, tägl. einer, gespeichert.
Über eine Routine wird dann der Erste durch den Zweiten, der Zweite durch den den Dritten usw. überschrieben und von den 21 Werten werden immer die letzten 20 am Display angezeigt.
Das alles klappt hervorragend.

Logisch, wenn ich den Arduino resette oder aus- und wieder einschalte, dann sind die Werte weg und alles beginnt von vorne.

Was der kleine Rechner aber nicht vergisst, ist das Programm. Das ist so gespeichert, das es nach einem Reset wieder werkelt.

Nun zu meiner Frage:

Gibt es eine Möglichkeit ( außer SD-Karte oder andere externe Speicher ), den Inhalt von messwert[21]
in einen "nicht flüchtigen" Bereich zu schreiben, so dass er z.B. nach Stromausfall oder Reset die Werte wieder zur Verfügung hat, und da weitermacht, wo er war?
Die entsprechende Variable, die sagt, welcher als nächster dran ist, müsste dann auch dort gespeichert werden.

Es geht also nur um einen kleinen Speicherbereich, den das Ganze bräuchte.
das Programm selbst ist nicht so groß, als das da nicht noch Platz wäre.
Und neu beschreiben kann man den Bereich, z.B. mit einem anderen Programm ja schließlich auch.

Ich habe keine Idee, ob das geht, wie das geht, was da erfordelich ist.

suche nach

Arduino EEPROM put

und

Arduino EEPROM get

AAAhhhhh, ok,

da gibts sogar ne lib für,

Danke für den TIP

für mehr infos:

Grüße Uwe

Von mir nicht genutzt und getestet: Writing to FLASH from application. Please test and enjoy :slight_smile:

skyfox60:
Ich habe keine Idee, ob das geht, wie das geht, was da erfordelich ist.

Mein EEPROM-Merkzettel befindet sich hier.

Gruß

Gregor

Hallo Gregor,
danke für den Tip.
Das, was ich brauche, sthet dort versträndlich beschrieben.

Ich werde mal versuchen, das umzusetzen.

Einzig das mit dem "put" und "get" habe ich nicht verstanden, weil mir der Begriff Struktur in dem Zusammenhang leider nichts sagt. ( Ist zu hoch für Anfänger )

Da ich aber nur einstellige Werte speichern will, sollte das dann ja mit read und update gehen.

Also

Danke nochmal.

skyfox60:
... weil mir der Begriff Struktur in dem Zusammenhang leider nichts sagt. ( Ist zu hoch für Anfänger )

Eine Struktur ist eine zusammengesetzte Variable - ein Ding, das sich aus Variablen (oder z.B. anderen Strukturen) zusammensetzt.

Wenn Du z.B. x/y-Koordinaten speichern möchtest, kannst Du eine Struktur definieren:

struct Koord
{
  byte x;
  byte y;
}

Auf die Elemente der Struktur greifst Du dann z.B. so zu:

Koord koordinaten;

koordinaten.x=12;
koordinaten.y=1;

oder

blubberbla=koordinaten.x;

Wenn Du so ein Objekt ins EEPROM tust, z.B. mit

EEPROM.put(koordinaten);

dann wird das ganze Ding gespeichert. Mit

Koord dingsda=EEPROM.get(...);

kannst Du das dann wieder aus dem EEPROM holen.

Probier's aus. Das macht Spaß :slight_smile:

Gruß

Gregor

Hy Gregor,
ich finde, sehr Anfängerverständlich erklärt.
1+

sehr Anfängerverständlich erklärt

Allerdings das wesentliche in ... versteckt. Die Variable, die den EEPROM Inhalt kriegen soll, muss vorher definiert sein.

struct Koord
{
  byte x;
  byte y;
};
...
Koord koordinaten;
...
     EEPROM.get(0,koordinaten);

Auch EEPROM.put hat natürlich einen Parameter mehr:

Koord koordinaten {10,10};
EEPROM.put(0,koordinaten);

Die 0 passt nur in diesem Beispiel, wo sonst nichts im EEPROM steht.

michael_x:
Allerdings das wesentliche in ... versteckt. Die Variable, die den EEPROM Inhalt kriegen soll, muss vorher definiert sein.

Naja....ein wenig selbst überlegen sollten auch die Anfänger können. :wink:

HotSystems:
ich finde, sehr Anfängerverständlich erklärt.

Danke für die Blumen :slight_smile:

Ich bin seit '96 online und habe wirklich viel vom Netz profitiert. Ist doch schön, wenn man auch mal etwas zurückgeben kann, gell.

@Michael: Ich finde nicht, dass '...' das Wesentliche ist. Wirklich interessant ist doch, dass man mit solchen Konstrukten seine Variablen sortieren kann. Zudem wird Code durch Konstrukte wie

me.face.shaved=false;

deutlich verständlicher. Davon hatte ich es ja grad erst. Ist halt Tipparbeit.

Gruß

Gregor