Управление голосом эффектное, но не очень надежное средство управления, особенно когда расстояние до объекта управления более 2 метров. Мешает затухание и реверберация звука и посторонние шумы, кроме того нужен постоянный доступ к интернету. Надежнее управление по блютус.
Для этого написаны две программы.
Одна программа, назову её «Сервер», работает на смартфоне, управляющем устройством. Сервер будет слушать канал связи, получать команды и выполнять их.
Другая, назову ее «Клиент», работает на смартфоне, который выполняет роль пульта ДУ. Клиент будет инициировать связь, формировать команду, передавать ее по блютус серверу.
Команда представляет собой текстовое сообщение. Например, “right”, а можно “r”, что должно интерпретироваться как «вправо», и означать включение привода руля вправо и маршевого двигателя вперёд на 300 миллисекунд.
Перед началом работы программ между смартфонами надо будет организовать доступ. Для этого откройте настройку, включите блютус, включите поиск доступных устройств и выберите смартфоны.
Перед запуском сервера и клиента выключайте блютус, для того чтобы ОС запрашивала разрешение на включение блютус, иначе соединение может и не создастся.
Сначала запускается программа «Сервер», после того как Вы убедитесь, что она начала слушать канал связи, запускаете Клиент и управляете устройством.
Этими программами демонстрируется только передача команд, интерпретация их в световые пятна на экране была показана в прошлой статье. Остановка работы программ производится клиентом. Если возникает необходимость остановить работу сервера непосредственно на смартфоне, нажмите три раза клавишу возврат.
Листинг программы «Сервер»
FN.DEF speak(t$)
TTS.INIT
TTS.SPEAK t$
TTS.STOP
FN.END
speak("начало работы сервера")
ONERROR:
newConnection:
BT.OPEN
speak ("Жду запрос на соединение ")
DO % ++++++++
BT.STATUS s
IF s = 1
!speak("Слушаю")
ELSEIF s =2
speak( "Соединяюсь")
ELSEIF s = 3
speak( "Соединение создано")
ENDIF
PAUSE 1000
UNTIL s = 3 % ++++++
BT.DEVICE.NAME device$
DO %---------
BT.STATUS s
IF (s<> 3)
speak( "Соединение разорвано")
GOTO new_connection
ENDIF
DO % ======
BT.READ.READY rr
IF rr
BT.READ.BYTES s$
PRINT ":";s$
s$ =mid$(s$,1,len(s$)-1)
speak(s$)
IF (s$="end") THEN GOTO xEnd
ENDIF
UNTIL rr = 0 % ======
UNTIL 0 % --------
xEnd:
speak("Сервер остановлен")
BT.CLOSE
END
Листинг программы «Клиент»
ARRAY.LOAD menucom$[], "Вперед", "Назад", "Вправо", "Влево", "Остановить клиент", "Остановить сервер"
BT.OPEN
BT.CONNECT
n = 0
DO %+++++++++++
BT.STATUS s
IF s = 1
PRINT "Слушаю, секунды: ", n++
ELSEIF s =2
PRINT "Соединяюсь, секунды: ",n++
ELSEIF s = 3
PRINT "Есть соединение"
ENDIF
PAUSE 1000
UNTIL s = 3 %+++++++++
BT.DEVICE.NAME device$
PRINT device$
PAUSE 1000
x = 0
DO %#########
SELECT menu, menuCom$[], "Выбери команду"
IF menu = 1 THEN BT.WRITE "forward"
IF menu = 2 THEN BT.WRITE "backward"
IF menu = 3 THEN BT.WRITE "right"
IF menu = 4 THEN BT.WRITE "left"
IF menu = 5 THEN x=1
IF menu = 6 THEN BT.WRITE "end"
UNTIL x=1 %#########
BT.CLOSE
END
Комментарии (13)
Tarson
13.10.2018 11:59Щас тебя за goto порвут:D
volkovfedor Автор
13.10.2018 12:17Ну, сейчас все уж забыли и Бейсик и за что его ругали.
andrew8712
13.10.2018 20:12+1Спагетти код навсегда в наших сердцах
volkovfedor Автор
13.10.2018 20:32“В настоящее время термин применяется не только к случаям злоупотребления goto, но и к любому «многосвязному» коду, в котором один и тот же небольшой фрагмент исполняется в большом количестве различных ситуаций и выполняет много различных логических функций”. Википедия. Добавлю, этот термин относится не сколько к Бейсику, сколько к особенности выражать мысль, и не только на языке программирования. И понятно, что вы шутите)
natan555
13.10.2018 12:34Выскажу предположение, что чистота языка и кирилица не всегда удобны. Как через года три искать статью? Берут сомнения, что сообразишь написать «блютус», а не bluetooth
volkovfedor Автор
13.10.2018 13:04Согласен. Более того, добавлю, что и статьи моей вряд ли кто хватится через три года. Кстати, слово Блютус, стало русским, я написал блютуз, редактор подчеркнул, я исправил и прошло.
natan555
13.10.2018 13:07+1зря недооцениваете, как по мне статьи про самоделки не имеют срока годности (ну в пределах разумного, и актуальности технологий)
DollaR84
13.10.2018 20:55+1>>> нужен постоянный доступ к интернету
есть интересный продукт cmuSphinx.
Предоставляет оффлайновое распознавание речи.
Для свободного распознавания конечно с онлайновыми сервисами ему не тягаться, но вот для ограниченного распознавания по словарю и правилам очень даже неплохо справляется.
А здесь как раз такой случай, ограниченный набор команд.
MikeVC
Управление по блютус вобще удобная штука.
Я вот сделал зарядник для тренировки свинцовых АКБ
Процесс ооочень долгий. Так вот устройство работает в кладовке а управление и контроль состояния по блютус. Через терминал и командную строку.
С планшета можно посмотреть что и как там.
volkovfedor Автор
Напишите статью, интересно было бы почитать. Или где уже есть?
MikeVC
Доделаю, испытаю на практике и напишу.
Пока испытания идут. Цикл прогона одной батарейки — несколько дней.
Выравнивание и заряд — разряд маленькими импульсными токами.