Одна ячейка EEPROM хранит 1 байт информации начиная с нуля
Запись 1 байта данных – EEPROM.write(addr, data);
Чтение 1 байта данных – EEPROM.read(addr);
Запись любого типа данных – EEPROM.put(addr, data);
Чтение любого типа данных – EEPROM.get(addr, data);
Происходит замена на новое значения val по тому же адресу addr (не меняет адрес), если новое значение различно с текущем значением val– EEPROM.update(addr, data).
Пример кода скетча работы EEPROM в Arduino — сохранение целого числа и чисел с плавающей точкой float
#include <EEPROM.h>
int addr = 0;
struct Struct_test {
char names[10]; // 10 байт
float weight;// 4 байт
};
void setup() {
Serial.begin(9600);
Struct_test test[] = {
{
"Cocos",
77.7
}, {
"Apple",
25.32
}
};
for (int i = 0; i < 2; i++) {
EEPROM.put(addr, test[i]);
addr += sizeof(Struct_test);
}
addr = 0;
Struct_test test_new;
for (int i = 0; i < 2; i++) {
EEPROM.get(addr, test_new);
Serial.println("Структура размер - " + String(addr));
Serial.println( String(test_new.names) + " " + String(test_new.weight));
// Структура размер - 0 Cocos 77.70 Структура размер - 14 Apple 25.32
addr+= sizeof(Struct_test);
}
}
void loop() {}
Пример кода скетча сохранения младшего и старшего байта с использованием EEPROM в Arduino
#include <EEPROM.h>
int number = 777;
byte high_byte = highByte(number); // старший байт
byte low_byte = lowByte(number); // младший байт
void setup() {
Serial.begin(9600);
EEPROM.update(0, high_byte);
EEPROM.update(1, low_byte);
delay(2000);
byte a = EEPROM.read(0);
byte b = EEPROM.read(1);
Serial.println(a, BIN); // 11
Serial.println(b, BIN); // 1001
Serial.println("Старший байт - "+String(a)); // 3
Serial.println("Младший байт - "+String(b)); // 9
int rez = word(high_byte, low_byte); // объединяем байты
Serial.println(String(rez)); // 777
}
void loop() {
}
Пример кода скетча сохранения и выделения памяти структуре данных с использованием EEPROM в Arduino
#include <EEPROM.h>
int addr = 0;
struct Struct_test {
char names[10]; // 10 байт
float weight;// 4 байт
};
void setup() {
Serial.begin(9600);
Struct_test test[] = {
{
"Cocos",
77.7
}, {
"Apple",
25.32
}
};
for (int i = 0; i < 2; i++) {
EEPROM.put(addr, test[i]);
addr += sizeof(Struct_test);
}
addr = 0;
Struct_test test_new;
for (int i = 0; i < 2; i++) {
EEPROM.get(addr, test_new);
Serial.println("Cтруктура размер - " + String(addr));
Serial.println( String(test_new.names) + " " + String(test_new.weight));
// Cтруктура размер - 0 Cocos 77.70 Cтруктура размер - 14 Apple 25.32
addr+= sizeof(Struct_test);
}
}
void loop() {}

Код очистки памяти EEPROM в Arduino
for (int i = 0; i < EEPROM.length(); i++) EEPROM.update(i, 255);
