Eine long int Zahl im Arduino EEPROM ablegen und auslesen

Eine Long Integer Zahl mit 8 Byte soll im Arduino EEPROM abgelegt und dann wieder ausgelesen werden.

Long Integer in das EEPROM schreiben

void eepromWriteLong(long lo, int adr) {
// long Wert in das EEPROM schreiben  
// Eingabe : adr Speicherplatz 
// Eingabe : lo Zahl, Wertebereich -2.147.483.648 bis 2.147.483.647
//
// Matthias Busse 23.5.2014 Version 1.0

byte by;

  for(int i=0;i< 4;i++) {
    by = (lo >> ((3-i)*8)) & 0x000000ff; 
    EEPROM.write(adr+i, by);
  }
} // eepromWriteLong

Und eine Long Integer Zahl wieder auslesen

long eepromReadLong(int adr) {
// long int Wert aus 4 Byte EEPROM lesen
// Eingabe : adr bis adr+3
// Ausgabe : long Wert
// 
// Matthias Busse 23.5.2014 Version 1.0

long lo=0;

  for(int i=0;i< 3;i++){
    lo += EEPROM.read(adr+i);
    lo = lo << 8;
  }
  lo += EEPROM.read(adr+3);
  return lo;
} // eepromReadLong

> Eine Integer Zahl in das Arduino EEPROM schreiben

von Matthias Busse

5 Gedanken zu „Eine long int Zahl im Arduino EEPROM ablegen und auslesen

  1. Pingback: Barometer Display mit 1h / 3h Differenz und Temperatur Ausgabe. Mit dem 5110 Display, BMP-180, Uno | Shelvin – Elektronik ausprobiert und erläutert

  2. Pingback: Eine Integer Zahl in das Arduino EEPROM schreiben und wieder lesen | Shelvin – Elektronik ausprobiert und erläutert

  3. M. Eghbali

    Hallo,
    Ich bin Anfänger und neu hier. Kann mir bitte jemand dabei helfen das program fertig zu machen?
    In diesem Program gibt es 2 Zähler DWORD Zähler. Ein Zähler wird immer automatisch auf null gesetzt aber der zweite soll immer erhalten bleiben aber ich weiß nicht wie!? Um eine Antwort würde ich mich sehr freuen.

    #include

    int powerPin = 3;
    int keyPin = 4;
    int power = 0;
    int powerState = 0;
    int key = 0;
    int keyState = 0;
    int tStart = 0;
    unsigned long count1 = 0;
    unsigned long count2 = 0;

    void setup()
    {
    Serial.begin(9600);
    pinMode(keyPin,INPUT);
    pinMode(powerPin,INPUT);
    }

    void loop()
    {
    powerState = digitalRead(powerPin);
    keyState = digitalRead(keyPin);

    if ( powerState != power )
    {
    delay(200);
    if ( powerState == HIGH ) // positive flank
    {
    count1 = 0;
    }
    else
    {
    if( tStart != 0 )
    tStart = 0;
    }
    power = powerState;
    }
    if( power == HIGH )
    {
    if (keyState != key)
    {
    delay(200);
    if (keyState == HIGH) //positive flank
    {
    ++count1;
    ++count2; // wie kann ich den Zähler in EEPROM speichern, so dass nicht gelöscht wird?

    if( tStart == 0 )
    tStart = millis();

    }
    key = keyState;
    }
    else
    {
    Serial.print(„count1: „);
    Serial.println(count1);
    Serial.print(„count2: „);
    Serial.println(count2);
    Serial.println();
    delay(200);
    }
    }
    }

    Antworten
  4. venom4x

    Mögliche Komplettlösung mit Ausgabe von:
    long Zahl im Arduino EEPROM ablegen und auslesen

    #include

    int adresse=103;
    unsigned long lo1=4294967295;
    unsigned long lo2;

    void setup() {
    Serial.begin(38400); // start serial

    /*************************/
    Serial.println(„Long in EEPROM schreiben\n“);
    /*************************/

    }

    void loop() {
    eepromWriteLong(lo1, adresse);
    lo2 = eepromReadLong(adresse);

    /*************************/
    Serial.print(„\nSchreib Wert:\t“);
    Serial.println(lo1);
    Serial.print(„Lese Wert:\t“);
    Serial.println(lo2);
    Serial.println(„\n*******************************\n“);
    /*************************/

    delay(3000);
    lo1 -= 1;
    }

    void eepromWriteLong(unsigned long lo1, int adr) {
    // long Wert in das EEPROM schreiben
    // Eingabe : adr Speicherplatz
    // Eingabe : lo1 Zahl, Wertebereich -2.147.483.648 bis 2.147.483.647

    byte by;
    Serial.print(„EEPROM schreiben\n“);
    for(int i=0;i> ((3-i)*8)) & 0x000000ff;
    EEPROM.write(adr+i, by);

    /*************************/
    Serial.print(„Adresse: „);
    Serial.print(adr+i);
    Serial.print(„\tWert: „);
    Serial.println(by, HEX);
    /*************************/

    }

    /*************************/
    Serial.print(„\n“);
    /*************************/

    } // eepromWriteLong

    unsigned long eepromReadLong(int adr) {
    // long int Wert aus 4 Byte EEPROM lesen
    // Eingabe : adr bis adr+3
    // Ausgabe : long Wert

    unsigned long lo2=0;
    Serial.print(„EEPROM lesen\n“);
    for(int i=0;i< 3;i++){
    lo2 += EEPROM.read(adr+i);
    lo2 = lo2 << 8;

    /*************************/
    Serial.print("Adresse: ");
    Serial.print(adr+i);
    Serial.print("\tWert: ");
    Serial.println(lo2, HEX);
    /*************************/

    }
    lo2 += EEPROM.read(adr+3);

    /*************************/
    Serial.print("Adresse: ");
    Serial.print(adr+3);
    Serial.print("\tWert: ");
    Serial.println(lo2, HEX);
    /*************************/

    return lo2;
    } // eepromReadLong

    Antworten
  5. Heiko

    Hallo, der Artikel ist zwar bereits älter, aber dennoch hat er mir sehr geholfen.
    Vielen Dank dafür. Super gut erklärt.
    Dennoch ist mir ein Fehler in deinem Text aufgefallen:
    In der ersten Zeile schreibst du „Eine Long Integer Zahl mit 8 Byte soll …“ !
    Eine long int Variable hat jedoch nur 4 Byte.
    Kein großer Fehler, aber gerade bei Arduino wichtig 😉

    Danke.
    Gruß, Heiko

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.