Этот пример иллюстрирует связь с кирпичом Lego Mindstorms NXT использование текстовых команд, отправленных по Профилю Последовательного порта Bluetooth.
Перед подготовкой связи в MATLAB кирпич NXT должен быть соединен с вашим компьютером. Если это сделано, устройство будет видимо в MATLAB.
Чтобы получить список всех доступных bluetooth-устройств используют команду instrhwinfo
. Получите "дружественные" имена bluetooth-устройств доступное использование поля RemoteNames
от вывода instrhwinfo
.
bluetoothDevices = instrhwinfo('Bluetooth')
remoteNames = bluetoothDevices.RemoteNames
bluetoothDevices = RemoteNames: {'NXT'} RemoteIDs: {'btspp://00165310E7C4'} BluecoveVersion: 'BlueCove-2.1.1-SNAPSHOT' JarFileVersion: 'Version 3.2' remoteNames = 'NXT'
Получите детали кирпича NXT.
deviceInfo = instrhwinfo('Bluetooth','NXT')
deviceInfo = RemoteName: 'NXT' RemoteID: 'btspp://00165310E7C4' ObjectConstructorName: {'Bluetooth('NXT', 1);'} Channels: {'1'}
RemoteName
устройства является NXT
, и его Channel
является 1
. Создайте объект Bluetooth, названный bt
как показано ObjectConstructorName
на предыдущем шаге.
bt = Bluetooth('NXT', 1);
Теперь соединитесь с устройством.
fopen(bt);
Таблица данных Lego Mindstorms задает протокол для связи с кирпичом NXT. Это указывает, что, чтобы получить информацию об устройстве, команда должна иметь следующий формат:
Байты 1:2 - Продолжительность команды
Байт 3 - Тип команды
Байт 4 - Дополнительная информация, чтобы выполнить команду
Используя эту информацию, формируется пакет необработанных данных, который отправляется в кирпич NXT.
Байты 1:2 - Продолжительность команды = 2
Байт 3 - Тип команды = 1 (поскольку это - системная команда с ответом от устройства),
Байт 4 - 0x9B (Это значение задано протоколом связи Lego Mindstorms NXT),
Это переводит пакет необработанных данных, чтобы быть: [2 0 1 155]
. Запишите эти данные в кирпич.
fwrite(bt,[2 0 1 155]);
Устройство затем дает ответ, содержащий информацию об устройстве. Ответ имеет следующий формат:
Байты 1:2 - Продолжительность ответа
Байт 3 - Тип данной команды
Байт 4 - Данные, отправленные в устройство
Состояние Byte 5 - Command
Байты 6:20 - Имя устройства (14 символов + пустой терминатор строки)
Байты 21:27 - адрес Bluetooth
Байт 28 - LSB Bluetooth сигнализирует о силе
Байт 29 - Не заданный
Байт 30 - Не заданный
Байт 31 - MSB Bluetooth сигнализирует о силе
Байт 32 - LSB пользовательской флэш-памяти
Байт 33 - Не заданный
Байт 34 - Не заданный
Байт 35 - MSB пользовательской флэш-памяти
Теперь считайте ответ из кирпича, чтобы получить его информацию
btResponse = fread(bt,32)'
btResponse = Columns 1 through 13 33 0 2 155 0 78 88 84 0 0 0 0 0 Columns 14 through 26 0 0 0 0 0 0 0 0 22 83 16 231 196 Columns 27 through 32 0 0 0 0 0 132
В этом примере ответ от кирпича NXT:
Байты 1:2 - Продолжительность ответа = 33
Байт 3 - Тип команды, данной = 2
Байт 4 - Данные, отправленные в устройство = 0x9B
Состояние Byte 5 - Command = 0 (команда была успешна),
Байты 6:20 - Имя устройства (14 символов + пустой терминатор строки)
Байты 21:27 - адрес Bluetooth
Байт 28 - LSB Bluetooth сигнализирует о силе = 0
Байт 29 - Не заданный = 0
Байт 30 - Не заданный = 0
Байт 31 - MSB Bluetooth сигнализирует о силе = 0
Байт 32 - LSB пользователя высвечивается = 0
Байт 33 - Не заданный = 0
Байт 34 - Не заданный = 0
Байт 35 - MSB пользователя высвечивается = 132
Позвольте нам теперь только для чтения имя кирпича от его ответа. Мы знаем, что байты 6 - 20 соответствуют имени кирпича.
btName = char(btResponse(6:20))
btName = NXT
Очистите буфер объекта Bluetooth
flushinput(bt);
Давайте теперь проигрывать тон на частоте 1 500 Гц для 1 000 мс на кирпиче. Lego Mindstorms NXT прямые команды задает команду, чтобы проигрывать тон на кирпиче можно следующим образом:
Байты 1:2 - Продолжительность команды
Байт 3 - Тип команды
Байт 4 - Идентификатор сообщения
Байты 5:6 - Частота тона в Гц
Байты 7:8 - Длительность тона в мс
В этом примере пакет необработанных данных формируется можно следующим образом:
Байт 1:2 - Продолжительность команды = 6
Байт 3 - Тип команды = 0 (поскольку это - прямая команда с ответом от устройства),
Байт 4 - Идентификатор сообщения = 3
Байты 5:6 - Частота тона составляет 1500 Гц, который переводит в uint8 [220 5]
Байты 7:8 - Длительность тона составляет 1 000 мс, который переводит в uint8 [232 3]
Следовательно командой, которая будет записана в кирпич, является [6 0 0 3 220 5 232 3]
.
fwrite(bt,[6 0 0 3 220 5 232 3]);
В дополнение к аудио тону, проигрываемому на кирпиче NXT, устройство также дает 5-байтовый ответ. Давайте теперь считаем ответ из кирпича. Ответ имеет следующий формат:
Байт 1:2 - Продолжительность ответа
Байт 3 - Тип данной команды
Байт 4 - Идентификатор сообщения
Байт 5 - Байт состояния
btResponse = fread(bt,5)'
btResponse = 3 0 2 3 0
В этом примере ответ от кирпича NXT:
Байт 1:2 - Продолжительность ответа = 3
Байт 3 - Тип команды, данной = 2
Байт 4 - Идентификатор сообщения = 3
Байт 5 - Байт состояния = 0 (команда была успешна),
fclose(bt);
delete(bt);
clear('bt');
Можно получить больше информации о связи с Lego Mindstorms NXT с помощью команд высокого уровня здесь.