Wert in EEPROM speichern und wieder einlesen

Hallo an alle,
ich möchte die variable Kaffee_Zeit mit einen Taster um 10 hoch zählen was bei der Seriellen Ausgabe auch angezeigt wird, doch der neue Wert wird nicht im EEPROM gespeichert wo liegt da der Fehler ?

#include <EEPROM.h>
int Kaffee_Zeit = 500;

void setup() {
  pinMode(3, INPUT_PULLUP);
  Kaffee_Zeit = 500;

  Serial.begin(9600);
  float val1 = Kaffee_Zeit;
  EEPROM.put(Kaffee_Zeit, val1);
  Serial.println(val1, 0);
  EEPROM.get(Kaffee_Zeit, val1);
}

void loop() {
  if (digitalRead(3)) {
    delay( 300 );
    Kaffee_Zeit = ( Kaffee_Zeit + 10 );
    delay( 50 );
    float val1 = Kaffee_Zeit;
    EEPROM.put(Kaffee_Zeit, val1);
    Serial.println(val1, 0);
    EEPROM.get(Kaffee_Zeit, val1);
  }
}

schau mal:

scroll runter zu EEPROM put und EEPROM get
Lies was die beiden Parameter bedeuten.
Guck mal in deinen Sketch was du mit der Adresse machst.

Ist Kaffee_Zeit jetzt eine Adresse, oder ein Wert?

es ist ein wert

Dann solltest du ihn nicht als Adresse nutzen.

z.B. hier...

ich hab mal EEPROM.put(0, val1); gesetzt das geht aber auch nicht

und wie sieht nun EEPROM.get aus?

Immer den ganzen Sketch posten und auch schreiben was genau nicht geht.
"geht nicht" ist keine Fehlerbeschreibung!

ich habe es hin bekommen

#include <EEPROM.h>
int Kaffee_Zeit = 0;

void setup() {
  pinMode(3, INPUT_PULLUP);
  Serial.begin(9600);
  float val1 = EEPROM.get(0, val1);
  EEPROM.put(0, val1);
  Serial.println(val1, 0);
  EEPROM.get(0, val1);
  Kaffee_Zeit = val1;

}

void loop() {
  if (digitalRead(3)) {
    delay( 300 );
    Kaffee_Zeit = ( Kaffee_Zeit + 10 );
    delay( 50 );
    float val1 = Kaffee_Zeit;
    EEPROM.put(0, val1);
    Serial.println(val1, 0);
    EEPROM.get(0, val1);
  }
}

naja.
Stell dir mal die Frage, was das EEPROM.get in der letzten Zeile ganz genau machen soll.

ja das kann weg es wird nicht gebraucht

... und jetzt geh mal im Setup deine EEPROM Aufruf durch.
Was macht wirklich Sinn, was kann weg?

also da komme ich nicht weiter wenn ich was weg nehme dann geht es nicht mehr
wähe toll wen du mir da hilfst habe nicht viel Ahnung von der Materie

geh einfach alle 3 Aufrufe durch und hinterfrage was jeder Schritt macht.

EEPROM lesen
EEPROM schreiben
EEPROM lesen

und jetzt überleg mal was du bei einem Programmstart wirklic machen willst.

hab ich schon geschrieben. "Geht nicht" ist keine Fehlerbeschreibung. Was geht nicht? Was macht der Code dann? Was soll er statt dessen machen?

und was soll Adressen-/Wert als Type float darstellen?
hast du schon erwähnnt wieviel dein Board überhaupt EEPROM Platz hat?

nur lesen habe es jetzt so gemacht

#include <EEPROM.h>
int Kaffee_Zeit = 0;

void setup() {
  pinMode(3, INPUT_PULLUP);
  Serial.begin(9600);
  float val1 = EEPROM.get(0, val1);
  Serial.println(val1, 0);
  EEPROM.get(0, val1);
  Kaffee_Zeit = val1;
}

void loop() {
  if (digitalRead(3)) {
    delay( 300 );
    Kaffee_Zeit = ( Kaffee_Zeit + 10 );
    delay( 50 );
    float val1 = Kaffee_Zeit;
    EEPROM.put(0, val1);
    Serial.println(val1, 0);
  }
}

und was passiert jetzt?

na ich lese den wert ein und kann ihn hoch setzen und er bleibt erhalten wenn ich den Stecker ziehe

vielen Dank für deine Hielfe

funktioniert also - gut.

Was macht der zweite EEPROM.get theoretisch im Setup?

ja der kann auch weg

#include <EEPROM.h>
int Kaffee_Zeit = 0;
int Wert_hoch = 0;
int Wert_runter = 0;

void setup() {
  pinMode(3, INPUT_PULLUP);
  Serial.begin(9600);
  float val1 = EEPROM.get(0, val1);
  Serial.println(val1, 0);
  Kaffee_Zeit = val1;
}

void loop() {
  if (digitalRead(3)) {
    delay( 300 );
    Kaffee_Zeit = ( Kaffee_Zeit + 10 );
    delay( 50 );
    float val1 = Kaffee_Zeit;
    EEPROM.put(0, val1);
    Serial.println(val1, 0);
  }
}
1 Like