Одна ячейка 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);