PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Софт (http://pccar.ru/forumdisplay.php?f=172)
-   -   Serial Manager - автоматизация/управление Android с помощью Arduino (http://pccar.ru/showthread.php?t=24120)

Az0m@ 01.07.2016 23:33

подскажите...а кто нибудь пробывал резистивные кнопки на руле прикрутить с помощью этой проги?

ali_vlad 02.07.2016 07:52

Цитата:

Сообщение от Az0m@ (Сообщение 363871)
подскажите...а кто нибудь пробывал резистивные кнопки на руле прикрутить с помощью этой проги?

Э, как бэ нужен сначала адаптер, который обработает нажатие кнопки и выдаст команду. Адаптер может быть как готовый, например от Юры, так и самодельный из ардуины. Главное выдать команду, а эта прога уже обработает команду и совершит какое-то действие: запустит приложение, отобразит уведомление.

Az0m@ 03.07.2016 00:06

Цитата:

Сообщение от ali_vlad (Сообщение 363884)
Э, как бэ нужен сначала адаптер, который обработает нажатие кнопки и выдаст команду. Адаптер может быть как готовый, например от Юры, так и самодельный из ардуины. Главное выдать команду, а эта прога уже обработает команду и совершит какое-то действие: запустит приложение, отобразит уведомление.

хотел использовать метод из данной описания:
http://pccar.ru/showpost.php?p=248366&postcount=72
но описанный вариант смущает тем что при подключенной арудине не будет работать экранная клава

vasilij_c 03.07.2016 00:27

Цитата:

Сообщение от Az0m@ (Сообщение 363914)
.. смущает тем что при подключенной арудине не будет работать экранная клава

давно решена эта проблема. ставишь сторонюю раскладку для клавы (типа такой MultilanguageKeymapRedefiner), в настройках программы включаешь "показывать экранную клавиатуру"

lti1 03.07.2016 00:33

Az0m@, Экранная клавиатура будет скрываться если если Arduino будет настроено как HID клавиатура, при использовании Serial Manager это не нужно, просто закомментируйте или удалите строку Keyboard.begin(); в скетче.

djdonatas 06.07.2016 17:13

С пылу с жару, прототип %)
Управление штатным климатом в лехусе.
зы: иконки перепутал и пока только 2 кнопки, но это все дело техники и времени, главное, что все подружилось и заработало %)
v4 контроллер от Юры + Serial Manager от DelleTenebre + таскер + оболочка от меня)

Пока все собирается и тестируется на телефоне, для удобства, потом будет перенесено в андроид устройство, которое стоит в авто.


shrimpplus 06.07.2016 17:48

Цитата:

Сообщение от lti1 (Сообщение 363918)
Az0m@, Экранная клавиатура будет скрываться если если Arduino будет настроено как HID клавиатура

Если в keylouts создать новый файл с vid pid ардуинки и прописать там нужные кнопки, то будет работать любая клавиатура, это так на всякий случай :smile2:

Alekssandr 06.07.2016 19:20

Цитата:

Сообщение от djdonatas (Сообщение 364101)

В чём делал оболочку?

Alekssandr 14.07.2016 22:37

DelleTenebre Привет! Яву начал изучать недавно.

Подскажи пожалуйста как отправить данные на Ваше приложение, пишу приложение под андроид которая будет работать в связке с SerialManager. Почему не срабатывают команды на включение и отключение светодиода на ардуино, из моего приложения, хотя с виджета всё работает. Походу чтото делаю не так.

Обработчик кнопок работает проверял через Toast.

PHP код:

    public static final String ACTION_SERVIS "serial.manager.send";
    public static final 
String EXTRA_DATA "data:";

    public 
void don(View view) {
        
Intent intent = new Intent();
        
intent.setAction(ACTION_SERVIS);
        
intent.putExtra(EXTRA_DATA,"on");
        
sendBroadcast(intent);
    }

    public 
void doff(View view) {
        
Intent intent = new Intent();
        
intent.setAction(ACTION_SERVIS);
        
intent.putExtra(EXTRA_DATA,"off");
        
sendBroadcast(intent);
    } 


С приемником kg.delletenebre.serial.NEW_DATA разобрался всё работает отлично.

Alekssandr 15.07.2016 00:40

Сам разобрался, в поле:
PHP код:

  public static final String EXTRA_DATA "data:"

data нужно было отправлять без двоеточия =)

Вот так.
PHP код:

 public static final String EXTRA_DATA "data"


armlive 15.07.2016 10:17

Цитата:

Сообщение от Alekssandr (Сообщение 364662)
DelleTenebre Привет! Яву начал изучать недавно.

Подскажи пожалуйста как отправить данные на Ваше приложение, пишу приложение под андроид которая будет работать в связке с SerialManager. Почему не срабатывают команды на включение и отключение светодиода на ардуино, из моего приложения, хотя с виджета всё работает. Походу чтото делаю не так.

Обработчик кнопок работает проверял через Toast.

PHP код:

    public static final String ACTION_SERVIS "serial.manager.send";
    public static final 
String EXTRA_DATA "data:";

    public 
void don(View view) {
        
Intent intent = new Intent();
        
intent.setAction(ACTION_SERVIS);
        
intent.putExtra(EXTRA_DATA,"on");
        
sendBroadcast(intent);
    }

    public 
void doff(View view) {
        
Intent intent = new Intent();
        
intent.setAction(ACTION_SERVIS);
        
intent.putExtra(EXTRA_DATA,"off");
        
sendBroadcast(intent);
    } 


С приемником kg.delletenebre.serial.NEW_DATA разобрался всё работает отлично.

Вот ты извращенец, зачем посредников используешь. сразу в порт учись отправлять

Alekssandr 15.07.2016 12:55

Цитата:

Сообщение от armlive (Сообщение 364686)
Вот ты извращенец, зачем посредников используешь. сразу в порт учись отправлять

=) я не хочу потерять возможности SerialManager, просто делаю удобную оболочку для настройки аудиопроцессора tda7719.

slon25 16.07.2016 11:20

Что нужно до установить чтобы на нексусе работали команды из раздела эмуляция клавиатуры рут???

DelleTenebre 28.07.2016 18:38

C лёгкого пинка ali_vlad, я начал эксперименты с GPIO. В версии 1.6.2 готов модуль считывания состояния 1 и 0. Под шумок добавил возможность "GPIO-кнопка" - можно получать данные не 1 и 0, а click и hold (удержание).

----

Обновлено 11.09.2016

Чтобы распознавать команды с GPIO нужно выбрать Тип команды GPIO, в появившееся поле Номер GPIO, как ни странно, номер GPIO (Скриншот).

Например, у geekbox landingship есть пин с маркировкой GPIO3_A3 - не знаю стандартное это обозначение или нет, но необходимый номер высчитывается по формуле (тут можно ещё почитать):
Код:

GPIO[X]_[Y][Z] = 32*[X] + 8*[Y] + [Z] (for Y: A=0, B=1, C=2, D=3)
В результате имеем номер 99. В поле Номер GPIO пишем 99, в поле значение одно из следующих: 1, 0, click или hold.

mark949 28.07.2016 19:28

В правильном направлении движетесь товарищ!
Считаю это необходимо в нашем деле...

DelleTenebre 29.07.2016 20:48

mark949, спасибо.

В 1.6.3 добавил действие установки состояния GPIO: low, high, invert. Формат такой: gpioX:low, gpioX:high, gpioX:invert. Где X номер GPIO. Если GPIO уже был инициализирован и имеет режим IN, будет сообщение об ошибке (в целях безопасности). Команда invert, как следует из названия, инвертирует состояние, т.е. если было 0, то станет 1; если было 1 - станет 0; если порт не был настроен, то будет выбрано состояние 0.

Немного исправил уведомления - теперь они должны исчезать как и положено.

Приношу свои извинения всем кто активно пользовался виджетами приёма данных - они у вас немножко (почти полностью) сломаются. Но в качестве компенсации вы получаете возможность пользоваться математическими выражениями и функциями описанными по этой ссылке, а так же hex2dec(), dec2hex(), bin2dec(), dec2bin(), выводить значение ключа с помощью %key, а полученного от контроллеров значения через %value. Все эти плюшки работают и в уведомлениях.

Например, чтобы перевести полученное значение в hex, в поле Текст пишем: dec2hex(%value)

Для работы с мат. выражениями необходимо всю формулу обернуть в %{}.

Например, от контроллера приходят данные о температуре в Фаренгейтах, а нам нужно перевести в градусы Цельсия: %{round((%value - 32) * (5 / 9), 1)} ºC
По формуле выше, мы перевели градусы и округлили до десятых (до одного знака после запятой). Т.е. если от контроллера пришла цифра 89, то мы на выходе получим 31.7 ºC. При этом текст до и после %{} остаётся без изменений.

ali_vlad 29.07.2016 23:03

Вопрос по GPIO.
Может я чего не так делаю
Добавляю новое действие, категория GPIO, определять ключ/значение автоматически. Замыкаю ножку GPIO на землю и тишина.

DelleTenebre 29.07.2016 23:25

ali_vlad, для нового gpio автоматически не получится получить ключ и значение. Алгоритм я сделал такой: при добавлении новой команды, если ключ соответствует шаблону gpioX (где X цифра), то инициализируется пин gpio с указанным номером в состояние in. Только после этого SM начинает его "слушать" и можно получить ключ/значение автоматически (хотя ключ уже есть). При удалении команд проверяется - если такой же номер GPIO не встречается ни в одной из команд, то пин GPIO отключается (через /sys/class/gpio/unexport).

Насколько я понял из документаций к разным платам с GPIO, их может быть сколько угодно с почти любыми номерами и лучше заранее не "слушать" всё подряд, так как неизвестно какие из них и для чего мог настроить пользователь.

ali_vlad 29.07.2016 23:33

Цитата:

Сообщение от DelleTenebre (Сообщение 365989)
ali_vlad, для нового gpio автоматически не получится получить ключ и значение. Алгоритм я сделал такой: при добавлении новой команды, если ключ соответствует шаблону gpioX (где X цифра), то инициализируется пин gpio с указанным номером в состояние in. Только после этого SM начинает его "слушать" и можно получить ключ/значение автоматически (хотя ключ уже есть). При удалении команд проверяется - если такой же номер GPIO не встречается ни в одной из команд, то пин GPIO отключается (через /sys/class/gpio/unexport).

У меня они называются /sys/class/gpio/gpiochip***. Это ничего?

DelleTenebre 29.07.2016 23:47

Не, это не те номера. /sys/class/gpio/gpiochip насколько я понимаю просто номера контроллеров GPIO, и хранят информацию и том за какие пины отвечают.

Если у Вас Odroid-XU4/3, то исходя из этой первой таблицы, например для 13 пина:

13 XE.INT13 GPX1.5 (#21)

прицепив провод на обозначенный на плате 13 пин, в SM надо писать gpio21. Как бы "логично" это не выглядело :) Я пока с этими номерами разобрался, плату чуть в окно не выкинул

ali_vlad 30.07.2016 00:15

Немного разобрался
На мой взгляд, установка GPIO по умолчанию в 0 - не подходит для кнопок, ибо будет правильнее, если они будут замыкаться на массу.
И первый глюк: Если после создания команды попытаться её отредактировать, то созданная /sys/class/gpio/gpio*** исчезает
Иногда возникает оооочень долгая задержка, секунд так 30.
Как повесить запуск приложения на изменение gpio так и не понял.

indevor 30.07.2016 01:58

Всем привет. Такая проблема. Подключил датчик ds18b20 по этому коду, через леонардо на тв боксе (свистке) mk908ii (rk3188), прошивка Finless 1.6 (4.2.2):
Код:

#include
OneWire ds(9);
 
void setup() {
pinMode(6, OUTPUT);          // set pin to input
digitalWrite(6, HIGH);
Serial.begin(9600);
}
 
void loop() {
 
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
int Temp = (data[1]<< 8)+data[0];
Temp = Temp>>4;
Serial.print(" Serial.print(Temp);
Serial.println(">");
delay(5000);
}

конфигурация такая: usb свистка - хаб1 - хаб2 - леонардо.
Из железа: контроллера тача на таком же леонардо (хаб1), звук c-media (хаб1) - хаб2 - леонардо(хаб2), мышь(хаб2), клава(хаб2).
При рабочей системе - с большего всё ок. Стоят галки автоопределение и переподключение. Как только перезагружаю систему, всё наглухо виснет и не даёт загрузится (экран, бутлого, просто замирает, потом свисток отрубается, чёрный экран). По светодиодам видно что леонардо стартует и открывает порт где то в середине загрузки потом грузится пару фризов и всё - стоп)

Ещё заметил если убрать и скетча delay(5000); данных видно становится многовато и всплывающее окно не исчезает. (в моём случаи )

Пробовал отключать всё кроме тача и леонардо с датчиком.. жутки тормоз и по итого не грузит.
Да. каждый раз, при перезагрузках с 1 хабом устройства разные /dev/usb/001 ..2..3..6. и если убрать автоопределение и вручную указать /dev/usb/001 то при след. перезагрузке эта настройка не сохраниться, так как такого устройства уже не будет. Однако если зайти в терминал и набрать cat /dev/ttyACM0 леонардо будет висеть там постоянно и исправно показывать данные. может как то можно указать этот порт вручную? Или как то в скетч указать что бы контроллер прикидывался строго определенным образом..

Maniac82 30.07.2016 18:03

Цитата:

Сообщение от DelleTenebre (Сообщение 365984)
mark949, спасибо.

Приношу свои извинения всем кто активно пользовался виджетами приёма данных - они у вас немножко (почти полностью) сломаются. Но в качестве компенсации вы получаете возможность пользоваться математическими выражениями и функциями описанными по этой ссылке, а так же hex2dec(), dec2hex(), bin2dec(), dec2bin(), выводить значение ключа с помощью %key, а полученного от контроллеров значения через %value. Все эти плюшки работают и в уведомлениях.

Не много не понял про сей момент.
То есть если у меня стоит виджет принимающий команду , то он перестанет работать совсем? Или его по новой просто надо будет сделать? Или вообще виджеты не будут работать?

DelleTenebre 30.07.2016 19:07

indevor, на данный момент у меня решения нет. Я пока что не знаю как более менее правильно считывать с /dev/ttyACM0.

Maniac82, виджеты останутся (должны по крайней мере) - сбросится их содержимое и будет нужно настроить вывод текста заново. Ключи сохранятся, только текст сбросится.

indevor 30.07.2016 22:03

Цитата:

Сообщение от DelleTenebre (Сообщение 366021)
indevor, на данный момент у меня решения нет. Я пока что не знаю как более менее правильно считывать с /dev/ttyACM0.

Спасибо за ответ. Думаю мне нужна просто задержка определения устройств вашей программой. Отложенный запуск.
Вы пишите:
Цитата:

USB
Запуск/остановка сервиса, считывающего информацию с последовательного порта, производится при получении ACTION_USB_DEVICE_ATTACHED / ACTION_USB_DEVICE_DETACHED.
Может Вам известно как в таскере сделать что бы ваш сервис стартовал после полной загрузки ОС. Либо с паузой параллельно загрузке.

DelleTenebre 30.07.2016 22:28

Цитата:

Сообщение от indevor
Может Вам известно как в таскере сделать что бы ваш сервис стартовал после полной загрузки ОС. Либо с паузой параллельно загрузке.

В таскере нет, но я добавлю опции "Автозапуск" и "Задержка автозапуска".

indevor 30.07.2016 22:38

Отлично, спасибо! Буду ждать релиз.

DelleTenebre 31.07.2016 00:05

В 1.6.4 добавил опции автозапуска.

indevor 31.07.2016 01:11

Цитата:

Сообщение от DelleTenebre (Сообщение 366048)
В 1.6.4 добавил опции автозапуска.

Благодарю за оперативность!. То, что нужно. По итогу заработало благодаря паузе в 10 сек. Как то не сразу виджет схватывает ключ или мне кажется при первичной настройке.
И по-моему были проблемы когда в хаб вставлена флешка. видно как она перезагружатся несколько раз, но леонардо не открывает порт, хотя стояло автоопределение. Буду тестить, пробовал по разному поэтому сказать наверняка о багах не могу.

indevor 31.07.2016 01:53

Вообщем мистика, может что не то натыкал, все работает благодаря паузе со всеми устройствами и двумя хабами.

mark949 02.08.2016 15:52

Мужики, у меня в последних версиях перестал реагировать на : "Эмуляция клавиатуры [Root]" -> "Эмуляция нажатия Alt+Tab" ,
"Эмуляция нажатия App_Switch" ,
"Эмуляция нажатия Tab"
возможно и еще какие то, но этими я пользовался через iDrive а теперь на экран вывод Serial команды видит и выводит а реакции 0.
Прошу проверить.
Android 5.1.1+root
СПС.

DelleTenebre 03.08.2016 15:55

mark949, проверил, работает. Возможно uinput каким-либо образом слетел или root-права.

В версию 1.6.5 добавлена возможность взаимодействия по WebSocket. В настройках можно указать порт и запускать ли сервер.

Тестируем следующим образом: подключаем android с SM к одной сети с компьютером (к одному wifi-роутеру, например); заходим в SM, на главной странице, вверху видим строчки:

WebServer: 192.168.1.77:5000
WebSocket: 192.168.1.77:5000/ws

У вас IP-адрес будет другой и порт, какой указали в настройках (по-умолчанию 5000). Открываем на компьютере более-менее свежий браузер и переходим по адресу WebServer, в моём примере 192.168.1.77:5000. Если всё хорошо, то откроется страничка со следующим содержанием:
------------------------------------------------
SerialManager

version: 1.6.5

WebSocket server address: 192.168.1.77:5000/ws

WebSocket test
------------------------------------------------

Переходим по ссылке WebSocket test, нажимаем "Установить соединение". Оправляем команды и счастливым взглядом смотрим в лог.

После изменения любых настроек SM (главных настроек), сервер делает рестарт и WebSocket (в браузере) нужно будет подключить заново.

Описанное выше поведение нужно будет учитывать и при подключении Arduino, т.е. при ошибке соединения, необходимо будет написать алгоритм переподключения.

У меня, на данный момент, нет ни WiFi, ни Ethernet-шилда к arduino, поэтому помочь не смогу.



Изменения коснулись и Категория > Отправить команду, теперь вариантов 4:
  1. КакаяЛибоКоманда
  2. usb:КакаяЛибоКоманда
  3. bluetooth:КакаяЛибоКоманда
  4. websocket:КакаяЛибоКоманда

в первом случае, КакаяЛибоКоманда будет отправлена через usb, bluetooth и websocket.

в остальных случаях, Вы указываете куда нужно отправить КакаяЛибоКоманда.

Это же правило действует в виджетах отправки, да и везде, где отправляем команды (через Tasker, например).

djdonatas 03.08.2016 20:07

а прием по вебсокету есть ?
Спасибо за проделанную работу!

DelleTenebre 03.08.2016 20:30

Конечно, работает и приём и передача.

ali_vlad 04.08.2016 11:31

Так и не понял, как из этой инструкции получить уровень яркости.
Может ещё какие поля надо заполнить?

seaway 08.08.2016 15:09

Цитата:

Сообщение от YAM1966 (Сообщение 362333)
Не заметил никаких тормозов в эмуляции нажатия кнопок... Завтра более точно измерю эту задержку.

Есть небольшая задержка...

Видео с управлением через Serial Manager


Видео с управлением через эмуляцию USB клавиатуры

подскажите как реализовать данный переход по папкам ? и можно ли еще нажначить вход в папку с помощью кнопки?
если можно пример скетча .

YAM1966 08.08.2016 15:32

Цитата:

Сообщение от seaway (Сообщение 366642)
подскажите как реализовать данный переход по папкам ? и можно ли еще нажначить вход в папку с помощью кнопки?
если можно пример скетча .

Эта проверка реализована на моем контроллере 4-й версии.

seaway 08.08.2016 15:53

Цитата:

Сообщение от YAM1966 (Сообщение 366646)
Эта проверка реализована на моем контроллере 4-й версии.

а на Ардуино сие можно организовать ?

YAM1966 08.08.2016 16:19

Цитата:

Сообщение от seaway (Сообщение 366650)
а на Ардуино сие можно организовать ?

Уже все разжевано....
И не однократно.

indevor 08.08.2016 21:38

Цитата:

Сообщение от seaway (Сообщение 366650)
а на Ардуино сие можно организовать ?

Можно. Гуглится "usb hid keyboard arduino"


Часовой пояс GMT +4, время: 22:51.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot