Введение
Здравствуйте, глубокоуважаемые хабрачане! В первой статье мы рассмотрели в общих чертах программирование в платформе MRDS на примере набора NXT. В данной статье мы узнаем, как управлять непосредственно микрокомпьютером NXT. Напишем несколько простых приложений, демонстрирующих «общение» на программном уровне с управляющим блоком NXT, заставим издавать NXT звуки (приличные и не очень), реагировать на нажатие клавиш, узнаем сколько осталось жить вашему NXT.
Для управления микрокомпьютером NXT предусмотрено четыре сервиса: LegoNXTBrick, LegoNXTButtons, LegoNXTBattery, LegoBrickIO (рис. 1).
Рисунок 1 — Сервисы для взаимодействия с блоком NXT
Сервис LegoNXTBrick
Для данного сервиса предусмотрены следующие операции:
- Connect to hardware/Disconnect from hardware-подключение/отключение NXT;
- Get-получить состояние NXT;
- Internal adjust device polling frequency-установка частоты опроса датчиков;
- Internal detach device-программное отключение датчика;
- Internal reserve device port-назначение этой операции осталось не выясненным, судя из названия это операция резервирования портов;
- Internal sensor update-исходя из названия обновление информации о датчиках;
- play tone-воспроизведение звукового сигнала определенной длительности и частоты;
- send raw command-отправка низкоуровневых команд в формате используемом NXT, с помощью данной операции нам доступны все команды которые используются в блоке NXT.
Операция Connect to hardware/Disconnect from hardware-программное подключение/отключение управляющего блока NXT. Используя данную операцию, можно в логике программы определять параметры подключения (COM-порт, частота передачи данных, тип подключения). То же самое можно выполнить задав конфигурацию сервиса (Set initial configuration в окне Properties), но эти параметры нельзя будет изменить в ходе работы приложения (например, если мы захотим подключиться к другому NXT блоку, или поменять частоту передачи данных). Для демонстрационного примера, напишем приложение которое будет осуществлять подключение к блоку NXT, а если подключение выполнено успешно, то соединение разрывается через 10 секунд.
Добавим необходимые блоки и сервисы (рис. 2), введем значения в Data и Join, и начинаем последовательно соединять элементы в диаграмму. При подключении блока Join к сервису LegoNXTBrick необходимо, в появившемся окне выбрать ConnectToHardware. В следующем окне определить значения данных передаваемых в сервис. Далее соединяем сервис LegoNXTBrick с блоком Data, в появившемся окне выбираем ConnectToHardware-Success (это будет означать, что при удачном выполнении соединения программа будет выполняться дальше в соответствие с диаграммой). Далее соединяем блок Data с сервисом Simple Dialog (в этом месте делаем по уже знакомой схеме из первой статьи). Соединяем Simple Dialog с сервисом Timer, в появившемся окне выбираем в левой колонке-AlertDialog-Success, в правой колонке-SetTimer, в следующем окне ставим галочку Edit values directly (такой прием можно использовать во всех сервисах, что бы не применять блок Data) и в поле Interval вводим 10000, что будет соответствовать 10 секундам, т.к. в VPL единица времени миллисекунда. Таким образом мы указали программе, что после успешного установления соединения выводится окно с надписью ConnectSuccess и кнопкой OK, а после нажатия этой кнопки срабатывает таймер и отсчитывает 10 секунд. Далее, создадим часть диаграммы, которая будет разрывать соединение по истечению таймера. Скопируем сервисы Timer, Simple Dialog иLegoNXTBrick. Соединим Timer с LegoNXTBrick, но теперь соединять будем круглый разъем Timer с разъемом NXT. В появившемся окне выберем в левой колонке-TimerComplete, а в правой DisconnectFromHardware. Далее соединим получившуюся конструкцию с SimpleDialog, таким образом, чтобы при удачном разрыве соединения, у нас появлялось окно с кнопкой OK и надпись DisconnectSuccess. Программа готова. Главное проверьте какой номер COM-порта выделил компьютер для соединения с NXT, этот номер и надо использовать в блоке Data. Номер порта можно проверить в настройках Bluetooth в панели управления.
Рисунок 2 — Готовая диаграмма
Операция Get-получить состояние микрокомпьютера. С помощью этой операции мы можем просмотреть информацию об версии ПО NXT, Bluetooth-имя NXT, состояние соединения (подключен, отключен), а так же параметры соединения. Продемонстрируем вышесказанное на примере.
Добавим необходимые блоки и сервисы (рис. 3). Соединим их последовательно. Не забываем, что при соединении сервисов Simple Dialog и LegoNXTBrick нам необходимо выбрать Get. Далее соединяем сервис LegoNXTBrick с блоками Calculate, в появившемся окне выбираем Get-Success. Соединяем блоки Calculate с Simple Dialog, во втором появившемся окне выбираем значение value.
Рисунок 3 — Готовая диаграмма
Операция Play Tone-воспроизводит звук заданной частоты и длительности в динамике NXT. Продемонстрируем это на простом примере (рис. 4). Делаем все по аналогии с предыдущими примерами из этой и предыдущей статей.
Рисунок 4 — Готовая диаграмма
Сервис LegoNXTButtons
Данный сервис обрабатывает события при нажатии кнопок на блоке NXT.
Продемонстрируем возможности сервиса на следующем примере (рис. 5). При нажатие кнопок на блоке NXT, мы будем получать соответствующие сообщения. Обратите внимание, как соединен сервис LegoNXTButtons, мы соединяем его через круглый разъем нотификаций. Через данный разъем отправляются сообщения, при каждом изменении состояния кнопок на блоке NXT. Такой разъем есть почти в каждом сервисе, но подробнее о его назначении мы поговорим в следующих статьях.
Рисунок 5 — Готовая диаграмма
Сервис LegoNXTBattery
Сервис определяет состояние элемента питания. Узнаем заряд батареи вашего NXT. Создадим простую диаграмму (рис. 6).
Рисунок 6 — Готовая диаграмма
В данной статье приведены не все операции сервисов, т.к. для описания всего и вся потребовалось бы много времени, но основные моменты изложены, оставив читателям возможность проявить исследовательские навыки.
Автор: alfatapok