Каталог

REMOTEXY

Быстрый старт

Способы связи

Редактор

Исходный код

Библиотека RemoteXY.h

Элементы управления

Элементы индикации

Системные элементы

Элементы оформления

Модули связи

Как перенести интерфейс в IDE FLProg

EEPROM



Графический интерфейс может использовать энергонезависимую память контроллера EEPROM в некоторых случаях. К таким случаям относятся:

  • если для переменных интерфейса в онлайн-редакторе установлен признак сохранения в EEPROM, такие переменные будут автоматически добавлены для сохранения в EEPROM и восстанавливаться при старте;
  • для любых переменных которые вы вручную добавите, они будут автоматически сохраняться в EEPROM и восстанавливаться при старте;
  • при использовании уведомлений, при этом в EEPROM сохраняется уникальный идентификатор контроллера и другие данные.

Библиотека RemoteXY автоматически будет отслеживать изменение переменных, и если переменная изменяется, она автоматически, без вашего участия сохранится в EEPROM. При старте контроллера переменная восстановится из EEPROM.

Для работы с энергонезависимой памятью контроллера RemoteXY использует библиотеку EEPROM.h. Что бы RemoteXY начал использовать EEPROM, достаточно включить библиотеку EEPROM.h перед включением библиотеки remotexy.h :

#include <EEPROM.h> #include <RemoteXY.h>

ВНИМАНИЕ. На текущий момент RemoteXY работает только с библиотекой EEPROM.h. Если для контроллера не существует этой библиотеки, не получится использовать функции сохранения данных в энергонезависимую память. Доработка библиотеки для таких контроллеров появится позже.

Конфигурирование работы EEPROM состоит из следующих этапов:

  • Добавьте переменные. Необходимо указать какие данные будут сохраняться в EEPROM. Пропустите этот шаг если вы используйте онлайн-редактор что бы указать какие переменные графического интерфейса сохранять в EEPROM, эти переменные будут добавлены автоматически. Так же автоматически будут добавлены другие переменные необходимые для RemoteXY, например идентификатор платы если используются уведомления.
  • Присвойте начальные значения. Присвойте переменным начальные значения, которые будут применены если данные в EEPROM окажутся не верными, например при первом запуске или изменении состава переменных.
  • Выделите память если это необходимо. По умолчанию будет использована необходимое количество памяти начиная с адреса 0. Но вы можете это изменить. На контроллерах ESP память необходимо выделить обязательно.
  • Инициализируйте EEPROM если вам требуется использовать данные из EEPROM в функции setup(). Если это не требуется, инициализация произойдет автоматически при первом вызове RemoteXYEngine.handler().

Добавление переменных

Добавьте переменные которые должны сохраняться в EEPROM используя функции перечисленные ниже. Вы можете добавить любые ваши переменные.

Внимание. Переменные из графического интерфейса, для которых установлен признак сохранения в EEPROM будут добавлены автоматически, вам не нужно добавлять их. Так же автоматически будут добавлены другие переменные необходимые для RemoteXY, например идентификатор платы если используются уведомления.

RemoteXYEngine.addToEeprom (*variable, size, key) - добавляет переменную указанной длины size для сохранения в EEPROM.

RemoteXYEngine.addToEeprom (variable, key) - добавляет переменную стандартного типа для сохранения в EEPROM.

В приведенных функциях параметр key это любой номер который будет считаться уникальным для переменной. Если вы измените key для какой либо переменной, то все данные в EEPROM будут считаться не верными и не будут прочитаны при старте.

Важна последовательность добавления переменных. Если изменить последовательность, то все данные в EEPROM будут считаться не верными. Если добавить новую или удалить переменную, все данные в EEPROM будут считаться не верными.

int myInt; char[20] myChars; void setup() { RemoteXY_Init (); RemoteXYEngine.addToEeprom (myInt, 1); RemoteXYEngine.addToEeprom (myChars, 20, 2); }

Присвоение начальных значений

Присвойте начальные значения переменным которые будут сохраняться в EEPROM. Если данные в EEPROM окажутся не верными, начальные значения не будут заменены. Таким образом, например при первом запуске, в переменных будут нужные значения. Присвоить начальные значения можно до добавления переменных в EEPROM.

Вам так же нужно установить первоначальные значения для переменных графического интерфейса из структуры RemoteXY для которых вы установили признак сохранения в EEPROM в онлайн редакторе.

int myInt = 20; void setup() { RemoteXY_Init (); RemoteXYEngine.addToEeprom (myInt, 1); RemoteXY.edit_01 = 20; }

Выделение памяти EEPROM

Библиотека remotexy.h полностью самостоятельно производит работу с EEPROM и обычно не требуется добавлять какой либо дополнительный код. Однако в случаях если вы используете библиотеку EEPROM.h для собственных нужд, вам потребуется настройка что бы избежать конфликта адресов.

Если вы используете контроллер ESP в котором необходимо явно выделить память при помощи функции begin(), это нужно сделать запросив у RemoteXY размер необходимой памяти.

  • uint16_t RemoteXYEngine.getEepromSize () - получить количество ячеек памяти EEPROM необходимое для работы RemoteXY;
  • RemoteXYEngine.setEepromOffset (uint16_t offset) - установить адрес первой ячейки памяти EEPROM для RemoteXY, если функция не вызывается RemoteXY разместит данные начиная с ячейки с адресом 0;
  • int8_t RemoteXYEngine.initEeprom () - инициализировать EEPROM. Возвращает 1 если инициализация прошла успешно. Функцию можно не вызывать, она автоматически будет вызвана при первом вызове RemoteXYEngine.handler ().

Используйте функцию RemoteXYEngine.getEepromSize () , она вернет сколько ячеек EEPROM зарезервировано для RemoteXY. По умолчанию RemoteXY размещает свои данные в EEPROM начиная с адреса 0.

Для контроллеров ESP эта функция вернет размер памяти для вызова функции begin().

void setup() { RemoteXY_Init (); RemoteXY.edit_01 = 20; EEPROM.begin (RemoteXYEngine.getEepromSize ()); }

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

int myEepromSize = 45; void setup() { RemoteXY_Init (); RemoteXY.edit_01 = 20; EEPROM.begin (myEepromSize + RemoteXYEngine.getEepromSize ()); RemoteXYEngine.setEepromOffset (myEepromSize); }

Инициализация EEPROM

Библиотека remotexy.h восстанавливает данные из EEPROM в момент вызова функции RemoteXYEngine.initEeprom () . Если функция не вызывается явно, тогда она будет вызвана автоматически когда вы вызовите функцию RemoteXYEngine.handler () в первый раз.

При вызове RemoteXYEngine.initEeprom () будет проверена валидность данных в EEPROM. Если данные валидны, то все добавленные переменные будут обновлены значениями из EEPROM. Если данные ошибочны, то значения переменных останутся неизменными как вы их инициализировали. Далее библиотека начнет автоматически отслеживать изменение данных в добавленных переменных каждый раз когда вы вызываете RemoteXYEngine.handler(). При обнаружении измененного значения данные будут записаны в EEPROM.

Что бы в функции setup () получить доступ к значениям переменных прочитанным из EEPROM, необходимо явно вызвать RemoteXYEngine.initEeprom (). Если вам не нужны значения переменных прямо в setup () , вы можете не делать инициализацию.

void setup() { RemoteXY_Init (); RemoteXY.setPump = 20; EEPROM.begin (RemoteXYEngine.getEepromSize ()); RemoteXYEngine.initEeprom (); // now the values have been loaded from EEPROM Serial.begin(9600); Serial.println (RemoteXY.setPump); }