Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/EEPROMGet

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Извлечение данных из 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.


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

  1. Arduino - EEPROM Get