Arduino EEPROM примеры использования

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

Leave a Reply

Ваш адрес email не будет опубликован.