Arduino:Примеры/EEPROMGet

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Извлечение данных из EEPROM с помощью функции EEPROM.get()[1]

Микроконтроллер на плате Arduino/Genuino имеет, как правило, 512 байт EEPROM-памяти (у моделей Uno и Mega ее объем составляет 1 Кб и 4 Кб соответственно) – она хранит информацию, даже если плата находится в выключенном состоянии. Другими словами, это что-то вроде крошечного жесткого диска.

Цель этого урока – на практике продемонстрировать, чем функции EEPROM.get() и EEPROM.put() отличаются от EEPROM.read() и EEPROM.write(). Последние две могут оперировать не одним, а несколькими байтами, и их количество зависит от типа данных, которые хранятся в обрабатываемой переменной.

Необходимое оборудование

  • Плата Arduino или Genuino

Цепь

Для этого примера никакой цепи строить не нужно.

ArduinoUNO bb.png

Схема

ArduinoUNO sch.png

Код

 1 /***
 2     Пример eeprom_get 
 3 
 4     Этот пример показывает, как использовать функцию EEPROM.get().
 5 
 6     Чтобы подготовить EEPROM-память к этому скетчу, сначала запустите 
 7     скетч-пример eeprom_put. 
 8 
 9     Впрочем, eeprom_get можно запустить и без eeprom_put, но будьте 
10     готовы к тому, что в мониторе порта будут отображены не очень
11     смотрибельные данные (это «сырые» данные, которые уже хранятся 
12     в EEPROM-памяти).
13 
14     К примеру, EEPROM.get() может вернуть очень длинную строку 
15     мусорных данных (если в этих строках нет нуля).
16 
17     Автор – Кристофер Эндрюс (Christopher Andrews), 2015 год.
18     Выпущено под лицензией MIT.
19 ***/
20 
21 #include <EEPROM.h>
22 
23 void setup() {
24 
25   float f = 0.00f;   // переменная для хранения данных, считанных из EEPROM-памяти
26   int eeAddress = 0; // участок EEPROM-памяти, с которого будет начато считывание
27 
28   Serial.begin(9600);
29   while (!Serial) {
30     ; // ждем подключения последовательного порта (нужно только для Arduino со штатным USB-портом)
31   }
32   Serial.print("Read float from EEPROM: "); // "float-данные, извлеченные из EEPROM-памяти: "
33 
34   // Извлекаем из EEPROM-памяти float-данные, находящиеся по адресу «eeAddress»:
35   EEPROM.get(eeAddress, f);
36   Serial.println(f, 3);    // если извлеченные данные не будут соответствовать типу float, эта функция может вернуть фразу «ovf, nan» 
37 
38   /***
39     Поскольку EEPROM.get() также возвращает отсылку к «f», всю эту конструкцию можно уместить в одной строке:
40     E.g: Serial.print( EEPROM.get( eeAddress, f ) );
41   ***/
42 
43   /***
44     Эту функцию можно использовать и с пользовательскими объектами. 
45     Я решил продемонстрировать это в отдельной функции.
46   ***/
47 
48   secondTest(); // запускаем следующий тест
49 }
50 
51 struct MyObject {
52   float field1;
53   byte field2;
54   char name[10];
55 };
56 
57 void secondTest() {
58   int eeAddress = sizeof(float); // перемещаемся к участку EEPROM-памяти, находящемуся вслед за тем, где хранится переменная «f»
59 
60   MyObject customVar; // переменная для хранения данных пользовательского объекта, извлеченных из EEPROM-памяти
61   EEPROM.get(eeAddress, customVar);
62 
63   Serial.println("Read custom object from EEPROM: "); // "Данные пользовательского объекта, извлеченные из EEPROM-памяти: "
64   Serial.println(customVar.field1);
65   Serial.println(customVar.field2);
66   Serial.println(customVar.name);
67 }
68 
69 void loop() {
70   /* пустой цикл */
71 }

См.также

  1. EEPROM.get()
  2. EEPROM library reference
  3. EEPROM Clear - Fills the content of the EEPROM memory with “0”.
  4. EEPROM Read – Reads values stored into EEPROM and prints them on Serial.
  5. EEPROM Write – Stores values read from A0 into EEPROM.
  6. EEPROM Crc – Calculates the CRC of EEPROM contents as if it was an array.
  7. EEPROM Iteration – Programming examples on how to go through the EEPROM memory locations.
  8. EEPROM Put – Put values in EEPROM using variable semantics (differs from EEPROM.write() ).
  9. EEPROM Update – Stores values read from A0 into EEPROM, writing the value only if different, to increase EEPROM life.


Внешние ссылки