Показать сообщение отдельно
Старый 12.08.2014, 11:48   #64
Ursus
Пользователь
 
Регистрация: 12.04.2013
Возраст: 43
Регион: 55
Сообщений: 78
Ursus is on a distinguished road
По умолчанию

Цитата:
Сообщение от Tommy_Gun Посмотреть сообщение
Можно поподробнее?
Таки можно.
Понадобится планшет с полноценным USB хостом и рутом, busybox а так же Arduino c встроенным USB Serial портом.
Лично я проделывал все на Nexus 7 2012 и ардуино UNO R3. Способ гарантировано работает на прошивках от тимура и AutoDroid
1. Проверяем а в случае необходимости активируем USB host
2. Устанавливаем busybox (думаю все в курсе что нужно зайти в приложение и установить оттуда)
3.Подключаем Arduino к планшету и пытаемся найти его в устройствах. У меня это /dev/ttyACM2. У вас может быть какая-то другая цифра. Подключайте-отключайте и смотрите какое устройство появляется исчезает. Теоретически при перезагрузке номер устройства может поменяться и по правильному нужно его искать каждый раз скриптом. Но у меня этого не происходит и я не стал задрачиваться.
4. Самый главный шаг. Настраиваем Serial port
Код:
stty -F %ARDUINO_DEVICE_NAME cs8 9600 -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8 -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl  noflsh -xcase -tostop -echoprt -echoctl -echoke
Вместо %ARDUINO_DEVICE_NAME имя вашего устройства. Выполнять надо каждый раз после подмонтирования устройства. Я делаю каждый раз при просыпании и норм.
5. А да. Забыл сказать. В ардуино в скетче скорость порта тоже должна быть 9600. Если у вас другое значение, то меняйте скорость в настройках порта п. 4.
6. Пишем сообщение в ардуино скриптом Shell.
Код:
echo "нужное сообщение" > %ARDUINO_DEVICE_NAME
7. Самое вкусное читаем из ардуино. Сразу говорю есть ограничение. В сообщениях от ардуино (в моей схеме подключения) нельзя использовать пробел. Хотя если как-то хитро заэкранировать его, то может и можно. Короче мне пробел не критичен и я не стал им морочиться. Итак.
Каждый раз после подмонтирования устройства и настройки порта см пункт 4. выполняем следующий скрипт.
Код:
(cat %ARDUINO_DEVICE_NAME | while read code; do am broadcast -a primavera.arduino.intent.action.DATA_RECEIVED -e primavera_arduino_intent_extra_string $code; done) < /dev/null > /dev/null 2>/dev/null &
Краткое описание работы скрипта. Запускается демон который висит в памяти и ждет сообщения в файл вашего устройства. При получении сообщения в систему шлется бродкаст интент с action primavera.arduino.intent.action.DATA_RECEIVED и переменной (extras) primavera_arduino_intent_extra_string d в которой содержится ваше сообщение.
Если вы до этого использовали Arduino Uno Communicator (который мной пропатченный) и у вас все работало, то больше ничего делать не нужно. Смело удаляем Arduino Uno Communicator и сообщения будут приходить так же как и раньше. Только стабильней.
Если нет, то в таскере заводим новый профиль. Событие-Система-Intent Received
В поле действие у вас будет primavera.arduino.intent.action.DATA_RECEIVED
Ну и соответсвенно в задаче, которая вызывается из этого профиля будет доступна локальная переменная primavera_arduino_intent_extra_stringс сообщением от arduino.

Собственно это все. Не забываем для всех скриптов ставить галочку Use Root. И менять %ARDUINO_DEVICE_NAME на ваше устройство.
Ursus вне форума   Ответить с цитированием