Skip to content

Instantly share code, notes, and snippets.

@smetronic
Created January 31, 2020 23:26
Show Gist options
  • Save smetronic/2321d15427a54a4190816207a878e847 to your computer and use it in GitHub Desktop.
Save smetronic/2321d15427a54a4190816207a878e847 to your computer and use it in GitHub Desktop.
Reading and storing data structure from EEPROM,
#include <EEPROM.h>
uint8_t rx_buffer[10];
uint8_t rx_mem[10];
void setup() {
Serial.begin(115200);
loadStruct(&rx_mem, sizeof(rx_mem)); // Load data from EEPROM into array.
}
int rx_counter = 0;
void loop() {
if (Serial.available() > 0) {
int rx = Serial.read();
if (rx > 0 && rx_counter < 10) {
rx_buffer[rx_counter] = rx;
rx_counter++;
}
}
//Read => (02 01 02 03 04 05 06 07 08 02) TX, store in EEPROM
if (rx_counter == 10 && rx_buffer[0] == 2 && rx_buffer[9] == 2) {
storeStruct(&rx_buffer, sizeof(rx_buffer)); //store array values in EEPROM
for (int i = 0; i < rx_counter; i++)
{
Serial.write(rx_buffer[i]);
}
Serial.print("Update");
}
//Read => (01) TX, Read stored data structure.
if (rx_counter == 1 && rx_buffer[0] == 1) {
loadStruct(&rx_mem, sizeof(rx_mem));
for (int i = 0; i < sizeof(rx_mem); i++)
{
Serial.write(rx_mem[i]);
}
memset(rx_buffer, 0, sizeof(rx_buffer));
rx_counter = 0;
Serial.print("Loaded");
}
if (rx_counter == 10) {
memset(rx_buffer, 0, sizeof(rx_buffer));
rx_counter = 0;
}
}
void storeStruct(void *data_source, size_t size)
{
EEPROM.begin(size * 2);
for (size_t i = 0; i < size; i++)
{
char data = ((char *)data_source)[i];
EEPROM.write(i, data);
}
EEPROM.commit();
}
void loadStruct(void *data_dest, size_t size)
{
EEPROM.begin(size * 2);
for (size_t i = 0; i < size; i++)
{
char data = EEPROM.read(i);
((char *)data_dest)[i] = data;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment