Arduino UNO и NANO содержат 1024 байт EEPROM – энергонезависимой памяти, в которой можно хранить данные, которые будут доступны после отключения питания.
В Arduino IDE по умолчанию уже имеется библиотека EEPROM которая позволяет проводить операции с энергонезависимой памятью.
Память EEPROM обладает гарантированным жизненным циклом 100 000 операций записи/стирания. Время затраченное на одну операцию записи в EEPROM составляет примерно 3,3 мс.
Чтение EEPROM
EEPROM.read(address)
raed (byte) — содержимое ячейки памяти, address — порядковый номер ячейки памяти.
Если ячейка памяти ни когда не перезаписывалась, то ее чтение вернет значение 255. Номер ячейки памяти начинается с 0 и заканчивается 1023 (int).
В следующем примере произведем поочередное чтение всех ячеек памяти:
#include <EEPROM.h> int address;// начальный адрес памяти EEPROM byte value; // значение EEPROM void setup() { Serial.begin(9600); } void loop() { value = EEPROM.read(address); // считываем значение по текущему адресу EEPROM Serial.print(address); Serial.print(" = "); Serial.println(value); address++ ; if (address==1024){address=0;} delay(100); }
Запись EEPROM
EEPROM.write(address, value)
Функция записывает один байт со значением value в EEPROM по адресу address.
address — адрес ячейки для записи (int), начинается с 0, value — значение записываемого байта (byte), от 0 до 255.
В следующем примере запишем значение 200 по адресу 0 и прочитаем ячейку памяти с адресом 0:
#include <EEPROM.h> byte value; // значение EEPROM void setup() { Serial.begin(9600); EEPROM.write(0,200);// запишем значение 200 в ячейку памяти под номером 0 } void loop() { value = EEPROM.read(0); // считываем значение по текущему адресу EEPROM Serial.print(0); Serial.print(" = "); Serial.println(value); delay(1000); }
Обновление EEPROM
EEPROM.update(address, value)
Функции update() аналогична write() и является предпочтительной в использовании, так как значение записывается только тогда, когда оно отличается от уже записанного. Данная функция позволяет продлить жизнь EEPROM.
Обновим значение ячейки под номером 0:
#include <EEPROM.h> byte value; // значение EEPROM void setup() { Serial.begin(9600); EEPROM.update(0,100);// обновим содержимое ячейки памяти под номером 0 } void loop() { value = EEPROM.read(0); // считываем значение по текущему адресу EEPROM Serial.print(0); Serial.print(" = "); Serial.println(value); delay(1000); }