Каталог

REMOTEXY

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

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

Редактор

Исходный код

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

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

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

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

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

Модули связи

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

Обзор исходного кода



Редактор графического интерфейса позволяет вам сформировать исходный код для микроконтроллера. Исходный код уже является полноценным кодом что бы вы могли проверить ваш графический интерфейс.

В Arduino IDE выберите вашу плату, скомпилируйте и загрузите полученный код в контроллер. Проверьте как открывается графический интерфейс в мобильном приложении. Рекомендуется проверить работоспособность интерфейса перед началом изменения кода. Далее вы можете изменять этот кода под вашу задачу.

В этом разделе рассмотрены составные части исходного кода и для чего они нужны.

Определение способа подключения

Это начальный раздел исходного кода который содержит несколько определений #define и подключение дополнительных библиотек. После этих определений подключается сама библиотека RemoteXY.h. Пример участка кода:

// можете включить вывод отладочной информации в Serial на 115200 //#define REMOTEXY__DEBUGLOG // определение режима соединения и подключение библиотеки RemoteXY #define REMOTEXY_MODE__SOFTSERIAL #include <SoftwareSerial.h> // настройки соединения #define REMOTEXY_SERIAL_RX 2 #define REMOTEXY_SERIAL_TX 3 #define REMOTEXY_SERIAL_SPEED 9600 #include <RemoteXY.h>

Первой строчкой #define REMOTEXY_MODE__XXXX определяется способ связи который будет использоваться для подключения к мобильному приложению. Способ связи выбирается в редакторе графического интерфейса. В примере кода выше устанавливается способ связи через программный последовательный порт, к которому возможно был подключен Bluetooth модуль связи. RemoteXY поддерживает множество различных способов связи и это определение может иметь разные значения.

Далее подключаются библиотеки необходимые для реализации выбранного способа связи. В примере выше подключается библиотека #include <SoftwareSerial.h>. Библиотека RemoteXY.h использует другие стандартные библиотеки для осуществления связи. В случае выбора другого способа связи вы можете увидеть подключение других библиотек.

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

В конце всех определений подключается библиотека #include <RemoteXY.h> которая будет настроена в соответствии с выше определенными параметрами.

Так же в примере есть закомментированная строчка //#define REMOTEXY__DEBUGLOG. Если ее раскомментировать, библиотека RemoteXY.h будет настроена для вывода отладочной информации в последовательный порт Seial на скорости 115200. Можно изменить направление вывода отладочной информации если это необходимо, например так:

#define REMOTEXY__DEBUGLOG #define REMOTEXY__DEBUGLOG_SERIAL Serial #define REMOTEXY__DEBUGLOG_SPEED 9600

Отладочная информация может вам пригодиться если есть трудности с установкой соединения с мобильным приложением или в других случаях.

Код графического интерфейса

Следующий раздел кода содержит массив чисел RemoteXY_CONF который однозначно определяет внешний вид и структуру данных графического интерфейса.

// конфигурация интерфейса RemoteXY #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = // 46 bytes { 255,1,0,4,0,39,0,19,0,0,0,0,31,1,106,200,1,1,2,0, 2,29,19,44,22,0,2,26,31,31,79,78,0,79,70,70,0,67,29,72, 40,10,78,2,26,2 };

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

Код вашего графического интерфейса не хранится в интернете на каком либо сервере. Он находится только в вашем контроллере в этом массиве чисел. При подключении к контроллеру мобильное приложение получит этот массив чисел, распакует его и отобразит графический интерфейс.

Строчка #pragma pack(push, 1) дает команду компилятору не приводить следующие за ней данные к разрядности контроллера. Просто не удаляйте ее.

Структура переменных

Следующий раздел кода определяет структуру переменных графического интерфейса RemoteXY. Это основная структура данных которую вы будете использовать для взаимодействия с графическим интерфейсом.

// структура определяет все переменные и события вашего интерфейса управления struct { // input variables uint8_t switch_01; // =1 если переключатель включен и =0 если отключен // output variables float value_01; // other variable uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop)

Структура содержит все переменные связанные с элементами графического интерфейса. Состав структуры и последовательность переменных строго важна. Последовательность переменных в структуре строго связана с массивом чисел RemoteXY_CONF и не может рассматриваться отдельно. Если в редакторе интерфейсов вы что то изменили и сформировали новый исходный код, вам необходимо скопировать как массив чисел RemoteXY_CONF так и структуру переменных RemoteXY вместе. Не изменяйте состав структуры, не меняйте последовательность переменных в структуре. Используйте структуру переменных так как ее сформировал редактор интерфейсов.

Строчка #pragma pack(pop) дает команду компилятору завершить приведение данных к разрядности контроллера. Просто не удаляйте ее.

Подробнее о структуре переменных.

Функция Setup

Функция setup() содержит команду инициализации библиотеки RemoteXY.h . В этой же функции размещается код инициализации вашей основной задачи, так же как это делается в обычном скетче Arduino IDE.

void setup() { RemoteXY_Init (); // TODO you setup code }

Вызов функции RemoteXY_Init (); инициализирует необходимые структуры данных для работы библиотеки.

В функции setup() вы можете провести начальную инициализацию переменных связанных с элементами графического интерфейса.

Подробнее о том что можно сделать в функции setup ().

Функция Loop

Функция loop() содержит команду вызова обработчика библиотеки RemoteXY.h . В этой же функции размещается код вашей основной задачи и взаимодействия с графическим интерфейсом. Точно так же как это делается в обычном скетче Arduino IDE.

void loop() { RemoteXY_Handler (); // TODO you loop code }

Функция RemoteXY_Handler (); циклично реализует весь функционал по обмену данными с мобильным приложением и должна вызываться достаточно часто, как минимум в каждом цикле loop ().

Подробнее о том как взаимодействовать с графическим интерфейсом в функции loop().