Эта статья служит продолжением предыдущей статьи «Смартфон управляет игрушечным автомобилем» и должна помочь пользователям, решившим повторить проект, управлять своим устройством с помощью блютус, используя среду программирования BASIC!..

Управление голосом эффектное, но не очень надежное средство управления, особенно когда расстояние до объекта управления более 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)


  1. MikeVC
    13.10.2018 11:46

    Управление по блютус вобще удобная штука.
    Я вот сделал зарядник для тренировки свинцовых АКБ
    Процесс ооочень долгий. Так вот устройство работает в кладовке а управление и контроль состояния по блютус. Через терминал и командную строку.
    С планшета можно посмотреть что и как там.


    1. volkovfedor Автор
      13.10.2018 12:01

      Напишите статью, интересно было бы почитать. Или где уже есть?


      1. MikeVC
        13.10.2018 13:17

        Доделаю, испытаю на практике и напишу.
        Пока испытания идут. Цикл прогона одной батарейки — несколько дней.
        Выравнивание и заряд — разряд маленькими импульсными токами.


  1. Tarson
    13.10.2018 11:59

    Щас тебя за goto порвут:D


    1. volkovfedor Автор
      13.10.2018 12:17

      Ну, сейчас все уж забыли и Бейсик и за что его ругали.


      1. andrew8712
        13.10.2018 20:12
        +1

        Спагетти код навсегда в наших сердцах


        1. volkovfedor Автор
          13.10.2018 20:32

          “В настоящее время термин применяется не только к случаям злоупотребления goto, но и к любому «многосвязному» коду, в котором один и тот же небольшой фрагмент исполняется в большом количестве различных ситуаций и выполняет много различных логических функций”. Википедия. Добавлю, этот термин относится не сколько к Бейсику, сколько к особенности выражать мысль, и не только на языке программирования. И понятно, что вы шутите)


  1. natan555
    13.10.2018 12:34

    Выскажу предположение, что чистота языка и кирилица не всегда удобны. Как через года три искать статью? Берут сомнения, что сообразишь написать «блютус», а не bluetooth


    1. volkovfedor Автор
      13.10.2018 13:04

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


      1. natan555
        13.10.2018 13:07
        +1

        зря недооцениваете, как по мне статьи про самоделки не имеют срока годности (ну в пределах разумного, и актуальности технологий)


        1. volkovfedor Автор
          13.10.2018 13:29

          Спасибо! Растрогался даже и плюсанул)


    1. tormozedison
      13.10.2018 19:23

      Раньше была буква «фита».


  1. DollaR84
    13.10.2018 20:55
    +1

    >>> нужен постоянный доступ к интернету
    есть интересный продукт cmuSphinx.
    Предоставляет оффлайновое распознавание речи.
    Для свободного распознавания конечно с онлайновыми сервисами ему не тягаться, но вот для ограниченного распознавания по словарю и правилам очень даже неплохо справляется.
    А здесь как раз такой случай, ограниченный набор команд.