Контроллер Трекдуино имеет встроенный Bluetooth-модуль, который позволяет осуществлять программирование и обмен данными с контроллером по беспроводному протоколу Bluetooth. Самая частая задача - реализация беспроводного «пульта управления» с телефона или планшета. Для этой задачи в проекте Роботрек предусмотрно готовое решение:
«Общение» с библиотекой, обрабатывающей данные с мобильного устройства, осуществляется через общие переменные:
bluetooth_X
, bluetooth_Y
, bluetooth_Z
, bluetooth_W
, bluetooth_aX
, bluetooth_aY
, bluetooth_aZ
- переменные типа integer, в которых хранятся текущие показания осей аналоговых джойстиков ПДУ (значения от -100 до 100)
bluetooth_F1
, bluetooth_F2
, bluetooth_F3
, bluetooth_F4
, bluetooth_F5
, bluetooth_F6
- переменные типа boolean (1 или 0), в которых хранится состояние кнопок F1-F6 (1 - нажата, 0 - отпущена)
При работе в текстовом режиме эти переменные необходимо «подцепить» из библиотеки с помощью спецификатора extern
. Помимо этого в блоке Setup
необходимо выполнить команду BTinit();
, после выполнения которой переменные начнут обновляться автоматически в фоновом процессе. Таким образом, любая программа, использующая Bluetoth ПДУ, должна иметь следующую структуру:
extern int bluetooth_X, bluetooth_Y, bluetooth_Z, bluetooth_W, bluetooth_aX, bluetooth_aY,bluetooth_aZ; extern bool bluetooth_F1, bluetooth_F2, bluetooth_F3, bluetooth_F4, bluetooth_F5, bluetooth_F6; void setup() { BTinit(); //другие команды } void loop() { // ваш основной код }
Так как USB-Serial конвертер и Bluetooth-модуль общаются с основным микроконтроллером через один и тот же интерфейс (UART0), работа с Bluetooth ПДУ невозможна одновременно с USB. Даже просто при подключении питания от USB линии передачи информации UART0 переключаться с Bluetooth-модуля на USB-Serial конвертер. Таким образом, дистанционное управление контроллером через Bluetooth возможно только при питании контроллера от батареек или внешнего питания через клеммный разъем.
При работе в визуальной среде этот код генерируется автоматически при использовании любого из блоков, расположенных в группе блоков «Bluetooth ПДУ»:
Управление двумоторной тележкой с помощью двух джойстиков - вертикальная ось левого джойстика (Y) напрямую управляет скоростью левого двигателя, вертикальная ось правого джойстика (Y) напрямую управляет скоростью правого двигателя.
Состояние кнопки-переключателя F4 управляет светодиодом («фарами»), а нажатие на F1 включает на 1 секунду зуммер.
extern int bluetooth_X, bluetooth_Y, bluetooth_Z, bluetooth_W, bluetooth_aX, bluetooth_aY,bluetooth_aZ; extern bool bluetooth_F1, bluetooth_F2, bluetooth_F3, bluetooth_F4, bluetooth_F5, bluetooth_F6; void setup() { BTinit(); pinMode( OUT1 , OUTPUT ); } void loop() { startMotor(1, bluetooth_Y); startMotor(2, bluetooth_W); led ( OUT1 , bluetooth_F4 ); if (bluetooth_F1) { tone(OUT2, 440, 1000); } }