![](https://habrastorage.org/webt/jl/rn/w7/jlrnw7-motrughiznpornl4as0w.jpeg)
На картинке показана машинка, которой управляет смартфон, и ниже смартфон с работающей программой дистанционного управления по блютус.
В верхней части экрана находится ползунок (зеленый кружок), перемещаемый пальцем.
![image](https://habrastorage.org/webt/it/nh/9d/itnh9d7fdvfhsuc4dldgszcz5z4.jpeg)
При снятии пальца с экрана относительное расстояние от слайдера до левой границы экрана передается управляющему смартфону, где и формируется широтная модуляция импульсного сигнала.
GR.GET.POSITION c1, xx, yy
r6=(xx-xc)*(xx-xc)+(yy-yc)*(yy-yc)
IF r6<rkn THEN
GR.TOUCH touched, x, y
IF y < 120 THEN
DO
GR.TOUCH touched, x, y
GR.GET.POSITION c1, x1,z1
GR.MOVE c1 ,x-x1, y1
GR.RENDER
UNTIL !touched
ENDIF
GR.GET.POSITION c1, x1,z1
POPUP STR$(x1/w)
BT.WRITE "#"+STR$(x1/w)
ENDIF
Наименьшая скважность сигнала 20%, наибольшая 80%. Теоретическая возможная частота 10 Гц. На самом деле наверное около 4 — 5 Гц, поскольку сигналы на модуляцию идут в общем потоке команд и некоторые из них также имеют временную задержку. Поэтому при низкой скважности хорошо заметна вибрация.
Две зеленых кнопки — верхняя движение вперед, нижняя назад. Справа красная кнопка — стоять на месте. Две белых кнопки — остановка программ пульте ДУ и на машинке. В нижней части экрана три фиолетовых кнопки выбора направления движения влево, прямо и вправо. При
включении, соответствующего режима, в центре кнопки появляется кружок меньшего диаметра и того же, но более темного цвета. Для управления направлением движения помимо кнопок я использовал так же акселерометр. При горизонтальном положении смартфона, проекция вектора ускорения силы тяжести на ось 0Y равняется 0, что соответствует движению прямо (смотрите рисунок выше).
![](https://habrastorage.org/webt/ex/fn/ee/exfneerkircjyecmk39jqxogt3k.jpeg)
Если приподнять левую сторону смартфона то проекция будет со знаком +, что будет соответствовать движению вправо.
![](https://habrastorage.org/webt/ds/sx/8i/dssx8il0xzmlp5mjdiir7rmvj7c.jpeg)
Если приподнять правую сторону то со знаком -, что будет соответствовать движению влево.
Программа считывает показания акселерометра и отправляет соответствующие команды на смартфон управляющий автомобилем, отображая режим на кнопках.
SENSORS.READ 1, sx, sy, sz
IF (sy<=1)&(sy>-1)&(lrsh) THEN
rsh=1
lsh=1
lrsh=0
GR.HIDE cc13
GR.HIDE cc15
GR.SHOW cc17
GR.RENDER
BT.write "f"
pause 100
ENDIF
IF (sy>2)&(rsh) THEN
rsh=0
lsh=1
lrsh=1
GR.HIDE cc13
GR.HIDE cc17
GR.SHOW cc15
GR.RENDER
BT.write "r"
pause 100
ENDIF
IF (sy<-2)&(lsh) THEN
lsh=0
rsh=1
lrsh=1
GR.HIDE cc17
GR.HIDE cc15
GR.SHOW cc13
GR.RENDER
BT.write "l"
pause 100
ENDIF
Вот так работает пульт ДУ. Работа программы управления автомобилем тоже претерпела изменения, но не очень значительные. В дальнейшем я хочу дополнить программу функциями запоминания команд и выполнения их в автоматическом режиме.
Комментарии (19)
thomasR
06.11.2018 04:35+1C одной стороны это вроде всего дишь «POC», но лишать кнопочки без подписей (или глифов) не очень хорошо.
volkovfedor Автор
06.11.2018 04:50Согласен. Ну это прототип программы все-таки, кроме того там есть всплывающие подсказка popup. А создание и вставка глифов удлиннило бы создание и усложнило код. B Бейсике ведь все пишется. Поэтому я их раскрасил. Зеленое — движение. Красное — стоп.
Tsvetik
06.11.2018 10:59+1А как смартфон управляет моторчиками?
volkovfedor Автор
06.11.2018 11:06У меня всего 3 статьи в первой статье я как раз рассказываю об этом. А кратко на Самсунге работает программа, которая создает световые пятна на экране, они считываются фототранзисторами и тем самым управляют моторчиками.
Tsvetik
06.11.2018 11:20Понятно, что можно управлять исполнительными устройствами по:
1. Bluetooth/wifi
2. sms, звонками или мессенджерами, в общем через интернет или сотовоую сеть
3. инфра/ультразвуком с динамика
4. звуком с аудиовыхода
5. вибрацией
6. световыми пятнами на экране/световой модуляцией экрана
7. NFC
8. ИК порт. Везде ли он есть?
А есть ли у смартфонов более традиционные органы взаимодействия?
Скажем, до USB или до UART в порту зарядки можно достучаться программно?volkovfedor Автор
06.11.2018 11:42У меня была идея наладить связь наиболее простым способом, другими тоже можно, но задача значительно усложняется. А здесь 4 транзисторных ключа, а при желании можно расширить до любого разумного предела. Кроме того доступное средство программирования.
watti
06.11.2018 12:13такие посты без видео не считаются :(
volkovfedor Автор
06.11.2018 12:49Принимаю вашу критику. Только третьей руки у меня нет чтобы снимать, и все же постараюсь в ближайшее время выложить.
anonymous
06.11.2018 15:37Статья в Юном Технике за 89-91 года была — управление проектором с помощью ПК — тот же принцип, только фотоэлементы цепляли к телевизору:)
volkovfedor Автор
06.11.2018 15:47Да я и не претендую на авторство. В комментарии к моей 1 статье один товарищ приводит пример подобного решения для передачи информации с плашета на микропроцессор.
CKOPOCTb
Код — ад.
volkovfedor Автор
Не сложнее чем C++ или тем более Java. Не разворачивать из-за этого на компьютере андроид студию или заморачиваться с эклипсом при отладке, я же не профессиональный программист. А здесь и пишется и отлаживается прямо на смартфоне. Кроме того, здесь приведены фрагменты кода и вы поэтому просто не знаете назначение переменных и чем они управляют и поэтому кажется сложно. Но я думаю понятно, что в первом случае считывается координаты объекта на экране и определяется что-что ползунок, а затем определяется точное положение. А во втором случае я думаю вы поняли что считываются показания сенсора и по определенному алгоритму обрабатываются, чтобы определить направление движения.
CoolCmd
я думаю в первую очередь имелись ввиду зашифрованные названия переменных: lrsh, cc15, rkn. последнее название вообще за границами добра и зла. перед выкладыванием в статью можно было и причесать.
volkovfedor Автор
Да конечно надо причесать, но я не думал что кто-то будет так дотошно рассматривать. Там видно запрашивается значение координат да и ладно. Ну можно было написать RadiusKnopki или даже RadiusButton вместо rkn, но врядли было бы понятнее, все лучше понимается в контексте программы. Я медленно печатаю тем более на экранной клавиатуре смартфона и поэтому пишу сс вместо с1 или ссс вместо с3. Кнопки у меня состоят из двух кружков большого светлого и малого темного и они соответственно обозначаются обозначаются например c13 и сс13 и мне понятно что они относятся к одной фигуре. l — левый, r — правый, sh — фигура(shape) я в начале хотел сделать кнопки разно формы, потом сделал все круглые а обозначение осталось. То есть логика есть в именах, но только для меня. А вообще я согласен с замечанием.
CKOPOCTb
Я написал до форматирования.
saag
Я тоже попробовал писать на смартфоне в AIDE, после Android Studio не хватает ее системы автдополнения, конечно в AIDE кое-что есть, но не того уровня.
volkovfedor Автор
В Бейсике вообще нет автодополнения (контекстной подсказки ) так что все приходится печатать вручную. Правда я мышку использую, а Без неё вообще бы тихий ужас. Надо попробовать подключить клавиатуру.
Посмотрел сейчас что такое AIDE. И первый отзыв — нельзя сохранять проекты. Увы мне это не нравится.
saag
Что значит нельзя сохранять проекты? У меня несколько учебных проектов сохранено, я постоянно что-то дописываю, тренируюсь так сказать:-)Может это в бесплатной версии эта фича отключена, но я заплатил, там деньги небольшие, все сохраняется. Надо попробовать там такое извращение как визуальное создание макетов:-)
volkovfedor Автор
Спасибо, надо будет посмотреть. Кстати, я попробовал к смартфону подсоединить через кабель OTG разветвитель USB а через него подсоединил мышку и клавиатуру все отлично работает и вроде энергию не очень потребляют. А отзыв это не мой а там прочитал