| Ваш IP: 3.239.7.207 | Online(25) - гости: 9, боты: 16 | Загрузка сервера: 3.76 ::::::::::::

EEPROM.put (Arduino)

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

При записи данных в EEPROM размер которых превышает 1 байт, необходимо корректный расчет адресов по которым будет производится запись, для расчета адресов используется функция sizeof(). Для чтения используется функция EEPROM.get(), для нее так же необходимо пользоваться функцией sizeof()  для определения точных адресов при считывании информации.

Пример использования:

#include <EEPROM.h>                      

int address = 0;// Начальный адресс ячейки памяти 

unsigned long value1 = 44446587; // Переменная 1 типа unsigned long
long value2 = 65678; // Переменная 2 типа  long
float value3 = 1.5678; // Переменная 3 типа float

void setup() {
  Serial.begin(9600);

  EEPROM.put(address, value1);// Запись переменной 1

 // Для вычисления следующего доступного адреса, необходимо получить объем памяти,отведенной под предыдущее значение
  
  address = address + sizeof(unsigned long);// Указываем тип данных предыдущего значения
  EEPROM.put(address, value2);// Запись переменной 2
  
  address = address + sizeof(long);// Указываем тип данных предыдущего значения
  EEPROM.put(address, value3);// Запись переменной 3
  
  // Чтение данных из EEPROM
  address = 0;// Переходим на начальный адрес
  EEPROM.get(address, value1);
  address = address + sizeof(unsigned long);
  EEPROM.get(address, value2);
  address = address + sizeof(long);
  EEPROM.get(address, value3);

  Serial.println( value1);
  Serial.println( value2);
  Serial.println( value3,4);
}

void loop() {}

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

Для записи в энергонезависимую память функция EEPROM.put() использует функцию EEPROM.update(), таким образом, функция не перезапишет данные, если они не изменились, тем самым сэкономит циклы перезаписи.

При записи в EEPROM пользовательских данных типа char можно пользоваться следующим примером:

#include <EEPROM.h>                      

int address = 0;// Начальный адресс ячейки памяти 


float value3 = 1.5678; 
char value4[7] = "Privet";

void setup() {
  Serial.begin(9600);
  
  EEPROM.put(address, value3);

  address = address + sizeof(float);// Указываем тип данных предыдущего значения
  
  EEPROM.put(address, value4);
  
  // Чтение данных из EEPROM
  address = 0;// Переходим на начальный адрес
 
  EEPROM.get(address, value3);
  address = address + sizeof(float);
  EEPROM.get(address, value4);

  Serial.println( value3,4);
  Serial.println(String(value4));
}

void loop() {}

На примере видно, что данные типа char нужно использовать как массив, а для считывания использовать String.

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Бестрансформаторный источник питания 12 В / 15 мА

    Бестрансформаторный источник питания 12 В / 15 мА

    Некоторые схемы которые имеют небольшой ток потребления, поэтому для их работы можно использовать простые бестрансформаторные источники питания. В подобных источниках питания целесообразно использовать диодный мост, для увеличения величины выходного тока и меньшей пульсации выходного напряжения, что позволяет использовать конденсаторный фильтр меньшей емкости. Поэтому в предложенной схеме VD3 VD4 используются как …Подробнее...
  • Секундомер на ATtiny2313 (Arduino IDE)

    Секундомер на ATtiny2313 (Arduino IDE)

    На базе ATtiny2313 можно собрать простой секундомер. Информация выводится на дисплей LCD1602. Для управления секундомером используются три кнопки — СТАРТ, СТОП, СБРОС. Минимальный шаг секундомера 0,1 секунда, максимальное время измерения 24 часа. Кнопки СТОП и СТАРТ работают через прерывания IN0 и INT1 (пример — https://rcl-radio.ru/?p=94273), время тактируется при помощи таймера …Подробнее...
  • Часы-будильник на PIC16F877A

    Часы-будильник на PIC16F877A

    На рисунке показана схема часов с будильником. Часы отображают часы, минуты и секунды, будильник только часы и минуты. Дополнительной опцией часов является термометр, датчик температуры LM35 подключен к выводу 9 (AN6) микроконтроллера. После подачи питания на микроконтроллер необходимо установить правильное время, сделать это можно при помощи кнопки «Установка времени», при …Подробнее...
  • Автоматическая регулировка усиления

    Автоматическая регулировка усиления

    Автоматическая регулировка усиления  (АРУ) регулирует выходной сигнал в определенных пределах, при разном уровне входного сигнала.В результате устраняются различия громкости, которые могут раздражать, при смене каналов радиоприемника, телевизора… Полевой транзистор VT1 используется как переменное сопротивление. Это значение может  от бесконечности до 150Ω, тем самым регулируя усиление ОУ на TL072.Подробнее...
  • Регулируемый блок питания с цифровым управлением

    Схема регулируемого блока питания м цифровым управлением состоит из регулятора положительного напряжен7ия на KM317, КПОМ декадного счетчика CD4017, таймера NE555 и регулятора отрицательного напряжения на LM7912. Напряжение сети понижается трансформатором до напряжения +/-12В при токе 1А во вторичной обмотке, далее оно выпрямляется. С1-С5 емкостной фильтр постоянного напряжения. Светодиод LED1 сигнализирует …Подробнее...