Найти в Дзене
IOT ENTERPRISE ©

EEPROM запрос данных из памяти ARDUINO

/***
Пример использования EEPROM.get()

Показывает, как применять метод EEPROM.get().


Чтобы заранее задать данные в EEPROM, запустите пример eeprom_put.
Этот скетч будет работать и без него, но тогда будут показаны данные,
которые уже есть в EEPROM.

Это может привести к выводу «мусора» в последовательный порт,
если в одной из загруженных строк нет нулевого символа.

Автор: Кристофер Эндрюс (Christopher Andrews), 2015
Лицензия: MIT
***/

#include <EEPROM.h> // Подключаем библиотеку для работы с EEPROM

void setup() {
float f = 0.00f; // Переменная для хранения данных, считанных из EEPROM
int eeAddress = 0; // Адрес в EEPROM, с которого начинаем чтение


Serial.begin(9600); // Инициализируем последовательный порт (скорость 9600 бод)

while (!Serial) { // Ждём подключения последовательного порта (актуально для встроенных USB‑портов)
; // Пустой цикл — ждём, пока порт станет доступен
}

Serial.print("Чтение float из EEPROM: "); // Выводим подсказку в монитор порта


// Считываем данные типа float из EEPROM по адресу eeAddress
EEPROM.get(eeAddress, f);

// Выводим считанное значение с точностью до 3 знаков после запятой
// Если данные в EEPROM не являются корректным float, может вывестись «ovf» или «nan»
Serial.println(f, 3);

/***
Поскольку EEPROM.get() возвращает ссылку на переменную f,
можно использовать его напрямую в Serial.print(), например:
Serial.print( EEPROM.get( eeAddress, f ) );
***/

/***
Метод get() можно использовать и с пользовательскими структурами.
Этот фрагмент вынесен в отдельную функцию.
***/

secondTest(); // Запускаем следующий тест
}

// Определяем пользовательскую структуру
struct MyObject {
float field1; // Поле типа float
byte field2; // Поле типа byte
char name[10]; // Массив символов (строка) длиной 10
};

// Функция для чтения пользовательской структуры из EEPROM
void secondTest() {
// Перемещаем адрес на следующий байт после float 'f'
int eeAddress = sizeof(float);

MyObject customVar; // Переменная для хранения считанной структуры


// Считываем структуру из EEPROM по адресу eeAddress
EEPROM.get(eeAddress, customVar);

// Выводим сообщение о чтении структуры
Serial.println("Чтение пользовательской структуры из EEPROM: ");

// Последовательно выводим поля структуры
Serial.println(customVar.field1); // Значение поля field1
Serial.println(customVar.field2); // Значение поля field2
Serial.println(customVar.name); // Строка name
}

void loop() {
/* Пустой цикл — после setup() программа ничего не делает */
}

Пояснение к коду

  1. #include <EEPROM.h>
    Подключает библиотеку для работы с энергонезависимой памятью EEPROM микроконтроллера.
  2. void setup()
    Функция, выполняемая один раз при запуске программы:
    float f = 0.00f; — создаёт переменную для хранения значения типа float, считанного из EEPROM.
    int eeAddress = 0; — задаёт начальный адрес в EEPROM для чтения данных.
    Serial.begin(9600); — инициализирует последовательный порт со скоростью 9600 бод для вывода данных.
    while (!Serial) — ждёт подключения последовательного порта (важно для плат с встроенным USB).
    Serial.print("Чтение float из EEPROM: ") — выводит подсказку в монитор порта.
    EEPROM.get(eeAddress, f) — считывает значение типа float из EEPROM по указанному адресу и сохраняет в переменную f.
    Serial.println(f, 3) — выводит считанное значение f с точностью до трёх знаков после запятой. Если данные в EEPROM некорректны, могут появиться значения ovf (переполнение) или nan (не число).
    secondTest(); — вызывает функцию secondTest() для выполнения следующего теста.
  3. struct MyObject
    Определяет пользовательскую структуру с тремя полями:
    float field1 — число с плавающей точкой;
    byte field2 — однобайтовое целое число;
    char name[10] — массив из 10 символов (строка).
  4. void secondTest()
    Функция для чтения пользовательской структуры из EEPROM:
    int eeAddress = sizeof(float); — устанавливает адрес для чтения, смещая его на размер типа float (чтобы не перекрывать ранее считанные данные).
    MyObject customVar; — создаёт переменную для хранения структуры, считанной из EEPROM.
    EEPROM.get(eeAddress, customVar); — считывает структуру из EEPROM по указанному адресу.
    Serial.println(...) — последовательно выводит значения полей структуры (field1, field2, name) в монитор порта.
  5. void loop()
    Пустой цикл, так как после setup() программа не выполняет дополнительных действий.