Arduino:Примеры/EEPROMPut

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

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


Запись данных в EEPROM с помощью функции EEPROM.put()[1]

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

Цель этого примера – показать, как работает функция EEPROM.put(). Она использует тот же метод, что и EEPROM.update(), т.е. делает перезапись лишь в том случае, если новые данные, записываемые в указанную ячейку, отличаются от предыдущих. Количество записываемых байтов зависит от типа данных, помещенных в объект (будь то переменная или пользовательский объект).

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

  • Плата Arduino или Genuino

Цепь

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

Схема

Код

/***
    Пример eeprom_put

    Этот пример показывает, как использовать функцию EEPROM.put(). 
    Также он подготавливает EEPROM-данные для примера eeprom_get. 

    В отличие от функции EEPROM.write(), EEPROM.put() может
    оперировать не одним, а несколькими байтами. Кроме того, она
    работает по принципу EEPROM.update() и делает перезапись только
    в том случае, если новые данные отличаются от предыдущих. 

    Автор – Кристофер Эндрюс (Christopher Andrews), 2015 год.
    Выпущено под лицензией MIT.
***/

#include <EEPROM.h>

struct MyObject {
  float field1;
  byte field2;
  char name[10];
};

void setup() {

  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта (нужно только для Arduino со штатным USB-портом)
  }

  float f = 123.456f;  // переменная для записи в EEPROM-память
  int eeAddress = 0;   // участок EEPROM-памяти, куда будет выполнена запись


  // далее – один простой вызов функции EEPROM.put();
  // первый аргумент – адрес, второй – объект:
  EEPROM.put(eeAddress, f);

  Serial.println("Written float data type!"); // "float-данные, записанные в EEPROM-память: "

  /** функцию EEPROM.put() можно использовать и для пользовательских объектов **/

  // данные, которые будем записывать:
  MyObject customVar = {
    3.14f,
    65,
    "Working!" 
  }; // "Работает!"

  eeAddress += sizeof(float);  // перемещаемся к участку EEPROM-памяти, находящемуся вслед за тем, где хранится переменная «f»

  EEPROM.put(eeAddress, customVar);
  Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!"); // "Данные пользовательского типа записаны! \n\nО том, как извлечь эти данные, смотрите в скетче-примере eeprom_get"
}

void loop() {
  /* пустой цикл */
}


См.также

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

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