Wert in EEPROM speichern und wieder einlesen

wird ja.

Möchtest jetzt noch erklären warum du float und int mischt und was es wirklich sein soll?

Ich habe mir da aus dem Internet so zusammen gebastelt wie gesagt ich hab da nichts passendes gefunden und mein Verständnis reicht da nicht so weit

Warum wird hier ein int zu einem float und wieder zurück?

Tipp:
Durch stetes konvertieren werden Werte weder schöner, noch besser.

das int brauche ich später für weitere Anwendungen das ist nur ein kurzer Ausschnitt damit ich es besser verstehe was da gemacht werden muss
eigentlich will ich nur den neuen wert ins EEPROM schreiben und später weiter mit arbeiten

Leider musste ich mich von dem vorigen EEPROM verabschieden da der Arduino DUE kein EEPROM hat deshalb jetzt mit einem I2C FERM Breakout. ich habe diverse Tests mit verschiedenen Libraries durchgeführt doch ohne Erfolg.


Folgendes möchte ich machen:
in einer Variable steht ein Wert aus 5 Zahlen in Millisekunden zb. 30000
Taste 1 = Pin 5 zählt den Wert um jeweils 50 hoch
Taste 2 = Pin 6 zählt den Wert um jeweils 50 runter
dann soll Taste 3 = Pin 7 soll den neuen Wert in das EEPROM schreiben
Taste 4 = Pin 3 ist nur zum auslesen des EEPROM ob der wert geschrieben wurde
das Problem ist wenn ich den Arduino neu starte steht immer 0 da.
wo liegt da der Fehler als Anfänger finde ich nicht den richtigen Punkt.

#include "Adafruit_EEPROM_I2C.h"
Adafruit_EEPROM_I2C i2ceeprom;
#define EEPROM_ADDR 0x50


void setup() {
  pinMode(3, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  Serial.begin(115200);
  i2ceeprom.begin(0x50);
  float wert = neuer_wert;
  int neuer_wert = 0;
}

void loop() {
  if (!( digitalRead(5) )) {
    neuer_wert = ( neuer_wert + 50 );
    delay( 500 );
  }
  if (!( digitalRead(6) )) {
    neuer_wert = ( neuer_wert - 50 );
    delay( 500 );
  }
  if (!( digitalRead(7) )) {

    //speicher werte in EEprom
    float wert = neuer_wert;
    uint8_t buffer[2];
    //schreibe
    memcpy(buffer, (void *)&wert, 2);
    i2ceeprom.write(0x00, buffer, 2);
    //lese
    delay( 500 );
  }
  if (!( digitalRead(3) )) {

    //lese werte aus EEprom
    float wert = neuer_wert;
    uint8_t buffer[2];
    //lese
    i2ceeprom.read(0x00, buffer, 2);
    memcpy((void *)&wert, buffer, 2);
    Serial.print("lese wert: ");
    Serial.println(wert, 0);	
    delay( 500 );
  }
}


vielleicht kann mir da jemand helfen.

Warum als float?

habe mir das so zusammen gestückelt aus Beispielen doch da ist alles im Setup drin dort geht es auch
und wenn ich das float weg nehme meldet da System buffer ist nicht deklariert

Du sollst es ja auch nicht wegmachen. Du sollst überlegen welcher Datentype richtig ist.
float = kommazahl
Schau mal unter Arduino-Referenz - Arduino-Referenz nach Datentypen. Du brauchst wahrscheinlich einen Integertype

Und noch was: Du solltest die auch noch mal ansehen wo man Variablen deklariert und wo sie dann zugreifbar sind. Englisch: scope. Was du im Setup deklarierst, ist im loop nicht da!

ja ich bin Anfänger deshalb komme ich nicht weiter
wenn ich int wert = neuer_wert nehme bekomme ich die Meldung i2ceeprom.read(0x00, buffer, 2); was not declared in the scope

#include "Adafruit_EEPROM_I2C.h"
Adafruit_EEPROM_I2C i2ceeprom;
#define EEPROM_ADDR 0x50

int neuer_wert = 0;

void setup() {
  pinMode(3, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  Serial.begin(115200);
  i2ceeprom.begin(0x50);
}

void loop() {
  if (!( digitalRead(5) )) {
    neuer_wert = ( neuer_wert + 50 );
    delay( 500 );
  }
  if (!( digitalRead(6) )) {
    neuer_wert = ( neuer_wert - 50 );
    delay( 500 );
  }
  if (!( digitalRead(7) )) {
    //speicher werte in EEprom
    uint8_t buffer[2];
    //schreibe
    memcpy(buffer, (void *)&neuer_wert, 2);
    i2ceeprom.write(0x00, buffer, 2);
    delay( 500 );
  }
  if (!( digitalRead(3) )) {
    //lese werte aus EEprom
    uint8_t buffer[2];
    i2ceeprom.read(0x00, buffer, 2);
    memcpy((void *)&neuer_wert, buffer, 2);
    Serial.print("lese wert: ");
    Serial.println(neuer_wert);	
    delay( 500 );
  }
}

ja danke jetzt geht es ich komme weiter vielen Dank

Hallo,

das was du neu hast, ist das EEprom oder ein FRAM?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.