Tis is my first try with the EEProm on Arduino.
My goal::
- save my Calibration data in address 0
- save my sensor readings from 1 to end of the EEprom
The same way I want to read them later.
I did an Enable to only write to EEProm when it's on in my complete code.
Also I did 2 lines to comment out (whichever is needed)
One should start over the recording from the beginning if the End of the EEProm has been reached
The other should stop recording when the end has been reached.
I just want to make sure my routines don't miss some dataspace or write/read over the EEProm length.
Also is it ok to write an int to the byte-space in the EEProm or will it overwrite data in the next cell then and I need to use byte as variable after I mapped it?
Thx very much!
#include <EEPROM.h>
// ---------------- EEProm Aufzeichnung Sensordaten von Sensor1 aktivieren (HIGH = AN) -----------------------
bool EE_Enable = LOW;
// -------- EEProm Widergabe auf SerialPort aktivieren (HIGH = AN) und Geschwindigkeit einstellen ------------
bool EE_Read = LOW;
const int EE_ReadDelay = 100;
//--------------------------- ACHTUNG NUR EINS ZUR ZEIT ODER BEIDE AUS! ------------------------------------
int EEWriteAdress; // EEProm Adresscounter (Startwert wird in setup() gesetzt)
const int EECalib = 0; // EEProm Adresse für Kalibrationsdaten
const int EEData = 1; // EEProm Startadresse für Messdaten (Falls Adresse geändert wird muss auch EEWriteAdress angepasst werden)
void setup() {
EEWriteAdress = EEData; // Startadresse EEprom setzen
}
void loop() {
// Here they are used somewhere
}
// -------------- EEProm Funktionen -----------------------------------------
void EE_WriteCalib(int CalibWert) {
EEPROM.update(EECalib, map(CalibWert, 0, 1023, 0, 255)); // Mappe Kalibration von 1024 auf 256 und schreibe in Speicher für Kalibration
}
void EE_WriteValue(int MessWert) { // Schreibt gemessenen Wert ins EEProm
EEPROM.update(EEWriteAdress, map(MessWert, 0, 1023, 0, 255)); // Mappe Messwert von 1024 auf 256 und schreibe in Speicher
EEWriteAdress++; // Adresse hochzählen
if (EEWriteAdress == EEPROM.length()) {
// EEWriteAdress = EEData; // Adresse zurücksetzen und von vorne beginnen mit Aufzeichnen oder
EE_Enable = LOW; // Aufzeichnung stoppen
}
}
void EE_SerialPrint() {
int CalibRead = EEPROM.read(EECalib); // Lese Kalibration in Variable
for (int i = EEData; i < EEPROM.length(); i++) { // Gebe Daten aus von Startwert bis Ende EEProm
Serial.print(CalibRead); // Kalibrationswert ausgeben
Serial.print(","); // Trennung damit 2. Graph mit Messdaten erstellt wird
Serial.print(EEPROM.read(i)); // Anzeige gelesener Messwert
delay(EE_ReadDelay); // Verzögerung vor Ausgabe nächster Wert
}
}