Hallo,
ich baue gerade ein Messgerät für mein Aquarium. Dafür wollte ich mittels Rotary Encoder eingelesene Kalibrierwerte im EEPROM speichern. Die Werte sind im Bereich 500-2000, was leider viel zu groß ist für das EEPROM, da es scheinbar nur 8Bit (also Werte von 0-255) unterstützt.
Ich habe das hier gefunden: Arduino Playground - EEPROMWriteAnything aber leider scheine ich nicht wirklich herausfinden zu können, wie ich einzelne (6 verschiedene insgesamt) int Werte hiermit abspeichere.
Vielleicht kann mir hier einer helfen, danke!
Muss ich, um EEPROM.put und EEPROM.get zu verwenden, das ganze erst in ein struct verpacken?
Weil so geht es nicht:
#include <EEPROM.h>
void setup() {
Serial.begin(9600);
}
void loop() {
float f=1003.2;
EEPROM.put(0, f);
float t = 0.0;
EEPROM.get(0, t);
Serial.println(t);
delay(10000);
}
combie
February 11, 2021, 10:28pm
4
Fehlt da nicht ein EEPROM.begin() oder/und EEPROM.commit()?
agmue
February 11, 2021, 10:34pm
5
crosswalkersam:
Muss ich, um EEPROM.put und EEPROM.get zu verwenden, das ganze erst in ein struct verpacken?
Nein, aber der ESP32 hat kein EEPROM, weshalb zusätzliche Vorkehrungen notwendig sind, siehe #4 .
Getestet mit ESP32:
#include <EEPROM.h>
#define EEPROM_SIZE 8 // define the number of bytes you want to access
unsigned int EEPROMReadInt ( unsigned int eeAdresse )
{
unsigned int wert;
EEPROM.get( eeAdresse, wert );
return wert;
}
void EEPROMWriteInt ( unsigned int eeAdresse , unsigned int wert )
{
EEPROM.put(eeAdresse, wert);
}
void setup(void)
{
delay(1000);
Serial.begin(115200);
Serial.println("Anfang");
EEPROM.begin(EEPROM_SIZE); // initialize EEPROM with predefined size
unsigned int eeAdresse = 0;
unsigned int wert1 = EEPROMReadInt(eeAdresse);
Serial.print("Adresse ");
Serial.print(eeAdresse);
Serial.print("\tWert von EEPROM: \t");
Serial.println(wert1, HEX);
eeAdresse = 4;
unsigned int wert2 = EEPROMReadInt(eeAdresse);
Serial.print("Adresse ");
Serial.print(eeAdresse);
Serial.print("\tWert von EEPROM: \t");
Serial.println(wert2, HEX);
Serial.println();
eeAdresse = 0;
wert1 = 0x4711;
// wert1++;
EEPROMWriteInt(eeAdresse, wert1);
eeAdresse = 4;
wert2 = 0x5566;
//wert2++;
EEPROMWriteInt(eeAdresse, wert2);
EEPROM.commit();
eeAdresse = 0;
wert1 = EEPROMReadInt(eeAdresse);
Serial.print("Adresse ");
Serial.print(eeAdresse);
Serial.print("\tWert von EEPROM: \t");
Serial.println(wert1, HEX);
eeAdresse = 4;
wert2 = EEPROMReadInt(eeAdresse);
Serial.print("Adresse ");
Serial.print(eeAdresse);
Serial.print("\tWert von EEPROM: \t");
Serial.println(wert2, HEX);
Serial.println("---------");
}
void loop(void) {}
crosswalkersam:
Muss ich, um EEPROM.put und EEPROM.get zu verwenden, das ganze erst in ein struct verpacken?
Nein. Das kann mit beliebigen Datentypen umgehen. Wie man das organisiert kann man sich aussuchen
combie:
Fehlt da nicht ein EEPROM.begin() oder/und EEPROM.commit()?
Ja, das hat funktioniert! Vielen Dank.
system
Closed
June 12, 2021, 11:56am
8
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.