Hab noch vergessen zu sagen, dass es ein ESP8266 Board ist.
Die zu speichernden Daten sind in einem JSON String, welchen ich dann parse. Dies funktioniert schon. Das struct "SETTINGS" wird nur einmal in den EEPROM geschrieben und gelesen was auch schon funktioniert.
#include <ArduinoJson.h>
#include <EEPROM.h>
struct SETTINGS
{
byte CONFIG;
float DAY_TEMPERATURE;
float NIGHT_TEMPERATURE;
};
struct SCHEDULE
{
word TIME_START;
word TIME_STOP;
bool MONDAY;
bool TUESDAY;
bool WEDNESDAY;
bool THURSDAY;
bool FRIDAY;
bool SATURDAY;
bool SUNDAY;
};
void setup()
{
Serial.begin(115200);
WRITE();
READ();
}
void loop()
{
}
void WRITE()
{
int ADDRESS = 0;
Serial.println(JSON);
DynamicJsonBuffer BUFFER;
JsonObject& root = BUFFER.parseObject(JSON);
SETTINGS SETTINGS_STRUCT = {root["CONFIG"], root["DAY_TEMPERATURE"], root["NIGHT_TEMPERATURE"]};
Serial.println(SETTINGS_STRUCT.CONFIG);
Serial.println(SETTINGS_STRUCT.DAY_TEMPERATURE);
Serial.println(SETTINGS_STRUCT.NIGHT_TEMPERATURE);
EEPROM.begin(sizeof(SETTINGS));
EEPROM.put(ADDRESS, SETTINGS_STRUCT);
EEPROM.commit();
ADDRESS += sizeof(SETTINGS);
SCHEDULE SCHEDULE_STRUCT[root["SCHEDULE"].size()];
for(int COUNTER = 0; COUNTER < root["SCHEDULE"].size(); COUNTER++)
{
SCHEDULE_STRUCT[COUNTER].TIME_START = root["SCHEDULE"][COUNTER]["TIME_START"].as<word>();
SCHEDULE_STRUCT[COUNTER].TIME_STOP = root["SCHEDULE"][COUNTER]["TIME_STOP"].as<word>();
SCHEDULE_STRUCT[COUNTER].MONDAY = root["SCHEDULE"][COUNTER]["MONDAY"].as<bool>();
SCHEDULE_STRUCT[COUNTER].TUESDAY = root["SCHEDULE"][COUNTER]["TUESDAY"].as<bool>();
SCHEDULE_STRUCT[COUNTER].WEDNESDAY = root["SCHEDULE"][COUNTER]["WEDNESDAY"].as<bool>();
SCHEDULE_STRUCT[COUNTER].THURSDAY = root["SCHEDULE"][COUNTER]["THURSDAY"].as<bool>();
SCHEDULE_STRUCT[COUNTER].FRIDAY = root["SCHEDULE"][COUNTER]["FRIDAY"].as<bool>();
SCHEDULE_STRUCT[COUNTER].SATURDAY = root["SCHEDULE"][COUNTER]["SATURDAY"].as<bool>();
SCHEDULE_STRUCT[COUNTER].SUNDAY = root["SCHEDULE"][COUNTER]["SUNDAY"].as<bool>();
Serial.println(SCHEDULE_STRUCT[COUNTER].TIME_START);
Serial.println(SCHEDULE_STRUCT[COUNTER].TIME_STOP);
Serial.println(SCHEDULE_STRUCT[COUNTER].MONDAY);
Serial.println(SCHEDULE_STRUCT[COUNTER].TUESDAY);
Serial.println(SCHEDULE_STRUCT[COUNTER].WEDNESDAY);
Serial.println(SCHEDULE_STRUCT[COUNTER].THURSDAY);
Serial.println(SCHEDULE_STRUCT[COUNTER].FRIDAY);
Serial.println(SCHEDULE_STRUCT[COUNTER].SATURDAY);
Serial.println(SCHEDULE_STRUCT[COUNTER].SUNDAY);
EEPROM.begin(sizeof(SCHEDULE));
EEPROM.put(ADDRESS, SCHEDULE_STRUCT[COUNTER]);
EEPROM.commit();
ADDRESS += sizeof(SCHEDULE);
}
CONFIGURATION();
}
}
}
void READ()
{
int ADDRESS = 0;
SETTINGS CONFIG;
EEPROM.begin(sizeof(SETTINGS));
EEPROM.get(ADDRESS, CONFIG);
ADDRESS += sizeof(SETTINGS);
Serial.println(CONFIG.CONFIG);
Serial.println(CONFIG.DAY_TEMPERATURE);
Serial.println(CONFIG.NIGHT_TEMPERATURE);
SCHEDULE TIMETABLE[1];
for(int COUNTER = 0; COUNTER < 1; COUNTER++)
{
EEPROM.begin(sizeof(SCHEDULE));
EEPROM.get(ADDRESS, TIMETABLE[COUNTER]);
ADDRESS += sizeof(SCHEDULE);
Serial.println(TIMETABLE[COUNTER].TIME_START);
Serial.println(TIMETABLE[COUNTER].TIME_STOP);
Serial.println(TIMETABLE[COUNTER].MONDAY);
Serial.println(TIMETABLE[COUNTER].TUESDAY);
Serial.println(TIMETABLE[COUNTER].WEDNESDAY);
Serial.println(TIMETABLE[COUNTER].THURSDAY);
Serial.println(TIMETABLE[COUNTER].FRIDAY);
Serial.println(TIMETABLE[COUNTER].SATURDAY);
Serial.println(TIMETABLE[COUNTER].SUNDAY);
}
}
Serielle Ausgabe:
Schreiben:
0
30.00
30.00
1700
1900
1
1
1
1
1
1
1Lesen:
0
30.00
30.00
26393
16400
1
0
0
0
0
253
254