PDA

Просмотр полной версии : Резистивные кнопки под андроид


Страницы : [1] 2 3 4

mcf1
15.01.2013, 19:24
Долго искал, но так и не нашел решения.
под винду решений много, но их использовать не получается.

как видится мне: нужен какой то микроконтроллер который будет прикидываться USB клавиатурой и "нажимать" стандартные мультимедийные кнопки (андроид их прекрасно понимает)

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

как то так. у кого какие есть идеи и наработки?

balabollng
15.01.2013, 19:48
Думаю решение давно известно - CarPC JoyCon EX Carputer Car PC Stering Wheel Interface (JConRes)

Программируете нажатия на "большом брате", т.е. на PC и потом смело втыкаете в андройд.

http://www.changjack.com/user_guide/cpjex/CarPC_JoyCon_EX_UserGuide_eng.pdf

Gorynch
15.01.2013, 19:55
Такая тема (http://pccar.ru/showthread.php?t=18359) есть
В принципе этот контроллер потянет обработку резистивных кнопок, но захочет ли разработчик это реализовать

balabollng
15.01.2013, 20:47
Если это именно клавиатура HID то работать будет и так. От разработчика поддержки не нужно. Андройд сам ее будет за родную принимать.

Gorynch
15.01.2013, 20:52
Если я правильно понял, то в той теме просто кнопки, а нужна обработка резистивных кнопок. Это и требует доработки

balabollng
15.01.2013, 21:12
Хм.... мне с первого взгляда показалось, что "всякие кнопки" это резистивные :))) Виноват :) Хотя не ясно зачем другие всякие...

macau
15.01.2013, 21:24
http://compcar.ru/forum/showthread.php?4640-%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D 0%B8%D0%B5-%D1%80%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D0%BC%D0%B8-%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0%D0%BC%D0%B8-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8-Carduino
софтину видовую можно выкинуть, код допилить руками. но мне кажется дешевле вариант с беспроводным донглом

mcf1
15.01.2013, 21:29
Думаю решение давно известно - CarPC JoyCon EX Carputer Car PC Stering Wheel Interface (JConRes)

Программируете нажатия на "большом брате", т.е. на PC и потом смело втыкаете в андройд.

http://www.changjack.com/user_guide/cpjex/CarPC_JoyCon_EX_UserGuide_eng.pdf

P.S. Я тут как раз пытаюсь от одного такого избавиться :)

это наверное самое интересное решение

в целом настроить можно и на винде а потом юзать где хочется.

nikolna
15.01.2013, 21:44
Сегодня уже писал что последнии Arduinы можно запрограммировать как HID клаву или мышь
или взять tinsy для нее есть поддержка совта от дуины
Arduino UNO (https://duino.ru/arduino-uno-r3.html)

Легче и дешевле решения мне кажется не придумать

mcf1
15.01.2013, 22:57
Программируете нажатия на "большом брате", т.е. на PC и потом смело втыкаете в андройд.

почитал про неё и засомневался что она может работать без родной утилиты JoyCon Explorer.
ты пробовал ее к андроиду подключать?

balabollng
15.01.2013, 23:32
Она работает как обычное устройство ввода. Т.е. клавиатура. Программируется один раз этой программкой. Ok. Я завтра попробую, только резистивных кнопок у меня в наличии нет. Буду на резюке пробовать :)

mcf1
15.01.2013, 23:41
ну в этом как раз и вопрос, программируется ли контроллер или JoyCon Explorer перехватывает код от девайса и винде подсовывает запрограммированный код.
второй вариант у меня есть (в четыре раза дешевле), андроид с ним не работает.

VVi3ard
16.01.2013, 18:54
Есть вариант разобрать джойстик и подпаятся к любому тригеру.
Работа с HID джостиком в андроиде не очень сложна.

mcf1
16.01.2013, 22:22
наверное это действительно не сложно, но не для меня, программная часть для меня темный лес

macau
16.01.2013, 23:05
не в тему, но все равно прикольно http://blog.vinu.co.in/2013/01/resistive-touch-screen-based-wireless.html

alexvtk
17.01.2013, 04:27
не в тему, но все равно прикольно http://blog.vinu.co.in/2013/01/resistive-touch-screen-based-wireless.html

Хм, а ведь интересная идея. Можно использовать не БТ, а радио модуль. Возможно это и есть вариант решения проблемы тача для андроид ТВ стиков-боксов.

nikolna
17.01.2013, 09:42
Возможно это и есть вариант решения проблемы тача для андроид ТВ стиков-боксов.

А если так (http://pccar.ru/showthread.php?t=18474)

wave_is
17.01.2013, 13:04
почитал про неё и засомневался что она может работать без родной утилиты JoyCon Explorer.
ты пробовал ее к андроиду подключать?

работал с ней на винде.
подтверждаю что прога прекрасно работает без своей проги. прога нужна лишь для настройки.

работать будет 100%
у меня вопрос в другом. Есть хорошее подозрение, что если подключить это устройство, то андроид свернет экранную клаву, так как распознает внешнюю ;(

проблема простая, но я так и не научился как ее побороть

mcf1
17.01.2013, 15:33
написал продавцу JoyCon EX с ebay, посмотрим что скажет

balabollng
17.01.2013, 17:54
Ничего скорее всего :)))) Он продавец. Во всяком случае, когда я с ним дело имел, он очень плавал в том, что продает.

Поищи лучше производителя. Там можно и подешевле купить и вопросы задать.

mcf1
18.01.2013, 02:53
Ничего скорее всего :)))) ты ошибся. продавец в теме)))
Hi
Yes, it is possible.

Android supports USB accessory from version 3.1 and up .
JoyCon works as a keyboard and multimedia controller(vol+/-, play/pause, next/prev track) on Android after it is configured on Windows PC.

I have tested JoyCon with my phone, Samsung Galaxy s3.
And customers reported that JoyCon works with Galaxy note and Galaxy tab 10.1.

USB OTG cable is required to connect USB accessory devices on Android device
основные кнопки, как я понимаю, должны работать
а скорее всего, заработают все запрограммированные, если в андроиде есть поддержка данного кода кнопки.

ключевая фраза on Android after it is configured on Windows PC

UPD а вот сайт производителя (http://www.rcjoycon.com/base_3/menu_10.php?com_board_basic=read_form&menu=10&com_board_idx=14)

balabollng
18.01.2013, 14:08
Ну и славненько :)

sacha-r
18.01.2013, 16:02
http://www.cartft.com/catalog/il/1068
Вот вроде тоже представители производителя

alexvtk
18.01.2013, 16:41
Все, вроде бы хорошо с этими контроллерами. Но balabollng, упоминал о пропадании экранной клавы при подключении такого HID девайса змулирующего клавиатуру. Проверил. Подключил клаву к планшету. Действительно, экранная пропала.:dntknw:

mcf1
18.01.2013, 21:40
Заказал через ебей у разработчика (http://www.ebay.com/itm/CarPC-JoyCon-Exr-Steering-wheel-controls-USB-interface-/320886897017?pt=Keyboard_Mice_Bundles&hash=item4ab6597979), получилось 1600р( с доставкой).

Клавиатуру андроидную как то получалось вытаскивать и после этого она выскакивала сама. Но при передергивании Usb клавы эта настройка слетала.
PS мало времени на эксперименты(((

sacha-r
19.01.2013, 11:29
Заказал через ебей у разработчика (http://www.ebay.com/itm/CarPC-JoyCon-Exr-Steering-wheel-controls-USB-interface-/320886897017?pt=Keyboard_Mice_Bundles&hash=item4ab6597979), получилось 1600р( с доставкой).

Клавиатуру андроидную как то получалось вытаскивать и после этого она выскакивала сама. Но при передергивании Usb клавы эта настройка слетала.
PS мало времени на эксперименты(((

А зачем 4 канала резестивных кнопок, по мне так одного достаточно.
Или я что то не понимаю?
Ссылку на одно канальный вариант давал выше.

Fedorych
19.01.2013, 12:10
Как мне кажется одно канальный вариант не будет работать в андроиде, так как значения кнопок сохраняются не в железной части,а в программной.ИМХО.

balabollng
19.01.2013, 12:48
Вообще данное устройство достаточно легко применить для детектироапния скажем включения задней передачи. Подключаешь другой канал через сопротивление на фонарь заднего хода и вуаля! Как только включаешь заднюю в комп летит команда, а на нее реакция - запуск просмотра камеры.

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

Т.ч. не кнопками едиными....

balabollng
19.01.2013, 12:50
Уже много раз сказано. Настройки хранятся в самой железке. В комп посылается уже коды кнопок.

Fedorych
19.01.2013, 13:12
balabollng, много раз сказано про CPJexr(CarPc Joycon Exr) (http://www.rcjoycon.com/base_3/menu_10.php?com_board_basic=read_form&menu=10&com_board_idx=14) в его описание есть информация JoyCon Explorer does not support Android devices. But CarPC JoyCon Exr works on Android devices from Android version 3.1 after it is configured at Windows
Про это же девайс (http://www.rcjoycon.com/base_3/menu_10.php?com_board_basic=read_form&com_board_idx=9&menu=10&&com_board_search_code=&com_board_search_value1=&com_board_search_value2=&com_board_page=&) ничего не сказано и нигде не упоминается что он работае в андройде, после манипуляций в windows!
И в описание написано Supports Windows XP, Vista, Windows7, Linux
(But Joycon Explorer does not support Linux.)

balabollng
19.01.2013, 13:45
Эм... я как то нить потерял.. а когда об "этом" девайсе (http://www.rcjoycon.com/base_3/menu_10.php?com_board_basic=read_form&com_board_idx=9&menu=10&&com_board_search_code=&com_board_search_value1=&com_board_search_value2=&com_board_page=&) речь зашла? Вроде шла речь именно об этом девайсе (http://www.rcjoycon.com/base_3/menu_10.php?com_board_basic=read_form&menu=10&com_board_idx=14).

И покупается оно...

Fedorych
19.01.2013, 16:24
пост 23 (http://pccar.ru/showpost.php?p=243431&postcount=23), в продолжение пошел логичный пост 26 (http://pccar.ru/showpost.php?p=243500&postcount=26) не всем нужны 4 канала и тем более управление usb камерой,установленной на улице(крышка багажника,бампер...), разница 20 евро в цене играет не маловажную роль.

wave_is
19.01.2013, 16:55
я юзал четырехканальный девайс.
реально удобная вещь
там 2 канала на кнопки и 2 канала на мелочевку вроде задней передачи
+ управление 2мя блоками светодиодов
у меня был сделан самодельный штурманский свет на базе этих светодиодов. настройки кнопок хранятся в девайсе. Управление светодиодов работало до загрузки винды, как только я подавал электричество на юсб.

balabollng
19.01.2013, 17:48
пост 23 (http://pccar.ru/showpost.php?p=243431&postcount=23), в продолжение пошел логичный пост 26 (http://pccar.ru/showpost.php?p=243500&postcount=26) не всем нужны 4 канала и тем более управление usb камерой,установленной на улице(крышка багажника,бампер...), разница 20 евро в цене играет не маловажную роль.


Проехали... я видимо плохо прочел Ваш пост. Ok. По одноканальному не знаю...

sacha-r
07.02.2013, 08:24
Тоже заказал CarPC JoyCon Exr, с ебея, бум тестить с Нехус7

http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=320886897017&ssPageName=ADME:X:AAQ:US:1123

wave_is
07.02.2013, 13:41
жаль что у меня не резистивные кнопки ;(

jundik
09.02.2013, 15:31
да, а как быть с теми авто, которые используют цифровой сигнал через can шину? есть какое нибудь решение?

VVi3ard
09.02.2013, 16:51
Так вроде много продается разных CAN адаптеров для разных машин, можно поискать, вот например: http://www.canny.ru/download.aspx?cmd=file&key=873854C3-A472-486C-BC10-C33BDA7A67AB

правда тут кнопок нет, но это первое что попалось для примера.
Вот тоже: http://www.coda.ru/model.aspx?model=KS-RC102

В общем найти можно... нужно только искать :)

wave_is
11.02.2013, 23:11
http://www.youtube.com/watch?v=NJVn-XLqnEs вот живое видео использования CarPC JoyCon

jundik
12.02.2013, 04:12
Так вроде много продается разных CAN адаптеров для разных машин, можно поискать, вот например: http://www.canny.ru/download.aspx?cmd=file&key=873854C3-A472-486C-BC10-C33BDA7A67AB

правда тут кнопок нет, но это первое что попалось для примера.
Вот тоже: http://www.coda.ru/model.aspx?model=KS-RC102

В общем найти можно... нужно только искать :)

есть адаптеры для магнитол, но для андроида нет. или их можно как то совместить?

jundik
15.02.2013, 04:15
так как быть то? без кнопок остаться совсем не хочется

VVi3ard
15.02.2013, 11:10
Адаптер для магнитолы на выходе должен выдавать то что выдает руль с резистивными кнопками. т.е. придется покупать 2 девайса. Есть и другие варианты все зависит от того в каком виде can адаптер будет, что он еще умеет и насколько вы готовы заниматься его передлкой.

Но самый простой 2 устройства, CAN адаптер + тот что описывается в ветке.

wave_is
18.02.2013, 17:23
Сегодня уже писал что последнии Arduinы можно запрограммировать как HID клаву или мышь


это как? где почитать?

ak1976
18.02.2013, 17:46
это как? где почитать?

Вот здесь посмотрите http://www.pjrc.com/teensy/teensyduino.html
Это не совсем ардуино, но тоже недорого и есть готовые примеры usb mouse, keyboard, serial

wave_is
19.02.2013, 16:24
http://www.rcjoycon.com/base_3/component/board/board_5/u_image/1293620901_7.jpg

Кто-нибдуь уже испытал работу CarPc Joycon Exr с андроидом?

есть успехи?

mcf1
19.02.2013, 16:41
завтра на почте получу и попробую

UPD ошибочка вышла, это не ОНО приехало

kristal0211
25.02.2013, 13:13
А почему бы не использовать ПУЛЬТ - КЛАВИАТУРА ICONBIT G CONTROL.
http://rus.onlinetrade.ru/img/items/b/pult_klaviatura_iconbit_g_control_1.jpg http://rus.onlinetrade.ru/img/items/b/pult_klaviatura_iconbit_g_control_2.jpg
Она играет роль пульта, 3D мыши (как у ТВ LG) и полноценной клавы.
На ebay есть аналоги дешевле, но без рус. клавы. Думаю для авто самый идеальный вариант, тем более клава все равно нужна, т.к. не очень удобно будет на экране текст набирать.

wave_is
25.02.2013, 14:35
у меня в машине треснутый планшет и блютус клава

ДЕЛАЮ ЗАЯВЛЕНИЕ:
- клава в машине не нужна. Это на винде она была нужна. здесь экранная клава куда удобней.
- Самое нужное назначение клавы - это набор адрес в программе навигации. Так вот, проверено. внешняя клава в большинстве таких прог не работает. Там встроенная экранная.


+ Зд пультом в машине просто будет неудобно махать ;( Такие пульты задуманы под огромные, а не крошечные экраны.


P.S. И причем тут вообще этот пульт?
Задача темы найти способ как заюзать штатные резистивные кнопки в машине (как правило на руле),а не добавить новые. Как может помочь этот пульт с решением данной задачи?

Кнопок в пульте много... а толку?

P.P.S. Кстати, никто еще так и не смог найти способ как сделать чтобы при подключении внешней клавы не исчезала экранная. Поэтому юзать в планшете внешнюю клавиатуру очень неудобно.

mcf1
25.02.2013, 16:31
P.S. И причем тут вообще этот пульт?
Задача темы найти способ как заюзать штатные резистивные кнопки в машине (как правило на руле),а не добавить новые. Как может помочь этот пульт с решением данной задачи?

+1.
К резистивным кнопками пульт ни как не относится.

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

Митрич18
25.02.2013, 17:10
У меня на атриксе есть пульт,все основные функции выполняет,может к планшету какой нить пульт прикрутить,а если такое возможно то можно адаптером резистивных кнопок потом управлять,или ардуиной.

wave_is
25.02.2013, 17:47
стоп.
я вообще не понял. давайте мухи отдельно, котлеты отдельно
---------------------------------------
1) Нужно вначале придумать как эти резистивные кнопки заставить работать с планшетом. Любые резистивные кнопки, будь то пульт или что угодно.

2) Нужно понять зачем Вообще пульт планшету? Я пока не могу придумать физической схемы применения.

3) На андроиде заработает любой HID пульт, так как он прикинется клавой или мышкой. Нет проблемы его прикрутить. Купили любой беспроводной пульт и ура. Он работает. Ничего изобретать не нужно.
Другой вопрос, что некоторые пульты, когда подключаются к андроиду блокируют экранную клаву. Нужно найти такой, который не блокирует, чтобы повысить его юзабилити.

s.m.
25.02.2013, 18:03
1) Нужно вначале придумать как эти резистивные кнопки заставить работать с планшетом. Любые резистивные кнопки, будь то пульт или что угодно.

оторвать оттуда, куда они подключены - подключить вместо кнопок на клаве. Поправить мапинг кнопок на планшете.

Митрич18
25.02.2013, 18:40
Ну коли так,пульт который работает через блютуз не пойдет? Нужен как я понимаю ик пульт+любой обучаемый адаптер резистивных кнопок,либо модуль который включается в юсби может обучатся резистивным кнопкам.
Но если у вас какой нить форд свежий или фольц,то там уже кнопки идут по CAN шине и не раскурочив модуль кнопок так просто управление не повесить.

wave_is
25.02.2013, 18:43
оторвать оттуда, куда они подключены.
1) допустим это кнопки на руле. мы выкинули штатную магнитолу, значит кнопки уже оторваны и у нас болтается просто два провода

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

Поправить мапинг кнопок на планшете.
3) а это как делать? Экранная клава при этом пропадет?

s.m.
25.02.2013, 20:18
1) допустим это кнопки на руле. мы выкинули штатную магнитолу, значит кнопки уже оторваны и у нас болтается просто два провода


2) как именно их подключать? В клавиатуре все кнопки тоже резистивные и тоже по двум проводам?


3) а это как делать? Экранная клава при этом пропадет?

1) добраться до физических кнопок на руле и подключить вместо требуемых в беспроводной клаве.
2) конечно, не резистивные, а матрица, см. выше
3) не вспомню, но где-то было в настройках клавиатуры в андроид, что делать при подключении внешней клавы - можно сделать, чтобы не пряталась. Возможно, что это есть не во всех прошивках.

Имхо, на Ардуинах с эмуляцией USB HID клавы это было бы сделать элементарно - измерить сопротивление - выдать код клавиши в зависимости от этого. Может быть, это JoyCon и делает?

wave_is
25.02.2013, 20:28
1) добраться до физических кнопок на руле и подключить вместо требуемых в беспроводной клаве.
90% пользователей хотят юзать кнопки на руле.
там часто нет место где даже провода разместить, не то, что контроллер.
+ лично мне стремно руль разбирать, там подушка
+ клава 4хконтактная, а на руль, по вращающимся дорожкам дойдут лишь два контакта

ИМХО, решение для руля непригодное, а вот для всех остальных - классно. легко и дешево



3) не вспомню, но где-то было в настройках клавиатуры в андроид, что делать при подключении внешней клавы - можно сделать, чтобы не пряталась. Возможно, что это есть не во всех прошивках.
у меня сейчас 6 андроид девайсов. нет ни в одном, но в инете тоже читал что такое было. опять же решение не универсальное. видно отказались от этой практики.


Имхо, на Ардуинах с эмуляцией USB HID клавы это было бы сделать элементарно - измерить сопротивление - выдать код клавиши в зависимости от этого. Может быть, это JoyCon и делает?

скорее всего так.
JoyCon имеет еще готовую софтину и доп плюшки. Но стоит 45 у.е.
Меня жаба давит, мне всего 2 кнопки нужно.

Ардуина лучше. Но я так понимаю, что многие как и я в нем не бум-бум.

s.m.
25.02.2013, 20:41
Ардуина лучше. Но я так понимаю, что многие как и я в нем не бум-бум.

Может это шанс изучить наконец? Это не сложно совсем.

Не реклама, но вот раз (http://pjrc.com/teensy/td_keyboard.html)

и два (http://pjrc.com/teensy/tutorial4.html)

и три (http://compcar.ru/forum/showthread.php?t=4640)

Просто собрать в кучу эти 3 статьи. При написании скетча стоит учитывать, что напряжение немного плавает на входе.

То есть вместо отправки значения в комп выяснить, какая кнопка нажата и сформировать нужный код клавиши. Инфы более чем достаточно в этих 3 статьях

Если куча своего времени дешевле, чем 20-25 баксов, то можно рискнуть :)

Остальным не разбирающимся в теме лучше JoyCon. Кто-то зарабатывает в день больше $45... Сорри, если кого обидел.

ZXprSL
25.02.2013, 20:46
с ардуиной вообще всё просто:
http://www.youtube.com/user/AmperkaRu/videos?view=0

Начинайте с первого урока, там всё по Русски и доступно для понимания :)

Hamster
25.02.2013, 20:55
И четыре (http://compcar.ru/forum/forumdisplay.php?f=57) :)
Конечно, там нет туториала, по конкретно этой теме, зато там куча проектов.
Да, и пять (http://www.freeduino.ru/arduino/lang.html). Все же на русском для многих проще. Особенно, если говорить про азы.

З.Ы. Я по "пять" как раз начал свое знакомство с ардуино.

wave_is
25.02.2013, 20:59
Может я фантазер.
Ну вот бы классно, если бы кто-то из разбирающихся написал скетч. Сделал бы в нем кучу камментов, а потом бы выложил тут.
Чтобы людям приходилось только менять показатели своих кнопок. =)

Вопрос то актуальный.

Тут (http://compcar.ru/forum/showthread.php?t=4640) даже коза есть. Главное еще сделать так, чтобы ардуино потом HID устройством прикидывался =)


ОФФТОП:
Народ, если тут куча спецов, то может, мне кто-то простейший скетч на три строчки наваяет?
http://compcar.ru/forum/showthread.php?t=9625&p=101148#post101148

ZXprSL
25.02.2013, 21:02
если кто перевей меня не сделает, то выложу, но это будет не скоро :)

Hamster
25.02.2013, 21:02
В той теме на которую ты ссылался еть мой скетч.
Если нужно сделать именно прикидывание hid-клавой, то завтра/послезавтра могу накидать.

wave_is
25.02.2013, 21:10
В той теме на которую ты ссылался еть мой скетч.
Если нужно сделать именно прикидывание hid-клавой, то завтра/послезавтра могу накидать.

Если речь про скетч для меня лично, то там не нужно никем прикидываться, там даже связи с компом не нужно. У меня просто кнопки кановские, не резистивные. Это я для остальных так сказать попрошайничаю =)

Если речь про скетч для резистивных кнопок. То тут буду признателен за то, чтобы hid прикидывался. просто в таком случае будет очень удобно для людей к планшетам коннектится.


если кто перевей меня не сделает, то выложу, но это будет не скоро :)

Спасибо, большущее. :beer1:

Hamster
25.02.2013, 21:16
Да, я про резистивные конено говорил. Чтобы кан читать одной ардуинки мало, луше специалзированный драйвер иметь

wave_is
25.02.2013, 22:06
P.S. А можно как-то самой Ардуино без реле замыкать 2 аналоговых контакта? Такая себе кнопка? Если учесть что ток будет течь незначительный...

Hamster
25.02.2013, 22:29
Не, просто так не получтся ;) ардуина по сути умеет выставлять на ногах некий потенциал, который будет являться управляющим сигналом для чего-то, что может "замкнуть кнопку".
Замыкание как таковое может быть осуществлено либо реле либо транзисторным ключем. В любом случае есть ток управляющий, который течет в цепи обеспечивающей переключение и ток коммутации, который течет в цепи которую мы замыкаем.

murano
25.02.2013, 22:48
Количество возможных нажатий на руле ограничено, поэтому возникает вопрос - нажатия каких клавиш клавиатуры имеет смысл программировать? Под рукой нет USB клавы. На какие управляющие клавиши реагирует планшет?

Hamster
26.02.2013, 01:37
нажатия каких клавиш клавиатуры имеет смысл программировать?

Я кстати когда была задача реализовать управление рулевыми кнопками именно поэтому не стал "изобретать" HID-клаву.
У меня ардуина посылает код нажатой кнопки, а на стороне ОС висит процесс, который читает этот код и делает всякие разные штуки. т.е. не только мапит некоторые кнопки на сочетание клавиатурных хоткеев, но и обладает некоей дополнительной логикой. Типа нажали кнопку Audio 1 раз - перейди в плеер, 2 раза - перейди в выбор плейлиста, 3 раза - давай ка выберем в медиатеке "избранное".

wave_is
26.02.2013, 13:34
под Ардуино на андроид тоже есть какой-то софт. в основном блютус. Хотя вряд ли он обладает нужным функционалом.
А никто не знает как в Андроиде на комбинацию клавиш настроить действие или запуск программы?

alexvtk
26.02.2013, 14:35
А никто не знает как в Андроиде на комбинацию клавиш настроить действие или запуск программы?
Хороший вопрос. Но нигде не видел ответ. Я бы согласился на более простой вариант, используя только хардверные клавиши. Button Remaper не предлагать, он делает другое и на Андроид 4 не работает.
Кстати, кто знает способ переназначения аппаратных кнопок на Андроид 4.1.1? Хотя бы в рамках стандартных функций, например, Vol+ поменять на Home, Vol- поменять на Menu.

zanuda
27.02.2013, 12:31
Кстати, кто знает способ переназначения аппаратных кнопок на Андроид 4.1.1? Хотя бы в рамках стандартных функций, например, Vol+ поменять на Home, Vol- поменять на Menu.

А не там /system/usr/keylayout/ ? по крайней мере в телефоне я изменял реакцию на кнопку HOME именно там. Вот кусок текста
key 103 DPAD_UP
key 102 HOME WAKE
key 105 DPAD_LEFT
key 106 DPAD_RIGHT

Сам файл надо искать в папке, у меня на мтк так у него свое название.

murano
27.02.2013, 12:34
Может я фантазер.
Ну вот бы классно, если бы кто-то из разбирающихся написал скетч. Сделал бы в нем кучу камментов, а потом бы выложил тут.
Чтобы людям приходилось только менять показатели своих кнопок. =)

Вопрос то актуальный.

Тут (http://compcar.ru/forum/showthread.php?t=4640) даже коза есть. Главное еще сделать так, чтобы ардуино потом HID устройством прикидывался =)


ОФФТОП:
Народ, если тут куча спецов, то может, мне кто-то простейший скетч на три строчки наваяет?
http://compcar.ru/forum/showthread.php?t=9625&p=101148#post101148

На то что сделано без ошибок не претендую, но проверено на нексусе - работает. Запрограммировал нажатия пяти кнопок клавиатуры. Использовал arduino leonardo (https://duino.ru/arduino-micro-arduino-leonardo.html) и резистивный джойстик от sony RM-X2S.
Схема:
http://s019.radikal.ru/i619/1302/59/aaf33a89c468.png (http://www.radikal.ru)
Сопротивление использовал 3.3К
Залил следующее:

int analogPin=0;
int data;

void setup()
{
Keyboard.begin();
Serial.begin(9600);
}

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
/*поддерживаемые коды управляющих клавиш
http://arduino.cc/en/Reference/KeyboardModifiers*/
if (data==614) Keyboard.write(176); //ENTER
if (data==122) Keyboard.write(216); //стрелка влево
if (data==165) Keyboard.write(215); //стрелка вправо
if (data==216) Keyboard.write(218); //стрелка вверх
if (data==276) Keyboard.write(217); //стрелка вниз
delay(100);
}
Для безошибочного отрабатывания кнопок надо добавить в код проверку некоторого диапазона значений проверяемой кнопки (x<data<y). Так же можно запрограммировать комбинации нажимаемых клавиш на клавиатуре.
Но ввод с экранной клавиатуры пока подключен arduino - не возможен

wave_is
27.02.2013, 12:47
оооо! Мега респект. Выложу в шапку Нексуса

О! а как вы определяли значение конкретной резистивной кнопки? data==614 ?

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

как видится мне: нужен какой то микроконтроллер который будет прикидываться USB клавиатурой и "нажимать" стандартные мультимедийные кнопки (андроид их прекрасно понимает)

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

как то так. у кого какие есть идеи и наработки?

Может и ты в Шапку здесь поднимешь? заодно бы инфу про JoyCon.

s.m.
27.02.2013, 12:53
Схема:

по схеме - я бы поменял местами R1 и рулевые кнопки. Оно конечно работает и так, но ИМХО надежнее, потому что питающее 5В не будет гулять по длинным проводам (вдруг замкнет где-то на корпус или +12, да и собирать помехи на +5 ни к чему).

murano
27.02.2013, 13:23
... а как вы определяли значение конкретной резистивной кнопки? data==614 ?

В ArduinoIDE открывал монитор, нажимал кнопки, а команда Serial.println(data) туда выводила значения.

murano
27.02.2013, 13:32
по схеме - я бы поменял местами R1 и рулевые кнопки. Оно конечно работает и так, но ИМХО надежнее, потому что питающее 5В не будет гулять по длинным проводам (вдруг замкнет где-то на корпус или +12, да и собирать помехи на +5 ни к чему).
Согласен, но именно такой схемой я попытался сымитировать работу кнопок на своем авто.

macau
03.03.2013, 11:07
http://item.taobao.com/item.htm?spm=a1z10.1.w4080861.26.Iif5XK&id=16571360084 готовый вариант за тыщщу рублей с доставкой

wave_is
03.03.2013, 14:59
http://item.taobao.com/item.htm?spm=a1z10.1.w4080861.26.Iif5XK&id=16571360084 готовый вариант за тыщщу рублей с доставкой

а я что-то не могу пока понять как оно вообще работает ;(

macau
03.03.2013, 16:45
очевидно что-то типа джойкона. прикидывается хид-клавой и ик-приемником. может и программируется-гугол с картинок переводить не умеет

mcf1
05.03.2013, 01:19
получил JoyConn
https://lh3.googleusercontent.com/-6xAntdON4GA/UTUAaeJArNI/AAAAAAAAMuM/8yXWnhHBXZ8/s640/IMG_20130304_190148.jpg

заработал со второго раза, с первого не пошло. Толи прога на диске из комплекта кривая, толи прошивка самого гаджета была нарушена.
в итоге скачал прогу с сайта производителя, и обновил FW устройства. И все заработало с полтычка.

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

в винде настроил, под андроидом тоже работает.

alexvtk
05.03.2013, 04:16
в винде настроил, под андроидом тоже работает.

Про Андроид можно подробнее, особенно про экранную клаву. Пропадает?

wave_is
05.03.2013, 14:41
в винде настроил, под андроидом тоже работает.

кроме кнопок руля еще что-то планируете на него вешать?
P.S. Я в винде вешал еще управление штурманским кнопок и в блок двери встраивал еще 6 кнопок для разных нужд.

Я так понимаю что под андроидом можно получить только комбинацию клавиш? никакого софта под андроид на диске не идет?

Как будете эти комбинации клавиш дальше использовать в работе?

mcf1
05.03.2013, 17:01
андроидом определяется как USB клавиатура, со всеми вытекающими, т.е. экранная клава отключается (но можно включить)

на одну линию планирую повесить нарульные кнопки. на вторую повесить еще 5-7 кнопок для дополнительных функций (какие пока не определился)

wave_is
05.03.2013, 17:36
на одну линию планирую повесить нарульные кнопки. на вторую повесить еще 5-7 кнопок для дополнительных функций (какие пока не определился)

а как эти функции будете в Андроиде включать?

mcf1
05.03.2013, 19:41
еще не придумал))) все в процессе

ifynk
06.03.2013, 13:45
В Smart Keyboard Pro есть возможность настроить отображение экраной клавиатуры вместе с физической.

wave_is
06.03.2013, 16:05
О! а вы проверяли?
я в свое время протестировал с десяток клав,
ни в одной такого не было

но эту не тестил

ifynk
06.03.2013, 20:37
Сам не проверял, но в настройках есть пункт "Ignore hard keyboard (display soft keyboard in landscape mode even if hard keyboard is present)"

wave_is
06.03.2013, 22:17
а не знаете как еще нарисовать свой скин под нее?

ifynk
07.03.2013, 18:31
а не знаете как еще нарисовать свой скин под нее?

Неа.

SHAR325
10.03.2013, 23:29
У меня вопросик. Установил планшет nexus 7. Он подключен через выход на наушники, дальше на усилитель и на колонки. Т.е. планшет съемный и ничего в нем паять не получится. Так вот как мне организовать регулировку громкости через подрулевой переключатель(штатный на фокусе)? у меня была задумка в разрыв наушников подключить гарнитуру и оттуда припаять выходы на подрулевой переключатель.

Что посоветуете, господа?

вот видео как все есть http://www.youtube.com/watch?v=3qJav8aKrLk

mcf1
11.03.2013, 00:24
а ты тему прочитал?

PS такая хорошая рамка и такая плохая реализация автоматизации(((

wave_is
11.03.2013, 02:17
У меня вопросик. Установил планшет nexus 7. Он подключен через выход на наушники, дальше на усилитель и на колонки. Т.е. планшет съемный и ничего в нем паять не получится. Так вот как мне организовать регулировку громкости через подрулевой переключатель(штатный на фокусе)? у меня была задумка в разрыв наушников подключить гарнитуру и оттуда припаять выходы на подрулевой переключатель.

Что посоветуете, господа?

вот видео как все есть http://www.youtube.com/watch?v=3qJav8aKrLk

Нексус не умеет понимать кнопки гарнитуры
можно в нем выставить максимум, а дальше регулировать усилителем, переменным резистором или еще чем

но проще как описывают в теме подключить мультимедийную клаву и завести ваши подрулевые клавиши на кнопки громкости клавиатуры

SHAR325
11.03.2013, 20:56
Нексус не умеет понимать кнопки гарнитуры
можно в нем выставить максимум, а дальше регулировать усилителем, переменным резистором или еще чем

но проще как описывают в теме подключить мультимедийную клаву и завести ваши подрулевые клавиши на кнопки громкости клавиатуры


спасибо! попробую так

SHAR325
11.03.2013, 20:58
а ты тему прочитал?

PS такая хорошая рамка и такая плохая реализация автоматизации(((

да вроде привык уже, неудобства не доставляет. спасибо)

t_stan
17.03.2013, 10:57
А чего вы так зациклились на HID клавиатуре? Вам нужен типа игрового джойстика, при его подключении работает и сам джойстик и экранная клавиатура, и через програмки под андроидом можно перенастраивать и переназначать кнопки на джойстике. Все намного проще... Купить самый простой USB или беспроводной джойстик и подключить его... Я просто весь вечер вчера читал ветку по андроиду ищя решение управления, а утром проснулся и меня осенило, ведь я не раз подключал USB джойстик к планшетам и играл... Вот и сейчас подключил джойстик ложитечь и он работает не мешая экранной клавиатуре и цена вопроса зависит только от фантазии.

wave_is
17.03.2013, 18:39
А чего вы так зациклились на HID клавиатуре? Вам нужен типа игрового джойстика, при его подключении работает и сам джойстик и экранная клавиатура, и через програмки под андроидом можно перенастраивать и переназначать кнопки на джойстике. Все намного проще... Купить самый простой USB или беспроводной джойстик и подключить его... Я просто весь вечер вчера читал ветку по андроиду ищя решение управления, а утром проснулся и меня осенило, ведь я не раз подключал USB джойстик к планшетам и играл... Вот и сейчас подключил джойстик ложитечь и он работает не мешая экранной клавиатуре и цена вопроса зависит только от фантазии.


давайте определимся, джойстик или геймпад?

Если геймпад, то я давно еще задавался этим вопросом (http://pccar.ru/showthread.php?t=18740&highlight=%E3%E5%E9%EC%EF%E0%E4).
Но мне никто так и не ответил толком.

Если есть опыт с геймпадами, то опишите его
+
подскажите каким софтом можно переназначить кнопки геймпада?

alexvtk
17.03.2013, 18:57
Если есть опыт с геймпадами, то опишите его
+
подскажите каким софтом можно переназначить кнопки геймпада?

Присоединяюсь к просьбе.

macau
17.03.2013, 20:52
прикручивал фейковый sixaxis (gasia), через https://play.google.com/store/apps/details?id=com.dancingpixelstudios.sixaxiscontroll er (после пинания автора). можно настроить как мышу-клаву или эмулировать нажатия на экран. но он у меня работает только через бт

wave_is
17.03.2013, 21:39
прикручивал фейковый sixaxis (gasia), через https://play.google.com/store/apps/details?id=com.dancingpixelstudios.sixaxiscontroll er (после пинания автора). можно настроить как мышу-клаву или эмулировать нажатия на экран. но он у меня работает только через бт

Подобный (http://www.ebay.com/itm/New-Black-Six-Axis-DualShock-3-Wireless-Bluetooth-Controller-for-Sony-PS3-/290879801617?pt=Video_Games_Accessories&hash=item43b9c98911)?
как у них качество?
для эмуляции мышки удалось настроить?
не знаете, в составе их есть переменные резисторы?
сколько он от акб живет?

t_stan
17.03.2013, 22:02
http://4pda.ru/forum/index.php?showtopic=202094&st=80
Обязательно наличие рута. Программой пользовался как-то раз не помню для чего, но она может переназначать клавиши. Сегодня сам посижу, попробую настроить проводной джойстик Logitech. Отпишусь, что получилось.
Китайцы реально как-то заставляют работать самые простые джойстики на своих андроид устройствах.

Беспроводные джойстики для PS3 даже фейковые работают от встроенного аккумулятора не менее 4-5 часов непрерывно, полностью заряжаются очень быстро, где-то за час. У меня есть и оригинал и фейк.

Первая прога наверное не совсем подходит, вот нашел еще http://4pda.ru/forum/index.php?showtopic=411431

macau
17.03.2013, 23:12
Подобный (http://www.ebay.com/itm/New-Black-Six-Axis-DualShock-3-Wireless-Bluetooth-Controller-for-Sony-PS3-/290879801617?pt=Video_Games_Accessories&hash=item43b9c98911)?
как у них качество?
для эмуляции мышки удалось настроить?
не знаете, в составе их есть переменные резисторы?
сколько он от акб живет?

качество как повезет. я брал на бике, с чипом gasia. сейчас для них поддержку и в лине и в ондроеде через костыль выше запилили. мышку вешал и на стики, и на кнопки. внутре на стиках
http://www.blogcdn.com/www.engadget.com/media/2007/04/sixaxis7_engadget_howto.jpg
http://www.blogcdn.com/www.engadget.com/media/2007/04/sixaxis8_engadget_howto.jpg
http://img.td-imgs.com/images/38/40/63840_763852_GP3-63840.jpg
потенциометры.
От батарейки у меня живет часа 3- больше не пробовал, надоедает. Уверен, что прожиивет столько же.

wave_is
17.03.2013, 23:31
http://4pda.ru/forum/index.php?showtopic=202094&st=80
Обязательно наличие рута. Программой пользовался как-то раз не помню для чего, но она может переназначать клавиши. Сегодня сам посижу, попробую настроить проводной джойстик Logitech. Отпишусь, что получилось.
Китайцы реально как-то заставляют работать самые простые джойстики на своих андроид устройствах.

Беспроводные джойстики для PS3 даже фейковые работают от встроенного аккумулятора не менее 4-5 часов непрерывно, полностью заряжаются очень быстро, где-то за час. У меня есть и оригинал и фейк.

Первая прога наверное не совсем подходит, вот нашел еще http://4pda.ru/forum/index.php?showtopic=411431

вроде бы обе проги не работают с джойстиками, только со встроенными кнопками

jundik
18.03.2013, 02:48
со smart keyboard pro работает и экранная и усб клава, проверил тока что. буду брать кнопку включения/выключения с клавы, не хочется планшет раскурочивать

wave_is
18.03.2013, 12:23
со smart keyboard pro работает и экранная и усб клава, проверил тока что. буду брать кнопку включения/выключения с клавы, не хочется планшет раскурочивать

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

Alex-NN
18.03.2013, 12:46
да, судя потому что глюк с клавой побежден возможностей стало побольше
правда, такая звуковуха - это самые дешевые кнопки из всех, вышеперечисленных вариантов

+ клаву проще купить
+ она тоже не дорогая
+ в них бывают энкодеры

- клава громоздкая

подскажите как обычно коннектятся к кнопкам клавы?
Оставляют всю клаву или только ее usb модуль?

P.S. Думаю, последующие рассуждения лучше вынести в отдельную тему про клаву


Вынимаешь из клавы контроллер и паяешь в разъем необходимые кнопки.
В предыдушем проекте все у меня прекрасно работало.

Больше всего времени заняло вызванивание-определение линий матрицы контроллера в привязке к конкретным клавишам.

И то, потому что просто не было схемы клавы. При наличии схемы, создать свой удобный пульт из контроллера клавы, вообще, плевое дело.

Главное красиво привязать все это к Андроиду, чтобы было функционально и удобно.:yes2:

wave_is
18.03.2013, 13:57
ого. на клавах больше сотни кнопок, выходим там больше сотни дорожек?
земля обычно общая?

я думаю стоит выпаять: Esc, перемотку, громкость, включение, паузу и может ентер
пока это хватит
все равно мы пока не научились привязывать запуск программ к комбинации клавиш

awtoap
18.03.2013, 14:04
ого. на клавах больше сотни кнопок, выходим там больше сотни дорожек?
земля обычно общая?

Никакой сотни дорожек и общей землей...организовано матрицей.

wave_is
18.03.2013, 14:06
ладно, пошел читать гугл. пока только один Нео попадается =)

iGeophysix
18.03.2013, 18:31
Ребятки, а кто знает, как на Ардуино запрограммировать нажатие мультимедийных кнопок HID устройства?

У меня Arduino Leonardo, и никак не могу понять, как менять дескриптор

Alex-NN
18.03.2013, 20:30
я думаю стоит выпаять: Esc, перемотку, громкость, включение, паузу и может ентер
Выпаивать ничего не надо.:smile2: Резинку и корпус клавы вместе с кнопками можно выбросить. А контроллер - в дело!:smile2:

все равно мы пока не научились привязывать запуск программ к комбинации клавиш

Это самое важное!!!:yes4:

macau
18.03.2013, 21:58
в тинси это делается в несколько строк:
if (button1.fallingEdge()) {
Keyboard.set_media(KEY_MEDIA_PLAY_PAUSE);
Keyboard.send_now();
Keyboard.set_media(0);
Keyboard.send_now();
}

wave_is
19.03.2013, 03:34
P.S. подводя итог:
1) резистивные кнопки пока лучше всего выводить ардуино или джойконом
2) аналоговые кнопки проще всего выводить мультимедий клавой.
3) чтобы при этом не пряталась экранная клава нужно юзать смарткейборд про
4) если у планшета нет юсб хоста или вы не планируете к нему подключать провода, то юзайте блютус гарнитуры с нопками
5) если вам не пугает китайский звук и у вас есть хост, то можно заюзать юсб звуковуху с кнопками (самый дешевый вариант)

6) ну а геймпад стоит юзать, когда хотите получить большего, например эмуляцию мышки при помощи стика или перенос экранных клавиш на хардверные. в таком случае оптимальным вариантом будет юзание сонивского геймпада и стороннего по.
-------------------------
по сути, в этом посте все ответы по кнопкам на андроид ПК
пока это все что мы смогли вместе накумекать

evgeny100
20.03.2013, 03:26
1) резистивные кнопки пока лучше всего выводить ардуино или джойконом
2) аналоговые кнопки проще всего выводить мультимедий клавой.

to wave_is С уважением, но это как говорят "масло - масляное". Не вижу разницы между резистивными и аналоговыми - одно и тоже.

wave_is
20.03.2013, 11:04
to wave_is С уважением, но это как говорят "масло - масляное". Не вижу разницы между резистивными и аналоговыми - одно и тоже.

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

я конечно понимаю, что термин "аналоговая кнопка" не совсем точный, но думаю, что сути это не меняет.

awtoap
20.03.2013, 13:09
Кто нибудь может проверить работают ли кнопки Power, Slip на мультимедийной клаве для планшета? То есть уводят/выводят из сна.

jundik
20.03.2013, 14:18
вводят и выводят изо сна. другой вопрос - как подключится в кнопке клавиатуры чтобы вывести отдельно кнопку на панель? подпоять не получается

Alex-NN
20.03.2013, 14:23
вводят и выводят изо сна. другой вопрос - как подключится в кнопке клавиатуры чтобы вывести отдельно кнопку на панель? подпоять не получается

Почему не получается? Что, на матрице контроллера нельзя найти контакты этой кнопки и туда припаяться. Зачем непосредственно к кнопке?

IVanAkv
20.03.2013, 16:18
P.S. подводя итог:
1) резистивные кнопки пока лучше всего выводить ардуино или джойконом


а можно с устройства PultIK прочитать нажатия на андроиде?

jundik
20.03.2013, 18:58
дублировать кнопку хотел для того, чтобы клавиатурой при необходимости пользоваться. правда при разборе все клавиши выпадают и сбор представляет собой некий пазл.
разобрал старую клаву и так не смог отследить как идут контакты определенной кнопки, все перемешивается. но эта на беглый взгляд.
все контакты идут к контроллеру, на котором штук 15 контактов. как я понимаю, при определенном замыкании контактов, например 5 и 12 или 3 и 8, и срабатывает кнопка. но в итоге можно сделать "коробочку" с контроллером чуть больше спичичного коробка и подпаянными к ним проводами и вывести несколько нужных кнопок.
поправьте меня, если я не правильно понял принцип работы.

Alex-NN
20.03.2013, 19:27
дублировать кнопку хотел для того, чтобы клавиатурой при необходимости пользоваться. правда при разборе все клавиши выпадают и сбор представляет собой некий пазл.
разобрал старую клаву и так не смог отследить как идут контакты определенной кнопки, все перемешивается. но эта на беглый взгляд.
все контакты идут к контроллеру, на котором штук 15 контактов. как я понимаю, при определенном замыкании контактов, например 5 и 12 или 3 и 8, и срабатывает кнопка. но в итоге можно сделать "коробочку" с контроллером чуть больше спичичного коробка и подпаянными к ним проводами и вывести несколько нужных кнопок.
поправьте меня, если я не правильно понял принцип работы.

Именно так я и сделал в предыдущем проекте.

wave_is
20.03.2013, 23:30
а можно с устройства PultIK прочитать нажатия на андроиде?

даже не знаю что это

VVi3ard
25.03.2013, 14:49
Возвращаясь к теме "РЕЗИСТИВНЫЕ кнопки": http://pccar.ru/showthread.php?t=18903
Там же частично решена и проблема CAN кнопок (по описанию только для BMW)

murano
25.03.2013, 14:54
Там же частично решена и проблема CAN кнопок (по описанию только для BMW)
Только там CAN шины и близко нет.

Kamik
30.03.2013, 04:59
кто нибудь знает где можно купить вот это (http://www.intercontrol.de/mobilelektronik/produkte/zubehoer/mmi/) или что-то похожее?
он же походу - http://www.grayhill.com/assets/1/7/VDC_datasheet.pdf

дорогой блин. нашел в одном месте только - 260 евриков..... за такие бабки нафиг бы оно сдалось

zsedcd
05.04.2013, 00:58
Возможно ли прикрутить к JoyCon энкодер?

wave_is
05.04.2013, 11:47
Возможно ли прикрутить к JoyCon энкодер?

конечно

Andrey_61
05.04.2013, 15:09
Отпишитесь, у кого CarPC JoyCon Exr работает с nexus 7, как он, не отваливается после сна?

zsedcd
06.04.2013, 01:22
А каким образом прикручивается? У энкодера больше двух ног.

Andrey_61
13.04.2013, 21:42
А для чего у нее 4 канала, можно ли на нее часть кнопок завести на один канал, а часть на другой

mcf1
14.04.2013, 02:17
Можно. Проверено.

Andrey_61
14.04.2013, 12:57
Это хорошо, хочу чтоб можно было имитировать нажатия alt+tab переключаясь между приложениями (аналог src на магнитолах).

IVanAkv
24.04.2013, 12:43
даже не знаю что это

http://carmonitor.ru/ru/advanced_search_result.php?search_in_description=1&keywords=PultIK
вот оно. использование устройства заключается в том, что при отсутствии рулевых кнопок в автомобиле можно установить любой ИК пульт от магнитолы на рулевое колесо и назначить кнопки ИК пульта на требуемые функции управления компьютером.
Только вот бы его к androidу прикрутить, было бы отлично

wave_is
24.04.2013, 14:50
http://carmonitor.ru/ru/advanced_search_result.php?search_in_description=1&keywords=PultIK
вот оно. использование устройства заключается в том, что при отсутствии рулевых кнопок в автомобиле можно установить любой ИК пульт от магнитолы на рулевое колесо и назначить кнопки ИК пульта на требуемые функции управления компьютером.
Только вот бы его к androidу прикрутить, было бы отлично

пробовал я ИК пульт в машине.
мне не понравилось качество срабатывания.
забил.

Сейчас нашел пока 3 лучших способа организовать кнопки на руле, если их там штатно не было:
1) блютус пульт системы паррот.
Кнопки:
- прием вызова
- отбой вызова
- плей/пауза
- пред. трек
- след. трек
- энкодер для громкости
все работает без шаманства из коробки, выглядит качественно

2) подрулевой резистивный пульт
выглядит шикарно. крепить просто.
к планшету подключаем через JoyCon
функционал выше. можно настраивать.
+ сам JoyCon дает 4 линии кнопок, а значит кроме пульта можно подвесить еще кнопок

3) подрулевой нерезистивный пульт.
выглядит шикарно. крепить просто, если пульт от Вашей модели.
таких мало. Часто французы делают такие для своих машин.
к планшету подключаем через клавиатуру.

VVi3ard
25.04.2013, 02:55
Вот еще интересный пульт:
http://www.sonicelectronix.com/item_36614_Axxess-RFASWC.html
Особенности: Работает по RF, если я верно понял эмулирует резистивные кнопки.
Само собой проблему связи с андроидом не решает.

macau
10.05.2013, 13:05
посоны, зацените какая няша http://www.amazon.com/Fusion-Control-Powered-Controlled-Rotary/dp/tech-data/B00ANRRZCG/ref=de_a_smtd?ie=UTF8&m=A1ZXWJYIISJIMI
парни с хда пишут что на 2.3 работает искаропки, как обычное hid-device
алсо http://www.amazon.com/Griffin-Technology-NA16029-Multimedia-Controller/dp/B003VWU2WA/ref=pd_sim_sbs_pc_1 тоже няшечка

wave_is
10.05.2013, 13:21
первая няшка жесть.
дорого
я думаю на ардуино будет намного дешевле и функциональней

вторая няшка радует законченностью решения + софтом.
я бы себе взял, но пока один вопрос есть. запрограммированные функции остаются в памяти устройства или они работают только при наличии виндовс программы

macau
10.05.2013, 13:51
если покупать ардуину у нас, цена получается примерно та же
по второй-нужно гуглить, но судя по попоболи макофилов в отзывах на амазоне, таки железка привязана к софту

wave_is
10.05.2013, 14:12
я смотрю он есть в русских магазинах
можно порасспрашивать
http://www.amac.ru/catalog/imac_accessoires/10857/
http://www.cplaza.ru/catalog/manipulators/1959/

Rage2
10.05.2013, 14:59
Поддержку PowerMate Griffin Technology, я вроде видел в ядре, т.е можно компильнуть модуль для работы этой железки.

macau
10.05.2013, 16:53
тоесть оно таки не хид-устройство? тогда ненужно

Rage2
10.05.2013, 17:46
Может и хид, кто его знает зачем те модули...??
А что так напугало?

wave_is
10.05.2013, 23:43
было бы здорово если бы кто-то купил и потестил =)
устройство красивое и с необходимым минимумом функционала

macau
12.05.2013, 10:57
Может и хид, кто его знает зачем те модули...??
А что так напугало?

зачем нам банально огороженные поделия? надо чтоб устройство работало искропки. а всякие кривые софтины пусть останутся на совести вендузятников:no:

tsynik
12.05.2013, 19:48
было бы здорово если бы кто-то купил и потестил =)
устройство красивое и с необходимым минимумом функционала

Моему товарищу такое дарили для мака года 4 назад, не пользуется. Все забываю спросить на тест ))) А драйвера в ядре для него точно есть, но, возможно, и не пригодятся. Софт нужен для настройки действий в разных программах, ибо там в этом основной смысл. Нам же достаточно энкодера и кнопки )

Себе заказал teensy 2.0 (она как раз может HID-ом прикидываться), так как вычитал в описании к астероидовской Unika, что мои кнопки таки резистивные, а не CAN, как я всегда думал )))

wave_is
12.05.2013, 20:05
Моему товарищу такое дарили для мака года 4 назад, не пользуется. Все забываю спросить на тест ))) А драйвера в ядре для него точно есть, но, возможно, и не пригодятся. Софт нужен для настройки действий в разных программах, ибо там в этом основной смысл. Нам же достаточно энкодера и кнопки )

Себе заказал teensy 2.0 (она как раз может HID-ом прикидываться), так как вычитал в описании к астероидовской Unika, что мои кнопки таки резистивные, а не CAN, как я всегда думал )))

буду признателен за тест, любопытство все таки ;)

wave_is
14.05.2013, 00:17
А вот еще один недорогой и интересный пульт для андроид КарПК (http://www.sony-ericsson.ru/forums2/index.php/topic/61791-%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-%D0%B0%D0%BA%D1%81%D0%B5%D1%81%D1%81%D1%83%D0%B0%D 1%80%D0%B0-sony-ericsson-liveview%E2%84%A2-mn800/).
Сразу с креплением на руль =)
да и питание привычное 5 вольт ;)

Кто что думает?

mcf1
14.05.2013, 02:50
SE уже больше года не существует.
да и к резистивным кнопкам ни какого отношения не имеет

wave_is
14.05.2013, 10:38
SE уже больше года не существует.
да и к резистивным кнопкам ни какого отношения не имеет

понимаю что не резистивные кнопки, но пока общественность не представит интереса, смысла не вижу делать отдельную тему

устройство явно делают китайцы. модель СЭ.
работает по отзывам хорошо

2 хардверные и 4 емкостные кнопки, умеет выводить обложку альбома, название трека, менять громкость и переключать песни

возможно даже, удасться заставить ее показывать фотки звонящих

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

+ качественный экран, все работает искоропки
+ цена менее 20 у.е.

Имхо, очень неплохой донор в пару к карпк.
----------------------------------------------

заказал себе такой на пробу. будем тестить ;)

VVi3ard
14.05.2013, 19:14
А где такая цена? Я только за 1800 нашел

wave_is
14.05.2013, 21:11
А где такая цена? Я только за 1800 нашел

я взял за 19,99 у.е.
но это в сша
с пересылкой в Украину минимум находил за 32 у.е.

как вариант взять на али с купоном, но мне что-то показалась идея взять в штатах надежней

Jakim
29.05.2013, 14:57
Кто-нибудь знает, как имитировать нажатие ALT TAB ?

segamitich
30.05.2013, 08:49
в .kl так и написать TAB ALT

qwerty27
31.05.2013, 17:43
Что скажете по поводу использования звуковой вместо клавы?
http://dipcore.com/?p=263
принципе готовый hid, вот только непонятно, можно ли использовать другие номиналы резисторов, и как заткнуть звуковую оставив только hid

Алексей Барс
18.06.2013, 13:05
Имеется вот такой девайс (подобный). Остался после продажи китайского комбайна (на Win CE). На нём написано "Can bus decoder". Хотя кнопки у меня резистивные (Mitsubishi Lancer X). Можно ли его каким-то образом сконнектить с Нексусом? Тратиться на джойкон/ардуину не очень хочется. :smile2:

YAM1966
20.06.2013, 11:57
Как раз начал себе делать контроллер резистивных кнопок руля.

Мне достаточно было двух каналов. Так-же он контроллирует и 4-х проводное тач-стекло.
При этом по USB прикидывается HID тачем под андроид, HID тачем под винду, HID клавиатурой и HID устройством для настройки и апдейта софта.
тач и клава работают как под виндой, так и под андроидом.
Все сделано на дешевой mega8.
Так вот вопрос по резистивным кнопкам, так-ли необходимо имитировать нажатие 6 кнопок одновременно, или скажем 2-х нажатых одновременно кнопок предостаточно, ну еще конечно модификатор (ALT, CTRL, SHIFT, GUI)?
Необходимо ли имитировать последовательные отдельные нажатия?

Jagdriver
07.07.2013, 13:30
У меня стоит parrot asteroid smart

Резистивный протокол. Jaguar x type. Подцеплен через адаптор Unika (работает только с парротом)

Отлично пашут все 6 кнопок с руля +голосовые команды

ruzzzteg
07.07.2013, 20:02
Дядьки помогите разобраться с кнопками руля...
машина toyota FJ Cruiser 2007 г.в.
имеется вот такая схема подключения к радной магнитоле
http://i067.radikal.ru/1307/ef/dd264f8fb3c7.jpg
могу ли я подключиться к NEXUS 7 32Gb wi-fi+3G при помощи CarPC JoyCon EX Carputer Car PC Stering Wheel Interface или надо что нибудь другое использовать

mcf1
08.07.2013, 12:52
могу ли я подключиться к NEXUS 7 32Gb wi-fi+3G при помощи CarPC JoyCon EX Carputer Car PC Stering Wheel Interface или надо что нибудь другое использовать

да, без проблем. к тому же используя кнопку MODE можно будет использовать сочетания клавиш, например MODE Seek+

ruzzzteg
20.07.2013, 23:18
Товарищи...
а как в андройде обстоят дела с управлением по ИК...
может проще всего купить пультец и управлять в свое удовольствие... конечно если есть програмка которая назначит правильно кнопки...
http://a.a.d-cd.net/75c1248s-480.jpg

YAM1966
31.07.2013, 20:28
Девайс готов http://pccar.ru/showthread.php?t=19437

xxoma
27.08.2013, 20:15
Товарищи...
а как в андройде обстоят дела с управлением по ИК...
может проще всего купить пультец и управлять в свое удовольствие... конечно если есть програмка которая назначит правильно кнопки...
http://a.a.d-cd.net/75c1248s-480.jpg

я делал ик приемник на ардуине который эмулирует нажатия медиа клавиш юсб клавиатуры. Если интересно расскажу подробности :smile2:

Alex-NN
27.08.2013, 20:31
Давай, давно жду подобного устройства!!!

xxoma
28.08.2013, 17:04
Давай, давно жду подобного устройства!!!

Все просто, я взял дешевую юсб клаву, вытянул из нее саму плату контроллера. Нашел какие выводу надо замкнуть для конкретной кнопки. Написал скетч с помощью которого ардуина при определенном коде ик пульта подает логическую 1 на определенный вывод к которому подключена 561КТ3 которая в свою очередь замыкает нужные выводы на контроллере клавиатуры. Можно было, конечно, обойтись без контроллера клавиатуры а перепрошить ардуину что бы она определялась как USB HID устройство но я планирую собрать на макетке отдельно девайс а не использовать целую ардуину для этого. Если надо схему или скетч то позднее выложу. Хотя там ничего сложного. Стандартная библиотека IR + case который выбирает под нужный код нужное действие.
Еще планирую подцепить температурный дачтик и выводить значения на виджет. Но с программированием под андроид пока что у меня туго. Будут просить знакомого что бы написал виджет.

Alex-NN
28.08.2013, 20:26
Если надо схему или скетч то позднее выложу.
Выкладывай, конечно, подробности.:yes2:

Еще планирую подцепить температурный дачтик и выводить значения на виджет.

+1,
После Икара тоже не хватает датчиков разных на экране.
Если осилите виджет вывода температуры, думаю, многим это будет интересно.:yes2:

SuperLSD
06.09.2013, 11:31
а просто кнопки на руле получилось у кого нибудь подцепить, и как?

s.m.
06.09.2013, 11:41
Выкладывай, конечно, подробности.:yes2:



+1,
После Икара тоже не хватает датчиков разных на экране.
Если осилите виджет вывода температуры, думаю, многим это будет интересно.:yes2:

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

Alex-NN
06.09.2013, 11:58
ну ничего сложного в виджете таком нет. код для термометра есть в моем проекте - в скетче и кому надо - могу кусок жава кода дать который вытаскивает эту температуру из ардуины
Было бы неплохо!:yes4:

s.m.
06.09.2013, 13:05
Было бы неплохо!:yes4:

Стучитесь в личку с конкретными вопросами - помогу

ilya174
13.09.2013, 08:14
У кого-нибудь получилось подключить Arduino uno к планшету в качестве hid устройства?
Сделал все как написано здесь: http://mitchtech.net/arduino-usb-hid-keyboard/
но ни ББ ни планшет не распознают hid устройство.

Maxim Droy
13.09.2013, 13:50
У кого-нибудь получилось подключить Arduino uno к планшету в качестве hid устройства?
Сделал все как написано здесь: http://mitchtech.net/arduino-usb-hid-keyboard/
но ни ББ ни планшет не распознают hid устройство.

Нормальная прошивка (http://hunt.net.nz/users/darran/weblog/b3029/attachments/03237/Arduino-keyboard-0.3.hex-hover.png)

ilya174
16.09.2013, 14:36
Благодарю!
Все заработало, пытаюсь написать скетч для управления планшетом от штатных кнопок и автоматикой питания.

salo
26.09.2013, 19:17
кто-нибудь пробовал подключать пульт?
есть задача подружить его с кнопками на руле.
самое важное это переключение трэков и громкость.
вот такой например :
пульт универсальный (http://pages.ebay.com/link/?nav=item.view&id=300964947547)

mcf1
26.09.2013, 20:07
думаю он в системе как мышь и клавиатура определяется, должен заработать без проблем. В описании есть поддержка андроид.

salo
26.09.2013, 20:18
тоесть идея вполне рабочая, не надо что-то мутить с резестивными пепеходниками и проводами.
распотрошил пульт, припоял к кнопкам руля, и заряжай, меняй батарейки раз в полгода

anton2204
26.09.2013, 22:11
Тоже интересный/аналогичный пультик нашел Tooploo T2 Wireless Gyroscope Air Mouse (http://www.android55.ru/index.php?page=shop.product_details&category_id=29&flypage=flypage.tpl&product_id=1601&option=com_virtuemart&Itemid=6)

mcf1
27.09.2013, 01:39
А зачем 4 канала резестивных кнопок, по мне так одного достаточно.
Или я что то не понимаю?
Ссылку на одно канальный вариант давал выше.

как оказалось, в моей XV на руле восемь кнопок, по четыре на двух линиях. т.е. joyconn подошел очень даже.

avgaz
27.09.2013, 02:32
кто-нибудь пробовал подключать пульт?
есть задача подружить его с кнопками на руле.
самое важное это переключение трэков и громкость.
вот такой например :
пульт универсальный (http://pages.ebay.com/link/?nav=item.view&id=300964947547)
По сути можно любую мышку взять скажем где 4 кнопки, переназначить их как вам нужно, ну и распотрошить её

lti1
28.09.2013, 04:47
При наличии bluetooth в планшете можно еще сделать на основе ИК управление Android по Bluetooth (http://pccar.ru/showthread.php?t=19559). Arduino Pro Mini atmega328 3.3V/8M (http://www.ebay.com/itm/New-Pro-Mini-atmega328-3-3V-8M-Replace-ATmega128-Arduino-Compatible-Nano-/130905365831?pt=LH_DefaultDomain_0&hash=item1e7a915d47) имеет очень маленькие размеры, а bluetooth HC-05 (http://www.ebay.com/itm/180957186752?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649) ещё меньше, засунуть их прямо в руль. Необходимо только обеспечит питание 3.3 вольта, но там где есть кнопки на руле должно быть и питание, а при отсутствии можно запитать от кнопки сигнала.

xxoma
01.10.2013, 02:06
Вот делаю прогу на основе https://github.com/ksksue/FTDriver/tree/master/tutorial/FTDriverTutorial1 которая принимает данные с ик пульта с помощью ардуины по serial port и управляет Power Amp-ом и системной громкостью, пока что все недопиленое но работает. Так как это моя первая прога для Андроид то строго не судите, появиться время - доделаю.
Для работы нужно ардуину с подключеным инфракрасным приемником.
Заливаете в ардуину скетч типа этого
#include <IRremote.h>

int RECV_PIN = 13;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}

void loop() {
if (irrecv.decode(&results)) {
digitalWrite(8,HIGH);


if (results.value==0xFF906F) {//поменяйте на свой код
//Serial.print(results.value, HEX);
Serial.print(1);
delay(100);
}

if (results.value==0xFFC23D) {//поменяйте на свой код
Serial.print(2);
delay(100);
}
if (results.value==0xFFA857) {//поменяйте на свой код
Serial.print(3);
delay(100);
}

if (results.value==0xFF02FD) {//поменяйте на свой код
Serial.print(4);
delay(100);
}



if (results.value==0xFF629D) {//ch+
Serial.print(5);
delay(100);
}

if (results.value==0xFF22DD) {//eq
Serial.print(6);
digitalWrite(A2,HIGH);
delay(100);
digitalWrite(A2,LOW);
}
if (results.value==0xFFE21D) {//ch-
Serial.print(7);
delay(100);
}

if (results.value==0xFFA25D) {//pause
Serial.print(8);
delay(100);
}
irrecv.resume(); // Receive the next value
digitalWrite(8,LOW);
}
}
Меняете коды от пульта на свои. Прога принимает цифры от 1 до 8 делает соотвествующие действия.
VOL_UP_CODE = 2;
VOL_DOWN_CODE = 4;
PREV_CODE = 1;
NEXT_CODE = 3;
UP_CODE = 7;
DOWN_CODE = 5;
SHUFFLE ON/OFF= 6;
PLAY_PAUSE_CODE = 8;
Прога юзает Power Amp api поэтому с другими проигрывателями работать не будет, только громкость получиться регулировать. В планах сделать нормальный юзер интерфейс с возможностью самому выбирать нужное действие под конкретный код кнопки ик пульта. Прога запускает отдельный сервис после старта которого главное активити можно закрыть. Есть пока что не решенная проблема с запросом доступа к юсб девайсам, который даже после нажатия "больше не спрашивать" все равно после отключения/подключения otg спрашивает разрешения, поэтому кнопку Start Service надо нажимать несколько раз пока сервис не подконектиться к юсб сериал. Еще планирую в будущим прикрутить датчики температуры и выводить данные на виджет. Помощь разбирающихся людей приветсвуется. Если кому надо исходники то выложу, может совместными усилиями допилим :read2:
П.С. Тестировалось на нексус 7 с тимуровской прошивкой и Sams Galaxy S2.

avgaz
01.10.2013, 21:55
Как все сложно с IR пультом не легче прикупить такой маленький http://www.aliexpress.com/item/Laser-Air-Mouse-2-4G-Wireless-Remote-Control-For-Android-Smart-TV-Box-Desktop-Laptop-Mini/1105532496.html и сделать крепление для руля?

lti1
15.11.2013, 10:05
Начало здесь (http://pccar.ru/showthread.php?p=277235#post277235).
Nett, в папке \arduino-1.0.5\hardware\arduino\cores\arduino для IDE 1.0.5 или \arduino-1.6.5-r5\hardware\arduino\avr\cores\arduino для IDE 1.6.5 меняете два файла USBAPI.h, HID.cpp на те, что во вложении соответственно. И добавляете в код из поста murano (http://pccar.ru/showpost.php?p=248366&postcount=72) нужные действия, не нужные удаляете
int analogPin=0;
int data;

void setup()
{
Keyboard.begin();
Serial.begin(9600);
}

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
/*поддерживаемые коды управляющих клавиш
http://arduino.cc/en/Reference/KeyboardModifiers*/
if (data==614) Keyboard.write(176); //ENTER
if (data==122) Keyboard.write(216); //стрелка влево
if (data==165) Keyboard.write(215); //стрелка вправо
if (data==216) Keyboard.write(218); //стрелка вверх
if (data==276) Keyboard.write(217); //стрелка вниз
if (data>=315 && data<=345) // приглушение звука
{
Remote.mute();
Remote.clear();
}
if (data>=420 && data<=460) // воспроизведение / пауза
{
Remote.play_pause();
Remote.clear();
}
delay(100);
}
И как писал murano, добавить диапазон значения +- 5%, напимер если значение клавиши 330 вместо data==330 использовать data>=315 && data<=345 и т.д.
Возможные варианты мультимедиа клавиш
// Volume
Remote.increase(); Volume Up
Remote.decrease(); Volume Down
Remote.mute(); Mute

// Playback
Remote.play(); Play
Remote.pause(); Pause
Remote.play_pause(); Play/Pause
Remote.stop(); Stop

// Track Controls
Remote.next(); Next
Remote.previous(); Previous
Remote.forward(); Fast Forward
Remote.rewind(); Rewind

Remote.power(); Power
Remote.home(); WWW Home
Remote.search(); WWW Search
Кстати, какая у Вас плата? Должна быть Arduino Leonardo или Arduino Pro Micro.
Исходник здесь (http://stefanjones.ca/blog/arduino-leonardo-remote-multimedia-keys/), Stop заменен на Play/Pause

anton2204
15.11.2013, 10:50
Можно вот это (http://pccar.ru/showthread.php?t=19437) применить без сложной доработки и настройки! Сам буду использовать эту платку для управления Андроид планшетом(мультимедиа кнопки) с универсального перепрограммируемого ИК пульта на руле.
Но можно и резистивные кнопочки прикрутить:- 4 канала для подключения резистивных кнопок (до 15 кнопок на канал)
Если я не прав - пусть меня YAM1966 поправит ))))

lti1
15.11.2013, 11:20
anton2204, согласен, это достойное устройство. Но если есть плата Arduino Leonardo или Arduino Pro Micro, зачем покупать ещё что то?
ИМХО с Arduino интереснее ну и цена Arduino Pro Micro всего 6-8$ с eBay.

YAM1966
15.11.2013, 11:48
anton2204, согласен, это достойное устройство. Но если есть плата Arduino Leonardo или Arduino Pro Micro, зачем покупать ещё что то?
ИМХО с Arduino интереснее ну и цена Arduino Pro Micro всего 6-8$ с eBay.

Если самому интересно программировать и изучать что-то новое, то согласен, ардуино именно для этого. Но ардуино - в общем-то конструктор-игрушка для непрофессионалов. Ни разу не встречал еще именно программистов, которые используют это чудо в своих разработках.
Если Вы сами разрабатываете библиотеки для работы с конкретными внешними устройствами - респект Вам. Если пользуетесь готовыми - тоже молодцы, но не забывайте, что их писали тоже люди со своим знанием и подходом. И нет гарантии что их подход в понимании работы будет таким-же как и у Вас.

Так, для затравки: http://habrahabr.ru/post/146489/

lti1
15.11.2013, 12:34
Я именно такой юзер, мне интересно побаловаться микро контролерами, но не так глубоко как Вы в этом разбираетесь.

Митрич18
15.11.2013, 13:57
Если самому интересно программировать и изучать что-то новое, то согласен, ардуино именно для этого. Но ардуино - в общем-то конструктор-игрушка для непрофессионалов. Ни разу не встречал еще именно программистов, которые используют это чудо в своих разработках.
Если Вы сами разрабатываете библиотеки для работы с конкретными внешними устройствами - респект Вам. Если пользуетесь готовыми - тоже молодцы, но не забывайте, что их писали тоже люди со своим знанием и подходом. И нет гарантии что их подход в понимании работы будет таким-же как и у Вас.

Так, для затравки: http://habrahabr.ru/post/146489/
Согласен полностью, сам ковырялся,освоить можно, но что бы это все работало как надо и без сбоев на любительском уровне вариант не прокатит, особенно когда во время работы количество задач начинает увеличиваться и алгоритмы становятся все сложнее и сложнее.
А когда это еще происходит на уровне хобби, то времени просто тупо не хватает, так как еще надо зарабатывать на жизнь и уделять внимание другим вещам помимо хобби.

Nett
15.11.2013, 15:06
Начало здесь (http://pccar.ru/showthread.php?p=277235#post277235).
Nett, в папке \arduino-1.0.5\hardware\arduino\cores\arduino меняете два файла USBAPI.h, HID.cpp на те что во вложении. И добавляете в код из этого поста (http://pccar.ru/showpost.php?p=248366&postcount=72) нужные действия, не нужные удаляете

Спасибо огромное за подробную инструкцию, все заработало с первого раза:smile1:, вот только вопрос остался, в шапке нексуса и у murano написано что экранная клава не работает, однако она как была так и осталось, это нормально или что-то не так?

lti1
15.11.2013, 16:20
Спасибо огромное за подробную инструкцию, все заработало с первого раза:smile1:, вот только вопрос остался, в шапке нексуса и у murano написано что экранная клава не работает, однако она как была так и осталось, это нормально или что-то не так?
Всегда пожалуйста!:smile2:
Это заработало? А то как уже писал, сам не проверял, не на чем.
// Volume
Remote.increase(); Volume Up
Remote.decrease(); Volume Down
Remote.mute(); Mute

// Playback
Remote.play(); Play
Remote.pause(); Pause
Remote.play_pause(); Play/Pause
Remote.stop(); Stop

// Track Controls
Remote.next(); Next
Remote.previous(); Previous
Remote.forward(); Fast Forward
Remote.rewind(); Rewind
По клавиатуре не стоит парится, у меня SGT2 то же не пропадает при подключении хардовой клавы.

Nett
15.11.2013, 16:36
Всегда пожалуйста!:smile2:
Это заработало? А то как уже писал, сам не проверял, не на чем.
// Volume
Remote.increase(); Volume Up
Remote.decrease(); Volume Down
Remote.mute(); Mute

// Playback
Remote.play(); Play
Remote.pause(); Pause
Remote.play_pause(); Play/Pause
Remote.stop(); Stop

// Track Controls
Remote.next(); Next
Remote.previous(); Previous
Remote.forward(); Fast Forward
Remote.rewind(); Rewind


Да, как раз от сюда и брал. Все как часики швейцарские работает. Правда до машины еще не дошел, проверял дома на резисторах, думаю разницы не будет. P.S все делал на ардуино леонардо.

ilya174
24.11.2013, 00:06
Вот что у меня получилось.
Скетч для ардуино уно. Ардуино определяется как HID устройство. В скетче управление планшетом ресистивными кнопками и управление питанием.

// Для рулевых кнопок
uint8_t buf[8] = {
0 };

// реле питания звуковой карты
#define relePin4 11

// Задержки между нажатиями конкретных кнопок, миллисекунды
#define KEY_CH_VOL_MINUS_DELAY (200)
#define KEY_CH_VOL_PLUS_DELAY (200)
#define KEY_CH_PAUSE_DELAY (200)
#define KEY_CH_PREV_TRACK_DELAY (200)
#define KEY_CH_FORW_TRACK_DELAY (200)
#define KEY_CH_TAB_DELAY (200)
#define KEY_CH_ESC_DELAY (200)
#define KEY_CH_AUDIO_OFF_DELAY (400)
#define KEY_CH_PLUS_DELAY (200)
#define KEY_MODE_DELAY (200)
#define KEY_MODE_DELAY (200)
#define KEY_MODE_DELAY (200)
#define KEY_MODE_DELAY (200)

// Значения кнопок
#define KEY_CH_VOL_MINUS (1023)
#define KEY_CH_VOL_PLUS (1523)
#define KEY_CH_PAUSE (1500)
#define KEY_CH_PREV_TRACK (1500)
#define KEY_CH_FORW_TRACK (1500)
#define KEY_CH_TAB (1500)
#define KEY_CH_ESC (1500)
#define KEY_CH_AUDIO_OFF (700)
#define KEY_CH_PLUS (1500)
#define KEY_CH_MINUS (1500)
#define KEY_CH_MINUS (1500)
#define KEY_CH_MINUS (1500)
#define KEY_CH_MINUS (1500)


// Погрешность при чтении кнопок
#define KEY_DELTA (50)

// Коды кнопок, что отсылаем в порт внешней проге
#define CH_VOL_MINUS (226)
#define CH_VOL_PLUS (43)
#define CH_PAUSE (3)
#define CH_PREV_TRACK (4)
#define CH_FORW_TRACK (5)
#define CH_TAB (14)
#define CH_ESC (128)
#define CH_AUDIO_OFF (1)
#define CH_PLUS (6)
#define CH_MINUS (7)
#define CH_MINUS (8)
#define CH_MINUS (9)
#define CH_MINUS (12)
#define NONE (0)

// Кнопки
#define ACCPin 2 // через делитель к ACC
#define ControlPin A1 // через делитель к +12В
#define relePin1 8 // реле USB HUB
#define relePin2 9 // реле планшета (OTG)
#define relePin3 10 // реле звуковой карты (замыкания на землю)
#define ONHUB 1000 // время включения реле HUB
#define ONTablet 4000 // время включения планшета
#define ONAudio 9000 // время включения аудио
#define OFFHUB 8000 // время выключения реле HUB
#define OFFTablet 3000 // время выключения планшета
#define OFFAudio 10 // время выключения аудио

unsigned long LastTimeKeyPressed = millis();
unsigned long duration, millisold, off = 0;
boolean stateACC, relestate1, relestate2,relestate3,relestate4 = 0;
int LastKeyPressed = NONE;
int flag = 1;
int flag2 = 0;
void setup()
{
Serial.begin(9600);
pinMode(relePin1, OUTPUT);
pinMode(relePin2, OUTPUT);
pinMode(relePin3, OUTPUT);
pinMode(relePin4, OUTPUT);
}

void loop()
{
ReadSteering();
Knopki();
delay(10);
}

// Читает рулевые кнопки и пишет в порт код нажатой кнопки
void ReadSteering()
{
pinMode(relePin4, OUTPUT);
digitalWrite(relePin4,flag );
unsigned long TimeKeyPressed;
int KeyPressed = NONE;
int dt1 = analogRead(A0);
delay(10);
int dt2 = analogRead(A0);
if (abs(dt1-dt2)<=490 and dt1<1024 ) //если нет дребезга и что-то есть
{
// Регистрируем время нажатия кнопки

TimeKeyPressed = millis(); //получить реальное время

//CH_VOL_MINUS
if ( (dt1-KEY_DELTA <= KEY_CH_VOL_MINUS) and (dt1+KEY_DELTA >= KEY_CH_VOL_MINUS) )
{
if ( (LastKeyPressed != CH_VOL_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_VOL_MINUS_DELAY))
{
LastKeyPressed = CH_VOL_MINUS;
buf[2] = CH_VOL_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_VOL_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_VOL_PLUS) and (dt1+KEY_DELTA >=KEY_CH_VOL_PLUS) )
{
if ( (LastKeyPressed != CH_VOL_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_VOL_PLUS_DELAY) )
{
LastKeyPressed = CH_VOL_PLUS;
buf[2]=CH_VOL_PLUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PAUSE
else if ( (dt1-KEY_DELTA <= KEY_CH_PAUSE) and (dt1+KEY_DELTA >=KEY_CH_PAUSE) )
{
if ( (LastKeyPressed != CH_PAUSE) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PAUSE_DELAY) )
{
LastKeyPressed = CH_PAUSE;
buf[2]=CH_PAUSE;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PREV_TRACK
else if ( (dt1-KEY_DELTA <= KEY_CH_PREV_TRACK) and (dt1+KEY_DELTA >=KEY_CH_PREV_TRACK) )
{
if ( (LastKeyPressed != CH_PREV_TRACK) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PREV_TRACK_DELAY) )
{
LastKeyPressed = CH_PREV_TRACK;
buf[2]=CH_PREV_TRACK;

LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_FORW_TRACK
else if ( (dt1-KEY_DELTA <= KEY_CH_FORW_TRACK) and (dt1+KEY_DELTA >=KEY_CH_FORW_TRACK) )
{
if ( (LastKeyPressed != CH_FORW_TRACK) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_FORW_TRACK_DELAY) )
{
LastKeyPressed = CH_FORW_TRACK;
buf[2]=CH_FORW_TRACK;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_TAB
else if ( (dt1-KEY_DELTA <= KEY_CH_TAB) and (dt1+KEY_DELTA >=KEY_CH_TAB) )
{
if ( (LastKeyPressed != CH_TAB) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_TAB_DELAY) )
{
LastKeyPressed = CH_TAB;
buf[2]=CH_TAB;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_ESC
else if ( (dt1-KEY_DELTA <= KEY_CH_ESC) and (dt1+KEY_DELTA >=KEY_CH_ESC) )
{
if ( (LastKeyPressed != CH_ESC) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_ESC_DELAY) )
{
LastKeyPressed = CH_ESC;
buf[2]=CH_ESC;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_AUDIO_OFF
else if ( (dt1-KEY_DELTA <= KEY_CH_AUDIO_OFF) and (dt1+KEY_DELTA >=KEY_CH_AUDIO_OFF) )
{
if ( (LastKeyPressed != CH_AUDIO_OFF) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_AUDIO_OFF_DELAY)&& flag==1)
{
digitalWrite(relePin4, flag2);
flag = 0;
flag2 = 1;
}
else if ( (LastKeyPressed != CH_AUDIO_OFF) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_AUDIO_OFF_DELAY)&& flag==0)
{
digitalWrite(relePin4, flag2);
flag = 1;
flag2 = 0;
}
LastKeyPressed = CH_AUDIO_OFF;
LastTimeKeyPressed = TimeKeyPressed;
releaseKey();
}

//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
}
}

void releaseKey()
{
buf[0] = 0;
buf[2] = 0;
Serial.write(buf, 8); // Release key
}

void Knopki()
{
if (digitalRead(ACCPin)&&!stateACC) {
stateACC=1;
duration = millis();
}
if (!digitalRead(ACCPin)&&stateACC) {
stateACC=0;
off = millis();
}
if(digitalRead(ACCPin) && stateACC && millis ()-duration > ONHUB){
digitalWrite(relePin1, HIGH);
relestate1 = 1;
millisold = millis();
}
if(digitalRead(ACCPin) && stateACC && millis ()-duration > ONTablet){
digitalWrite(relePin2, HIGH);
relestate2 = 1;
millisold = millis();
}
if(digitalRead(ACCPin) && stateACC && millis ()-duration > ONAudio){
digitalWrite(relePin3, HIGH);
relestate3 = 1;
millisold = millis();
}
if(!digitalRead(ACCPin) && !stateACC && millis () -off> OFFHUB){
digitalWrite(relePin1, LOW);
relestate1 = 0;
millisold = millis();
}
if(!digitalRead(ACCPin) && !stateACC && millis () -off > OFFTablet){
digitalWrite(relePin2, LOW);
relestate2 = 0;
millisold = millis();
}
if(!digitalRead(ACCPin) && !stateACC && millis () -off > OFFAudio){
digitalWrite(relePin3, LOW);
relestate3 = 0;
millisold = millis();
}
}

timtman
02.12.2013, 15:05
Рабочий код чтения кнопок для Arduino Leonardo и Micro - проверно на китайском Arduino Pro Micro .
выдает клавиатурные сочетания Win+A, Win+B ... Win+G
удобно для настройки через быстрый запуск http://pccar.ru/showpost.php?p=279247&postcount=54
int analogPin=A0;
int data;

int myRes[7]={291,197,160,232,263, 66,113}; // значения установлены опытным путем
char myKey[7]={'a','b','c','d','e','f','g'}; //х.з. буквы какие-то
int n=7; //размер массивов выше
int i_old=n+1; //надо так (типа война с дребезгом, хотя тут его нет)
int i;

void setup()
{
// Serial.begin(9600);
pinMode(analogPin,INPUT);
digitalWrite(analogPin,HIGH);
Keyboard.begin();
}

void loop()
{
data=analogRead(analogPin);
// Serial.println(data);
for (i=0;i<n;i=i+1)
{
if(data>myRes[i]-15 && data<myRes[i]+15 && i_old!=i)
{
i_old=i;
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press(myKey[i]);
delay(100);
Keyboard.releaseAll();
}
if(data>1000) { i_old=n+1; }
}
delay(50);
}


Резистивных кнопок у меня 7 шт, номиналы у них 2кОм, 4кОм ... 14кОм (хотя не суть).

Опять ВАЖНО: К ардуине подключаюсь к GND и А0 (делитель самому делать не надо).

P.S. Перевод выражения "подтяжка вверх" (стырено с ардуино.ру):
Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор. Нагрузочного резистра достаточно чтобы светодиод, подключенный к входу, светил тускло. Если вдруг светодиод работает, но очень тускло, возможно необходимо установить режим выход (OUTPUT) функцией pinMode().

macau
22.12.2013, 17:47
Вот кстати мой вариант резестивных кнопок (http://macauap.blogspot.ru/2013/12/blog-post.html) а-ля нищеброд

Daniel
24.12.2013, 10:14
Вот кстати мой вариант резестивных кнопок (http://macauap.blogspot.ru/2013/12/blog-post.html) а-ля нищеброд

+1

Только я убрал резисторы, и подпаялся к контроллеру клавиатуры. А установка - 1 в 1. (фото в подписи) :smile2:

Andrey_T
11.01.2014, 23:42
Сделал для TOYOTA резистивного руля интерфейс на Arduino UNO R3
За основу взял код отсюдаhttp://compcar.ru/forum/showthread.php?t=4640&p=57800&viewfull=1#post57800
и отсюдаhttp://atomic-cactus.com/2013/03/26/parrot-asteroid-smart-steering-wheel-controls-using-arduino-part-1/, здесь же все подробно описано, как превратить ардуину в HID клавиатуру. Так как устройство Parrot Asteroid Smart с системой Android 2.3, то HID коды управляют напрямую только громкостью, все остальное реализовано через комбинацию кнопок SEARCH+KEY с помощью таскера и меню быстрого вызова приложений.

/ Задержки между нажатиями конкретных кнопок, миллисекунды
#define KEY_CH_MINUS_DELAY (500)
#define KEY_CH_PLUS_DELAY (500)
#define KEY_VOL_MINUS_DELAY (200)
#define KEY_VOL_PLUS_DELAY (200)
#define KEY_MODE_DELAY (800)
#define VARIANT_DELAY (200) //Время работы в режиме курсора (циклов по 125 милисекунд)
#define SOURCE_DELAY (3000) //Время выбора источника звука

// Значения кнопок для резистора подпорки 3Ком
#define KEY_CH_MINUS (93)
#define KEY_CH_PLUS (20)
#define KEY_VOL_MINUS (529)
#define KEY_VOL_PLUS (256)
//#define KEY_MODE (805)

// Погрешность при чтении кнопок
#define KEY_DELTA (30)

// Номера кнопок
#define CH_MINUS (1)
#define CH_PLUS (2)
#define VOL_MINUS (3)
#define VOL_PLUS (4)
#define MODE (5)
#define NONE (0)


unsigned long LastTimeKeyPressed = millis();
unsigned long LastTimeModePressed = millis();
int LastKeyPressed = NONE;
int i=0;
boolean radio = false;
boolean LastModePressed = false;
boolean KeysPressed = false;
boolean ModePressed = false;
boolean LastMode = false;
boolean KMode = false;
boolean Variant = false;
boolean SoundSource = false;
boolean EnterPressed = false;
uint8_t buffer[8] = {
0};
boolean dirty = true;

void setup()
{
Serial.begin(9600);
pinMode(8, INPUT);
digitalWrite(8, HIGH);
}

void loop()
{
ReadSteering();
delay(75);
releaseKey();
}

// Читает рулевые кнопки и пишет в порт код нажатой кнопки
void ReadSteering()
{
unsigned long TimeKeyPressed;
int KeyPressed = NONE;
int dt1 = analogRead(0);
//Нажата кнопка MODE
ModePressed=(digitalRead(8) == LOW);
if (ModePressed and !LastMode)
{
LastTimeModePressed=millis();
}
delay(50);
int dt2 = analogRead(0);
if (abs(dt1-dt2)<=5 and dt1<900 ) //если нет дребезга и что-то есть
{
// Регистрируем время нажатия кнопки
TimeKeyPressed = millis();

//CH_MINUS
if ( (dt1-KEY_DELTA <= KEY_CH_MINUS) and (dt1+KEY_DELTA >= KEY_CH_MINUS) )
{
if ( (LastKeyPressed != CH_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_MINUS_DELAY) )
{
LastKeyPressed = CH_MINUS;
KeyPressed = CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
KeyPressed = CH_PLUS;
LastTimeKeyPressed = TimeKeyPressed;
}
}
//VOL_MINUS
else if ( (dt1-KEY_DELTA <= KEY_VOL_MINUS) and (dt1+KEY_DELTA >=KEY_VOL_MINUS) )
{
if ( (LastKeyPressed != VOL_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_VOL_MINUS_DELAY) )
{
LastKeyPressed = VOL_MINUS;
KeyPressed = VOL_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
}
}
//VOL_PLUS
else if ( (dt1-KEY_DELTA <= KEY_VOL_PLUS) and (dt1+KEY_DELTA >=KEY_VOL_PLUS) )
{
if ( (LastKeyPressed != VOL_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_VOL_PLUS_DELAY) )
{
LastKeyPressed = VOL_PLUS;
KeyPressed = VOL_PLUS;
LastTimeKeyPressed = TimeKeyPressed;
}
}
}
KMode= (digitalRead(8) == LOW) and (ModePressed); //Нажата кнопка MODE
if (KeyPressed != NONE)
{
KeysPressed = true;
if (Variant or SoundSource) //Если режим курсора или выбор источника звука
{
switch(KeyPressed)
{
case CH_MINUS:
if (Variant)
{
sendKey(0x50,0); //влево
//Serial.println("LEFT_VARIANT");
}
else
{
sendKey(0x65,0x05); // SEARCH+b = App #2
//Serial.println("SEARCH+B_SOURCE");
SoundSource=false;
}
break;
case CH_PLUS:
if (Variant)
{
sendKey(0x4f,0); //вправо
//Serial.println("RIGHT_VARIANT");
}
else
{
sendKey(0x65,0x06); // SEARCH+c = App #3
//Serial.println("SEARCH+C_SOURCE");
SoundSource=false;
}
break;
case VOL_MINUS:
sendKey(0x51,0); //вниз
//Serial.println("DOWN");
break;
case VOL_PLUS:
sendKey(0x52,0); //вверх
//Serial.println("UP");
break;
}
}
else
{
switch(KeyPressed)
{
case CH_MINUS:
sendKey(0x65,0x13); // SEARCH+p = Previous Song
//Serial.println("SEARCH+P");
break;
case CH_PLUS:
sendKey(0x65,0x11); // SEARCH+n = Next Song
//Serial.println("SEARCH+N");
break;
case VOL_MINUS:
sendKey(0x81,0); //громкость -
//Serial.println("VOLUME-");
break;
case VOL_PLUS: //громкость +
sendKey(0x80,0);
//Serial.println("VOLUME+");
break;
}
}
}

else //Если небыло нажато кнопок, то проверяем, отпускалась ли кнопка MODE и до этого не сней нажимались кнопки
{
if (LastMode and !KMode)
{
if (abs(millis()-LastTimeModePressed) < KEY_MODE_DELAY)
{
//Serial.println("time<KEY_MODE_DELAY");
if (Variant or SoundSource)
{
if (SoundSource and !KeysPressed)
{
sendKey(0x0029,0); //Esc
//Serial.println("ESC_SOURCE");
}
else
{
sendKey(0x28,0); //Enter
//Serial.println("ENTER_SOURCE");
EnterPressed=true;
}
SoundSource=false;
}
else
{
sendKey(0x65,0x04); // SEARCH+a = Music App #1
//Serial.println("SEARCH+A_SOURCE_TRUE");
SoundSource=true;
KeysPressed = false;
}
}
else
{
Variant=!Variant;
if (Variant)
{
sendKey(0x003a,0); //Menu
//Serial.println("MENU");
EnterPressed=false;
}
else
{
//Если небыла нажата кнопка ENTER
if (!EnterPressed)
{
sendKey(0x0029,0); //Esc
//Serial.println("ESC");
}
}
}
}
else //Если не нажимались вообще никакие кнопки
{
if (Variant) //Если кнопки долго не нажимались, то возвращаемся в режим управления музыкой
{ // Ставим все значения как при старте
i=i+1;
if (i>VARIANT_DELAY)
{
LastModePressed = false;
ModePressed = false;
LastMode = false;
KMode = false;
Variant = false;
SoundSource = false;
EnterPressed = false;
KeysPressed = false;
LastTimeKeyPressed = millis();
LastTimeModePressed = millis();
//Serial.println("---RESET SETTINGS--");
i=0;
}
}
else
{
if ( SoundSource and (abs(millis()-LastTimeModePressed) > SOURCE_DELAY))
{
if (KeysPressed) //Если нажимался курсор, то через время нажмется ENTER
{
sendKey(0x28,0); //Enter
//Serial.println("ENTER_SOURCE");
}
else //Иначе возврат
{
sendKey(0x0029,0); //Esc
//Serial.println("ESC_SOURCE");
}
SoundSource=false;
}
}
}
}
LastMode=KMode;
}

void sendKey(int code, int code2) {
buffer[2] = code;
buffer[3] = code2;

Serial.write(buffer, 8);
dirty = true;
}

void releaseKey() {
if (dirty) {
buffer[0] = 0;
buffer[2] = 0;
buffer[3] = 0;
Serial.write(buffer, 8);
dirty = false;
}
}

armlive
18.01.2014, 17:14
ilya174, Вот что у меня получилось.
Скетч для ардуино уно. Ардуино определяется как HID устройство. В скетче управление планшетом ресистивными кнопками и управление питанием.
// Коды кнопок, что отсылаем в порт внешней проге
#define CH_VOL_MINUS (226)
#define CH_VOL_PLUS (43)
#define CH_PAUSE (3)
#define CH_PREV_TRACK (4)
#define CH_FORW_TRACK (5)
#define CH_TAB (14)
#define CH_ESC (128)
#define CH_AUDIO_OFF (1)
#define CH_PLUS (6)
#define CH_MINUS (7)
#define CH_MINUS (8)
#define CH_MINUS (9)
#define CH_MINUS (12)
#define NONE (0)
что за хитрые коды кнопок, ни как не могу понять, нормальные коды не подходят, а здесь к примеру define CH_VOL_PLUS (43) это буква b?
Может кто знает?
И так, методом подбора узнал все коды кнопок, но мультимедию не нашел. Назначил некоторые коды неиспользуемых кнопок и переназначил их в файле планшета. Позже выложу и разжую

armlive
19.01.2014, 20:47
Вот рабочий вариант ардуино уно r3 , с управлением по питанию.
Код взят у ilya174, основа (http://mitchtech.net/arduino-usb-hid-keyboard/) и настроен под кашкай.
У кашкая по три кнопки на каждом выводе, соединяем их резисторами(разные номиналы обязательно) и делаем один вывод от шести полученных кнопок и общий минус. К ардуино уно подключаем минус к минусу, вывод от кнопок к A0, A0 через подтягивающий резистор(2ком) подключаем к +
Раскомментируйте //Serial.println(dt1); и залейте скетч.
Считайте свои значения в мониторе и установите для каждой кнопки и залейте скетч.
Дальше прошейте USB HID и почти готово.
Открываем "system\usr\keylayout\Generic.kl" (сделайте обязательно копию оригинала) и правим под себя.
Ни клавиатура, ни кнопки не страдают.
// // Для рулевых кнопок
uint8_t buf[8] = {
0 };

// реле питания звуковой карты
#define relePin4 11

// Задержки между нажатиями конкретных кнопок, миллисекунды
#define KEY_CH_VOL_MINUS_DELAY (200)
#define KEY_CH_VOL_PLUS_DELAY (200)
#define KEY_CH_PAUSE_DELAY (200)
#define KEY_CH_PREV_TRACK_DELAY (400)
#define KEY_CH_FORW_TRACK_DELAY (400)
#define KEY_CH_TAB_DELAY (200)
#define KEY_CH_ESC_DELAY (200)
#define KEY_CH_AUDIO_OFF_DELAY (400)
#define KEY_CH_PLUS_DELAY (200)
#define KEY_MODE_DELAY (200)
#define KEY_MODE_DELAY (200)
#define KEY_MODE_DELAY (200)
#define KEY_MODE_DELAY (200)

// Значения кнопок значение "1500" свободные кнопки, если у вас больше 6 кнопок, можете использовать прописав свои значения
#define KEY_CH_VOL_MINUS (540)
#define KEY_CH_VOL_PLUS (337)
#define KEY_CH_PAUSE (1500)
#define KEY_CH_PREV_TRACK (500)
#define KEY_CH_FORW_TRACK (251)
#define KEY_CH_TAB (484)
#define KEY_CH_ESC (217)
#define KEY_CH_AUDIO_OFF (1500)
#define KEY_CH_PLUS (1500)
#define KEY_CH_MINUS (1500)


// Погрешность при чтении кнопок
#define KEY_DELTA (10)

// Коды кнопок, что отсылаем в порт внешней проге, 0 пустое значение при добавлении кнопок больше 6-ти, пропишите коды желаемых кнопок
#define CH_VOL_MINUS (81)
#define CH_VOL_PLUS (82)
#define CH_PAUSE (0)
#define CH_PREV_TRACK (80)
#define CH_FORW_TRACK (79)
#define CH_TAB (72)
#define CH_ESC (74)
#define CH_AUDIO_OFF (0)
#define CH_PLUS (0)
#define CH_MINUS (0)
#define NONE (0)

// Кнопки
#define ACCPin 2 // через делитель к ACC // в моем случае к питанию uno 5в
#define ControlPin A1 // через делитель к +12В // в моем случае к питанию uno 5в
#define relePin1 8 // реле разрыва OTG 5 контакт
#define relePin2 9 // реле датчика хола
#define relePin3 10 // реле активации усилителей
#define ONHUB 1000 // время включения реле HUB
#define ONTablet 4000 // время включения планшета
#define ONAudio 9000 // время включения аудио
#define OFFHUB 8000 // время выключения реле HUB---//моем случае не используется, контролируется реле задержкой К0
#define OFFTablet 3000 // время выключения планшета //в моем случае не используется, контролируется реле задержкой К0
#define OFFAudio 10 // время выключения аудио // в моем случае не используется, контролируется реле задержкой К0

unsigned long LastTimeKeyPressed = millis();
unsigned long duration, millisold, off = 0;
boolean stateACC, relestate1, relestate2,relestate3,relestate4 = 0;
int LastKeyPressed = NONE;
int flag = 1;
int flag2 = 0;
void setup()
{
Serial.begin(9600);
pinMode(relePin1, OUTPUT);
pinMode(relePin2, OUTPUT);
pinMode(relePin3, OUTPUT);
pinMode(relePin4, OUTPUT);
}
void loop()
{
ReadSteering();
Knopki();
delay(10);
}
// Читает рулевые кнопки и пишет в порт код нажатой кнопки
void ReadSteering()
{
pinMode(relePin4, OUTPUT);
digitalWrite(relePin4,flag );
unsigned long TimeKeyPressed;
int KeyPressed = NONE;
int dt1 = analogRead(A0);
delay(10);
//Serial.println(dt1);
int dt2 = analogRead(A0);
//Serial.println(dt2);
if (abs(dt1-dt2)<=490 and dt1<1024 ) //если нет дребезга и что-то есть
{
// Регистрируем время нажатия кнопки
TimeKeyPressed = millis(); //получить реальное время

//CH_VOL_MINUS
if ( (dt1-KEY_DELTA <= KEY_CH_VOL_MINUS) and (dt1+KEY_DELTA >= KEY_CH_VOL_MINUS) )
{
if ( (LastKeyPressed != CH_VOL_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_VOL_MINUS_DELAY))
{
LastKeyPressed = CH_VOL_MINUS;
buf[2] = CH_VOL_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_VOL_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_VOL_PLUS) and (dt1+KEY_DELTA >=KEY_CH_VOL_PLUS) )
{
if ( (LastKeyPressed != CH_VOL_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_VOL_PLUS_DELAY) )
{
LastKeyPressed = CH_VOL_PLUS;
buf[2]=CH_VOL_PLUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PAUSE
else if ( (dt1-KEY_DELTA <= KEY_CH_PAUSE) and (dt1+KEY_DELTA >=KEY_CH_PAUSE) )
{
if ( (LastKeyPressed != CH_PAUSE) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PAUSE_DELAY) )
{
LastKeyPressed = CH_PAUSE;
buf[2]=CH_PAUSE;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PREV_TRACK
else if ( (dt1-KEY_DELTA <= KEY_CH_PREV_TRACK) and (dt1+KEY_DELTA >=KEY_CH_PREV_TRACK) )
{
if ( (LastKeyPressed != CH_PREV_TRACK) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PREV_TRACK_DELAY) )
{
LastKeyPressed = CH_PREV_TRACK;
buf[2]=CH_PREV_TRACK;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_FORW_TRACK
else if ( (dt1-KEY_DELTA <= KEY_CH_FORW_TRACK) and (dt1+KEY_DELTA >=KEY_CH_FORW_TRACK) )
{
if ( (LastKeyPressed != CH_FORW_TRACK) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_FORW_TRACK_DELAY) )
{
LastKeyPressed = CH_FORW_TRACK;
buf[2]=CH_FORW_TRACK;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_TAB
else if ( (dt1-KEY_DELTA <= KEY_CH_TAB) and (dt1+KEY_DELTA >=KEY_CH_TAB) )
{
if ( (LastKeyPressed != CH_TAB) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_TAB_DELAY) )
{
LastKeyPressed = CH_TAB;
buf[2]=CH_TAB;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_ESC
else if ( (dt1-KEY_DELTA <= KEY_CH_ESC) and (dt1+KEY_DELTA >=KEY_CH_ESC) )
{
if ( (LastKeyPressed != CH_ESC) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_ESC_DELAY) )
{
LastKeyPressed = CH_ESC;
buf[2]=CH_ESC;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_AUDIO_OFF
else if ( (dt1-KEY_DELTA <= KEY_CH_AUDIO_OFF) and (dt1+KEY_DELTA >=KEY_CH_AUDIO_OFF) )
{
if ( (LastKeyPressed != CH_AUDIO_OFF) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_AUDIO_OFF_DELAY)&& flag==1)
{
digitalWrite(relePin4, flag2);
flag = 0;
flag2 = 1;
}
else if ( (LastKeyPressed != CH_AUDIO_OFF) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_AUDIO_OFF_DELAY)&& flag==0)
{
digitalWrite(relePin4, flag2);
flag = 1;
flag2 = 0;
}
LastKeyPressed = CH_AUDIO_OFF;
LastTimeKeyPressed = TimeKeyPressed;
releaseKey();
}

//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
}
}

void releaseKey()
{
buf[0] = 0;
buf[2] = 0;
Serial.write(buf, 8); // Release key
}

void Knopki()
{
if (digitalRead(ACCPin)&&!stateACC) {
stateACC=1;
duration = millis();
}
if (!digitalRead(ACCPin)&&stateACC) {
stateACC=0;
off = millis();
}
if(digitalRead(ACCPin) && stateACC && millis ()-duration > ONHUB){
digitalWrite(relePin1, HIGH);
relestate1 = 1;
millisold = millis();
}
if(digitalRead(ACCPin) && stateACC && millis ()-duration > ONTablet){
digitalWrite(relePin2, HIGH);
relestate2 = 1;
millisold = millis();
}
if(digitalRead(ACCPin) && stateACC && millis ()-duration > ONAudio){
digitalWrite(relePin3, HIGH);
relestate3 = 1;
millisold = millis();
}
if(!digitalRead(ACCPin) && !stateACC && millis () -off> OFFHUB){
digitalWrite(relePin1, LOW);
relestate1 = 0;
millisold = millis();
}
if(!digitalRead(ACCPin) && !stateACC && millis () -off > OFFTablet){
digitalWrite(relePin2, LOW);
relestate2 = 0;
millisold = millis();
}
if(!digitalRead(ACCPin) && !stateACC && millis () -off > OFFAudio){
digitalWrite(relePin3, LOW);
relestate3 = 0;
millisold = millis();
}
}

ilya174
20.01.2014, 09:34
ilya174,
// Коды кнопок, что отсылаем в порт внешней проге
#define CH_VOL_MINUS (226)
#define CH_VOL_PLUS (43)
#define CH_PAUSE (3)
#define CH_PREV_TRACK (4)
#define CH_FORW_TRACK (5)
#define CH_TAB (14)
#define CH_ESC (128)
#define CH_AUDIO_OFF (1)
#define CH_PLUS (6)
#define CH_MINUS (7)
#define CH_MINUS (8)
#define CH_MINUS (9)
#define CH_MINUS (12)
#define NONE (0)
что за хитрые коды кнопок, ни как не могу понять, нормальные коды не подходят, а здесь к примеру define CH_VOL_PLUS (43) это буква b?
Может кто знает?
И так, методом подбора узнал все коды кнопок, но мультимедию не нашел. Назначил некоторые коды неиспользуемых кнопок и переназначил их в файле планшета. Позже выложу и разжую

На форуме я выложил сырой вариант скетча, т.е. значения кнопок не соответствуют названиям. Нужные коды кнопок можно взять отсюда (http://www.freebsddiary.org/APC/usb_hid_usages.php) или скачать прикрепленный файл.
Мультимедиа кнопки также переназначал в планшете. Есть еще прога для переназначения кнопок и запуска приложений по кнопке (если нужно могу поискать).
Единственное, что у меня не получилось это реализовать комбинацию клавиш (ALT+TAB), может кто подскажет как это сделать?

d3890666
20.01.2014, 13:27
Единственное, что у меня не получилось это реализовать комбинацию клавиш (ALT+TAB), может кто подскажет как это сделать?

Keyboard.press(TAB);
Keyboard.press(ALT);
delay(120);
Keyboard.releaseAll();

а так не работает?

ilya174
20.01.2014, 22:20
Keyboard.press(TAB);
Keyboard.press(ALT);
delay(120);
Keyboard.releaseAll();

а так не работает?

Это для Arduino Leonardo, у меня UNO

armlive
20.01.2014, 22:23
Это для Arduino Leonardo, у меня UNO
А действие кода на две команды пробовал прописать?
Внутри стоит, поэкспериментировать не могу, но я бы на действие кнопки к примеру сделал
если нажата кнопка ALT, то отправляем и код кнопки TAB.
тяжело вспомнить азы программирования, когда 15 лет этим уже не занимался
LastKeyPressed = CH_TAB;
buf[0] = (код клавиши альт);
buf[2]=CH_TA)B;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
Но я бы сделал на оборот
LastKeyPressed = CH_LEFT_ALT;
buf[0] = (код клавиши TAB);
buf[2]=CH_LEFT_ALT;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}

ilya174
21.01.2014, 21:06
Так пробовал. На windows 7 окна переключаются, причем ни как если с клавиатуры нажимать ALT+TAB появляется маленькое окошко с запущенными программами и там уже выбираешь нужное окно, а просто идет перебор открытых окон как на XP. Но вот андроид почему-то никак не реагирует на такую комбинацию.

Andrey_61
21.01.2014, 23:25
Народ, на тему Alt+Tab не совсем верный алгоритм.
Надо не отправлять Alt+Tab постоянно, а зажать Alt и удерживая его отправлять Tab

вот кусок моего кода при получении команды с ИК-пульта (требуется доп библиотека Timer.h (http://playground.arduino.cc/code/timer#Installation))
Код для Leonardo, но думаю можно адаптировать и под UNO


boolean altTabFirstPress = HIGH; //Первое нажатие alt+tab
int altTabTimer; //Таймер ALT+TAB

....
if(событие){
if(boolean(altTabFirstPress)==HIGH){ //Если это нажатие первое
altTabTimer = timer.after(1000, resetAltTab); //Запускаем таймер (1000мс) сброса ALT+TAB
altTabFirstPress = LOW; //Сбрасываем переменную
Keyboard.press(KEY_ALT); //Нажимаем Alt
Keyboard.press(KEY_TAB); //Нажимаем Tab
Keyboard.release(KEY_TAB); //Отпускаем Alt
}
else{ //Если это нажатие НЕ первое
timer.stop(altTabTimer); //Останавливаем таймер сброса ALT+TAB
Keyboard.press(KEY_TAB); //Нажимаем Tab
Keyboard.release(KEY_TAB); //Отпускаем Tab
altTabTimer = timer.after(1000, resetAltTab); //Запускаем таймер сброса ALT+TAB снова
}
....

//отпускаем Alt+Tab
void resetAltTab (){
altTabFirstPress = HIGH; //Устанавливаем переменную
Keyboard.releaseAll(); //Отпускаем все кнопки, для UNO как я понимаю придется прописать каждую кнопку отдельно
}

armlive
21.01.2014, 23:48
Я нашел, что в андроиде есть своя одна команда для этих целей,
APP_SWITCH (RECENT_APP) – вызов панели «Недавние» с возможностью переключаться между приложениями (либо вызов диспетчера приложений в зависимости от прошивки. APP_SWITCH или RECENT_APP зависит от производителя и прошивки, так в HTC это APP_SWITCH, а в Gigabyte Gsmart это RECENT_APP)
Надо найти методом подбора в нексусе

ilya174
22.01.2014, 08:18
Я нашел, что в андроиде есть своя одна команда для этих целей,

Надо найти методом подбора в нексусе

Обе команды пробовал в нексусе- не заработало.

armlive
22.01.2014, 11:12
Обе команды пробовал в нексусе- не заработало.
Я же написал, нужно подбирать из тех, что есть в нексусе

Chubaka885
11.02.2014, 09:38
Народ, на тему Alt+Tab не совсем верный алгоритм.
Надо не отправлять Alt+Tab постоянно, а зажать Alt и удерживая его отправлять Tab

вот кусок моего кода при получении команды с ИК-пульта (требуется доп библиотека Timer.h (http://playground.arduino.cc/code/timer#Installation))
Код для Leonardo, но думаю можно адаптировать и под UNO


boolean altTabFirstPress = HIGH; //Первое нажатие alt+tab
int altTabTimer; //Таймер ALT+TAB

....
if(событие){
if(boolean(altTabFirstPress)==HIGH){ //Если это нажатие первое
altTabTimer = timer.after(1000, resetAltTab); //Запускаем таймер (1000мс) сброса ALT+TAB
altTabFirstPress = LOW; //Сбрасываем переменную
Keyboard.press(KEY_ALT); //Нажимаем Alt
Keyboard.press(KEY_TAB); //Нажимаем Tab
Keyboard.release(KEY_TAB); //Отпускаем Alt
}
else{ //Если это нажатие НЕ первое
timer.stop(altTabTimer); //Останавливаем таймер сброса ALT+TAB
Keyboard.press(KEY_TAB); //Нажимаем Tab
Keyboard.release(KEY_TAB); //Отпускаем Tab
altTabTimer = timer.after(1000, resetAltTab); //Запускаем таймер сброса ALT+TAB снова
}
....

//отпускаем Alt+Tab
void resetAltTab (){
altTabFirstPress = HIGH; //Устанавливаем переменную
Keyboard.releaseAll(); //Отпускаем все кнопки, для UNO как я понимаю придется прописать каждую кнопку отдельно
}


Почему то ругается на timer.after.... Говорит что timer не декларирован. Хотя библиотеку Timer скопировал в либы программы. В начале скетча добавил Timer.h

Chubaka885
22.02.2014, 22:32
А кто нибудь реализовал на одной резистивной кнопке одиночное нажатие и удержание? Не поделитесь. А то никак не могу догнать как сделать(((

Вот вроде сделал, но при нажатии и удержании функция по одиночному нажатию всё равно сначала проходит.

int buttonPin=6; //пин для резистивных кнопок
int data;
int flag=0;
long previousMillis = 0;
int val=0;

void setup()
{
Keyboard.begin();
Serial.begin(9600);
}

void loop()
{
data=analogRead(buttonPin); //читаем значение нажатой кнопки
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта

if (data<=900) //если нажата любая из кнопок начинается отсчёт
{
if (millis() -previousMillis >200)
{
previousMillis = millis();
val++;

//кнопка громкости +
if (data>=210 && data<=232 && flag==0 && val==1) //одиночное нажатие
{
Remote.increase(); //прибавить громкость на ед.
Remote.clear();
flag=1;
val=0;
}
if (data>=210 && data<=232 && val>=2) // удержание
{
Remote.increase(); //прибавлять громкость до отпускания
Remote.clear();
val=0;
}

//кнопка громкости -
if (data>=460 && data<=488 && flag==0 && val>=1 && val<=3) //одиночное нажатие
{
Remote.decrease(); //убавить громкость на ед.
Remote.clear();
flag=1;
val=0;
}
if (data>=460 && data<=488 && val>=4) //удержание
{
Remote.decrease(); //убавлять громкость до отпускания
Remote.clear();
val=0;
}

//кнопка следующий трек
if (data==0 && flag==0 && val==1) //одиночное нажатие
{
Remote.next(); //следующий трек
Remote.clear();
flag=1;
val=0;
}
if (data==0 && val>=2) //удержание
{
Remote.forward(); //перемотка вперёд
Remote.clear();
val=0;
}

//кнопка предидущий трек
if (data>=76 && data<=92 && flag==0 && val>=1 && val<=5) //одиночное нажатие
{
Remote.previous(); //предидущий трек
Remote.clear();
flag=1;
val=0;
}
if (data>=76 && data<=92 && val>=6) //удержание
{
Remote.rewind(); //перемотка назад
Remote.clear();
val=0;
}

//кнопка приглушения звука
if (data>=565 && data<=594 && flag==0) //нажата кнопка
{
Remote.mute();
Remote.clear();
flag=1;
val=0;
}
}
}
//не нажата не одна из кнопок
if (data>=950 && data<=960 && flag==1)
{
flag=0;
}
}

lti1
22.02.2014, 23:26
А кто нибудь реализовал на одной резистивной кнопке одиночное нажатие и удержание? Не поделитесь. А то никак не могу догнать как сделать(((

Вот вроде сделал, но при нажатии и удержании функция по одиночному нажатию всё равно сначала проходит.
Алгоритм такой: короткое нажатие, более 100 и менее 500 миллисекунд - Play/pause; длинное, более 500 миллисекунд - Mute.
Тоже самое с Next и Fast Forward, Previous и Rewind. При удержании увеличения и уменьшения громкости, увеличивает или уменьшает громкость на 10 делений в секунду, а при коротком нажатии, менее 500 миллисекунд - увеличивает или уменьшает громкость на 1 деление.
int analogPin=0;
int data;
unsigned long flag = 0;
unsigned long eventTime = 0;

void setup()
{
Keyboard.begin();
}

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки

//********************** Громкость ************************************

if(data<=100 && flag == 0) // все кнопки отпущены
{
eventTime=millis();
}

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=600 && data<=630 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
Remote.increase();
flag = 5;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=600 && data<=630 && flag == 5 || data>=600 && data<=630 && flag == 3) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.increase(); // действие после удержание кнопки, Увеличить громкость каждые 0,1 секунды
flag = 3;
Remote.clear();
delay(100);
}

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=500 && data<=530 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
Remote.decrease();
flag = 6;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=500 && data<=530 && flag == 6 || data>=500 && data<=530 && flag == 3) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.decrease(); // действие после удержание кнопки, Уменьшить громкость каждые 0,1 секунды
flag = 3;
Remote.clear();
delay(100);
}

//********************** Play/pause и Mute ************************************

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=920 && data<=960) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 1;
}

if(data<=100 && flag == 1) // действие после короткого нажатия кнопки, воспроизведение / пауза
{
Remote.play_pause();
flag = 0;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=920 && data<=960 && flag == 1) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.mute(); // действие после удержание кнопки, приглушение звука
flag = 0;
delay(10);
Remote.clear();
}
//********************** Next и Fast Forward ************************************

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=815 && data<=845) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 2;
}

if(data<=100 && flag == 2) // действие после короткого нажатия кнопки, Next
{
Remote.next();
flag = 0;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=815 && data<=845 && flag == 2 || data>=815 && data<=845 && flag == 3) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.forward(); // действие после удержание кнопки, Fast Forward
flag = 3;
Remote.clear();
delay(100);
}
//********************** Previous и Rewind ************************************

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=700 && data<=740) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 4;
}

if(data<=100 && flag == 4) // действие после короткого нажатия кнопки, Previous
{
Remote.previous();
flag = 0;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=700 && data<=740 && flag == 4 || data>=700 && data<=740 && flag == 3) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.rewind(); // действие после удержание кнопки, Rewind
flag = 3;
Remote.clear();
delay(100);
}

if(data<=100 && flag == 3 || data<=100 && flag == 5 || data<=100 && flag == 6) // действие после отпускания кнопки
{
flag = 0;
}
}

Chubaka885
23.02.2014, 17:56
lti1 Большое спасибо!! Всё заработало как надо.

Осталось, вместо play/pause сделать AltTab. Попробую сам.

И ещё. Не подскажите, существует ли команда HID переключения папок в аудиоплеере?

lti1
24.02.2014, 00:27
lti1 Большое спасибо!! Всё заработало как надо.

Осталось, вместо play/pause сделать AltTab. Попробую сам.
Здесь (http://pccar.ru/showthread.php?t=19559) можно посмотреть как сделан Alt+Tab и по аналогии доработать под себя. Алгоритм следующий: первое нажатие нажимает Alt+Tab и сразу отпускает Tab, повторное нажатие, в течении секунды опять нажимает Alt+Tab и опять отпускает Tab, через секунду после любого нажатия Alt отпускается.
И ещё. Не подскажите, существует ли команда HID переключения папок в аудиоплеере?Сам задавался таким вопросом, ни чего не нашел, скорее всего такого не существует. Пробовал у себя реализовать через Tasker, отлавливать комбинации клавиш и назначать действия перехода по папкам, но мне не понравилось, иногда сильно тормозит.

Chubaka885
24.02.2014, 17:50
Здесь (http://pccar.ru/showthread.php?t=19559) можно посмотреть как сделан Alt+Tab и по аналогии доработать под себя. Алгоритм следующий: первое нажатие нажимает Alt+Tab и сразу отпускает Tab, повторное нажатие, в течении секунды опять нажимает Alt+Tab и опять отпускает Tab, через секунду после любого нажатия Alt отпускается.
Спасибо ещё раз, всё получилось. Только мне кажется что первое нажатие должно отправлять таб два раза а последующие уже по одному, иначе (на планшете) приходится нажимать два раза чтобы переключится на следующею активную программу.

Сама задавался таким вопросом, ни чего не нашел, скорее всего такого не существует. Пробовал у себя реализовать через Tasker, отлавливать комбинации клавиш и назначать действия перехода по папкам, но мне не понравилось, иногда сильно тормозит.
Да, скорей всего такой команды нет. Придётся для переключения папок в дисплей тыкать))). А если с помощью таскера сильно тормозит?

lti1
24.02.2014, 19:20
Спасибо ещё раз, всё получилось. Только мне кажется что первое нажатие должно отправлять таб два раза а последующие уже по одному, иначе (на планшете) приходится нажимать два раза чтобы переключится на следующею активную программу.
Да наверное так логичнее будет, когда сделаете, выложите в эту тему.
Да, скорей всего такой команды нет. Придётся для переключения папок в дисплей тыкать))). А если с помощью таскера сильно тормозит?
Иногда сильно, но возможно у меня планшет криво прошит, от сюда и тормоза. Сейчас вообще Tasker отключил, потому как не только переход по папкам тормозил.

Chubaka885
26.02.2014, 20:24
Готовый скетч для резестивных кнопок, любезно предоставленный lti1 за что ему огромное спасибо. Для работы требуются модифицированные USBAPI.h, HID.cpp. Скачать вложение с поста #182.
Скетч работает на arduino pro micro, arduino leonardo.

Алгоритм:
Кнопки громкости.
Одиночное нажатие - прибавление/убавление на одну единицу.
Удержание - прибавление/убавление до отпускания.

Кнопки следующий/предидущий трек
Одно нажатие - следующий/предидущий трек
Удержание - перемотка

Кнопка mode
первое нажатие - отсылается нажатие ALT и два раза TAB. Каждое следующее нажатие, если не истекло 800 мили сек. отсылает один раз TAB, ALT остаётся нажатым.
Удержание - плей/пауза.

int analogPin=6; //пин для подключения кнопок
int data;
unsigned long flag = 0;
unsigned long eventTime = 0;
unsigned long pauseMillis = 0;

void setup()
{
Keyboard.begin();
}

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки

//********************** Громкость ************************************

if(data>=950 && flag == 0) // все кнопки отпущены
{
eventTime=millis();
}

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=210 && data<=230 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
Remote.increase();
flag = 5;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=210 && data<=230 && flag == 5 || data>=210 && data<=230 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.increase(); // действие после удержание кнопки, Увеличить громкость каждые 0,1 секунды
flag = 3;
Remote.clear();
delay(100);
}

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=457 && data<=477 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
Remote.decrease();
flag = 6;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=457 && data<=477 && flag == 6 || data>=457 && data<=477 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.decrease(); // действие после удержание кнопки, Уменьшить громкость каждые 0,1 секунды
flag = 3;
Remote.clear();
delay(100);
}

//********************** AltTab + Play/pause ************************************

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=567 && data<=587) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 1;
}

if(data>=950 && flag == 1 && pauseMillis == 0) // действие после короткого нажатия кнопки, Alt+Tab
{
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
flag = 0;
pauseMillis = millis();
}

if(data>=950 && flag == 1 && pauseMillis != 0) // действие после короткого повторного нажатия кнопки, Alt+Tab
{
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
flag = 0;
pauseMillis = millis();
}

if(pauseMillis && millis()-pauseMillis >= 800 && data>=950) // && flag == 7 && data>=950)
{
flag = 0;
pauseMillis = 0;
Keyboard.releaseAll();
}

if(millis()-eventTime>500 && data>=567 && data<=587 && flag == 1) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.play_pause(); // действие после удержание кнопки, воспроизведение / пауза
flag = 0;
delay(10);
Remote.clear();
}
//********************** Next и Fast Forward ************************************

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=0 && data<=10) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 2;
}

if(data>=950 && flag == 2) // действие после короткого нажатия кнопки, Next
{
Remote.next();
flag = 0;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=0 && data<=10 && flag == 2 || data>=0 && data<=10 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.forward(); // действие после удержание кнопки, Fast Forward
flag = 3;
Remote.clear();
delay(100);
}
//********************** Previous и Rewind ************************************

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=74 && data<=94) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 4;
}

if(data>=950 && flag == 4) // действие после короткого нажатия кнопки, Previous
{
Remote.previous();
flag = 0;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=74 && data<=94 && flag == 4 || data>=74 && data<=94 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.rewind(); // действие после удержание кнопки, Rewind
flag = 3;
Remote.clear();
delay(100);
}

if(data>=950 && flag == 3 || data>=950 && flag == 5 || data>=950 && flag == 6) // действие после отпускания кнопки
{
flag = 0;
}
}

Oreshrek
26.03.2014, 16:41
Вот рабочий вариант ардуино уно r3 , с управлением по питанию.
Код взят у ilya174, основа (http://mitchtech.net/arduino-usb-hid-keyboard/) и настроен под кашкай.
У кашкая по три кнопки на каждом выводе, соединяем их резисторами(разные номиналы обязательно) и делаем один вывод от шести полученных кнопок и общий минус. К ардуино уно подключаем минус к минусу, вывод от кнопок к A0, A0 через подтягивающий резистор(2ком) подключаем к +
Раскомментируйте //Serial.println(dt1); и залейте скетч.
Считайте свои значения в мониторе и установите для каждой кнопки и залейте скетч.
Дальше прошейте USB HID и почти готово.
Открываем "system\usr\keylayout\Generic.kl" (сделайте обязательно копию оригинала) и правим под себя.
Ни клавиатура, ни кнопки не страдают.
// Для рулевых кнопок
uint8_t buf[8] = {
0 };

// реле питания звуковой карты
#define relePin4 11

// Задержки между нажатиями конкретных кнопок, миллисекунды
#define KEY_CH_VOL_MINUS_DELAY (200)
#define KEY_CH_VOL_PLUS_DELAY (200)
#define KEY_CH_PAUSE_DELAY (200)
#define KEY_CH_PREV_TRACK_DELAY (200)
#define KEY_CH_FORW_TRACK_DELAY (200)
#define KEY_CH_TAB_DELAY (200)
#define KEY_CH_ESC_DELAY (200)
#define KEY_CH_AUDIO_OFF_DELAY (400)
#define KEY_CH_PLUS_DELAY (200)
#define KEY_MODE_DELAY (200)
#define KEY_MODE_DELAY (200)
#define KEY_MODE_DELAY (200)
#define KEY_MODE_DELAY (200)

// Значения кнопок
#define KEY_CH_VOL_MINUS (540)
#define KEY_CH_VOL_PLUS (337)
#define KEY_CH_PAUSE (0)
#define KEY_CH_PREV_TRACK (500)
#define KEY_CH_FORW_TRACK (252)
#define KEY_CH_TAB (484)
#define KEY_CH_ESC (218)
#define KEY_CH_AUDIO_OFF (0)
#define KEY_CH_PLUS (0)
#define KEY_CH_MINUS (0)
#define KEY_CH_MINUS (0)
#define KEY_CH_MINUS (1500)
#define KEY_CH_MINUS (1500)


// Погрешность при чтении кнопок
#define KEY_DELTA (10)

// Коды кнопок, что отсылаем в порт внешней проге
#define CH_VOL_MINUS (81) //Кнопка down
#define CH_VOL_PLUS (82) //Кнопка up
#define CH_PAUSE (0) //
#define CH_PREV_TRACK (80) //Кнопка left
#define CH_FORW_TRACK (79) //Кнопка right
#define CH_TAB (72) //Кнопка break, Pause
#define CH_ESC (74) //Кнопка Home
#define CH_AUDIO_OFF (0)
#define CH_PLUS (0)
#define CH_MINUS (0)
#define CH_MINUS (0)
#define CH_MINUS (0)
#define CH_MINUS (0)
#define NONE (0)

// Кнопки
#define ACCPin 2 // через делитель к ACC
#define ControlPin A1 // через делитель к +12В
#define relePin1 8 // реле USB HUB
#define relePin2 9 // реле планшета (OTG)
#define relePin3 10 // реле звуковой карты (замыкания на землю)
#define ONHUB 1000 // время включения реле HUB
#define ONTablet 4000 // время включения планшета
#define ONAudio 9000 // время включения аудио
#define OFFHUB 8000 // время выключения реле HUB
#define OFFTablet 3000 // время выключения планшета
#define OFFAudio 10 // время выключения аудио

unsigned long LastTimeKeyPressed = millis();
unsigned long duration, millisold, off = 0;
boolean stateACC, relestate1, relestate2,relestate3,relestate4 = 0;
int LastKeyPressed = NONE;
int flag = 1;
int flag2 = 0;
void setup()
{
Serial.begin(9600);
pinMode(relePin1, OUTPUT);
pinMode(relePin2, OUTPUT);
pinMode(relePin3, OUTPUT);
pinMode(relePin4, OUTPUT);
}

void loop()
{
ReadSteering();
Knopki();
delay(10);
}

// Читает рулевые кнопки и пишет в порт код нажатой кнопки
void ReadSteering()
{
pinMode(relePin4, OUTPUT);
digitalWrite(relePin4,flag );
unsigned long TimeKeyPressed;
int KeyPressed = NONE;
int dt1 = analogRead(A0);
delay(10);
//Serial.println(dt1); // Раскомментировать для вывода и обозначения значения кнопок в монитор
int dt2 = analogRead(A0);
//Serial.println(dt2);
if (abs(dt1-dt2)<=490 and dt1<1024 ) //если нет дребезга и что-то есть
{
// Регистрируем время нажатия кнопки

TimeKeyPressed = millis(); //получить реальное время

//CH_VOL_MINUS
if ( (dt1-KEY_DELTA <= KEY_CH_VOL_MINUS) and (dt1+KEY_DELTA >= KEY_CH_VOL_MINUS) )
{
if ( (LastKeyPressed != CH_VOL_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_VOL_MINUS_DELAY))
{
LastKeyPressed = CH_VOL_MINUS;
buf[2] = CH_VOL_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
//Serial.print(CH_VOL_MINUS);
Serial.write(buf, 8);
releaseKey();
//Serial.print(CH_VOL_MINUS);
}
}
//CH_VOL_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_VOL_PLUS) and (dt1+KEY_DELTA >=KEY_CH_VOL_PLUS) )
{
if ( (LastKeyPressed != CH_VOL_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_VOL_PLUS_DELAY) )
{
LastKeyPressed = CH_VOL_PLUS;
buf[2]=CH_VOL_PLUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
//Serial.println(CH_VOL_PLUS);
releaseKey();
}
}
//CH_PAUSE
else if ( (dt1-KEY_DELTA <= KEY_CH_PAUSE) and (dt1+KEY_DELTA >=KEY_CH_PAUSE) )
{
if ( (LastKeyPressed != CH_PAUSE) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PAUSE_DELAY) )
{
LastKeyPressed = CH_PAUSE;
buf[2]=CH_PAUSE;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
//Serial.println(CH_PAUSE);
releaseKey();
}
}
//CH_PREV_TRACK
else if ( (dt1-KEY_DELTA <= KEY_CH_PREV_TRACK) and (dt1+KEY_DELTA >=KEY_CH_PREV_TRACK) )
{
if ( (LastKeyPressed != CH_PREV_TRACK) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PREV_TRACK_DELAY) )
{
LastKeyPressed = CH_PREV_TRACK;
buf[2]=CH_PREV_TRACK;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
//Serial.println(CH_PREV_TRACK);
releaseKey();
}
}
//CH_FORW_TRACK
else if ( (dt1-KEY_DELTA <= KEY_CH_FORW_TRACK) and (dt1+KEY_DELTA >=KEY_CH_FORW_TRACK) )
{
if ( (LastKeyPressed != CH_FORW_TRACK) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_FORW_TRACK_DELAY) )
{
LastKeyPressed = CH_FORW_TRACK;
buf[2]=CH_FORW_TRACK;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
//Serial.println(CH_FORW_TRACK);
releaseKey();
}
}
//CH_TAB
else if ( (dt1-KEY_DELTA <= KEY_CH_TAB) and (dt1+KEY_DELTA >=KEY_CH_TAB) )
{
if ( (LastKeyPressed != CH_TAB) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_TAB_DELAY) )
{
LastKeyPressed = CH_TAB;
buf[2]=CH_TAB;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
//Serial.println(CH_TAB);
releaseKey();
}
}
//CH_ESC
else if ( (dt1-KEY_DELTA <= KEY_CH_ESC) and (dt1+KEY_DELTA >=KEY_CH_ESC) )
{
if ( (LastKeyPressed != CH_ESC) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_ESC_DELAY) )
{
LastKeyPressed = CH_ESC;
buf[2]=CH_ESC;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
//Serial.println(CH_ESC);
releaseKey();
}
}
//CH_AUDIO_OFF
else if ( (dt1-KEY_DELTA <= KEY_CH_AUDIO_OFF) and (dt1+KEY_DELTA >=KEY_CH_AUDIO_OFF) )
{
if ( (LastKeyPressed != CH_AUDIO_OFF) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_AUDIO_OFF_DELAY)&& flag==1)
{
digitalWrite(relePin4, flag2);
flag = 0;
flag2 = 1;
}
else if ( (LastKeyPressed != CH_AUDIO_OFF) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_AUDIO_OFF_DELAY)&& flag==0)
{
digitalWrite(relePin4, flag2);
flag = 1;
flag2 = 0;
}
LastKeyPressed = CH_AUDIO_OFF;
LastTimeKeyPressed = TimeKeyPressed;
//Serial.println(CH_AUDIO_OFF);
releaseKey();
}

//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
//CH_PLUS
else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
{
if ( (LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
{
LastKeyPressed = CH_PLUS;
buf[2]=CH_MINUS;
LastTimeKeyPressed = TimeKeyPressed;
Serial.write(buf, 8);
releaseKey();
}
}
}
}

void releaseKey()
{
buf[0] = 0;
buf[2] = 0;
Serial.write(buf, 8); // Release key
}

void Knopki()
{
if (digitalRead(ACCPin)&&!stateACC) {
stateACC=1;
duration = millis();
}
if (!digitalRead(ACCPin)&&stateACC) {
stateACC=0;
off = millis();
}
if(digitalRead(ACCPin) && stateACC && millis ()-duration > ONHUB){
digitalWrite(relePin1, HIGH);
relestate1 = 1;
millisold = millis();
}
if(digitalRead(ACCPin) && stateACC && millis ()-duration > ONTablet){
digitalWrite(relePin2, HIGH);
relestate2 = 1;
millisold = millis();
}
if(digitalRead(ACCPin) && stateACC && millis ()-duration > ONAudio){
digitalWrite(relePin3, HIGH);
relestate3 = 1;
millisold = millis();
}
if(!digitalRead(ACCPin) && !stateACC && millis () -off> OFFHUB){
digitalWrite(relePin1, LOW);
relestate1 = 0;
millisold = millis();
}
if(!digitalRead(ACCPin) && !stateACC && millis () -off > OFFTablet){
digitalWrite(relePin2, LOW);
relestate2 = 0;
millisold = millis();
}
if(!digitalRead(ACCPin) && !stateACC && millis () -off > OFFAudio){
digitalWrite(relePin3, LOW);
relestate3 = 0;
millisold = millis();
}
}



Для таких как я, впервые сталкивающихся с программированием на arduino прошу разъяснить "что" и "как")
Имею arduino uno r3, qashqai 2013
Ардуину я прошил, залил без раскомментирования, т.е. не делал так как ты написал про переназначение, думаю, что значения кнопок у меня те же, что и у тебя)
Что не понял, что за "прошейте usb hid" это ты так заливку скетча назвал или что-то еще как-то, где-то надо шить?)
"system\usr\keylayout\Generic.kl" это я так понял, в нексусе надо править, что именно? Если есть возможность, свой файл можешь выложить или мне скинуть?
3) Не понятно, по этому "К ардуино уно подключаем минус к минусу, вывод от кнопок к A0, A0 через подтягивающий резистор(2ком) подключаем к +" вопрос куда втыкать минус (где power на плате, там несколько gnd), что за резистор, и к какому плюсу подключать опять же на плате, где power, там 3.3 и 5 в, который?

armlive
26.03.2014, 16:52
Для таких как я, впервые сталкивающихся с программированием на arduino прошу разъяснить "что" и "как")
Имею arduino uno r3, qashqai 2013
Ардуину я прошил, залил без раскомментирования, т.е. не делал так как ты написал про переназначение, думаю, что значения кнопок у меня те же, что и у тебя)
Что не понял, что за "прошейте usb hid" это ты так заливку скетча назвал или что-то еще как-то, где-то надо шить?)
"system\usr\keylayout\Generic.kl" это я так понял, в нексусе надо править, что именно? Если есть возможность, свой файл можешь выложить или мне скинуть?
3) Не понятно, по этому "К ардуино уно подключаем минус к минусу, вывод от кнопок к A0, A0 через подтягивающий резистор(2ком) подключаем к +" вопрос куда втыкать минус (где power на плате, там несколько gnd), что за резистор, и к какому плюсу подключать опять же на плате, где power, там 3.3 и 5 в, который?
Нужно делать как я написал, у меня номиналы резисторов другие.
Все файлы я скину. Резистор подключай к 5в

Oreshrek
26.03.2014, 17:13
Нужно делать как я написал, у меня номиналы резисторов другие.
Все файлы я скину. Резистор подключай к 5в

так, пишу, что я понял,
1) подключаю к 6пину колодки резистор на 47ом, к 16 пину, резистор на 150 ом, объединяю проводом, вставляю конец в ардуину А0, припаиваю к этому проводу резистор и вставляю в ардуину +5в, из 15 пина вставляю провод в любой gnd на ардуине.
2) Убираю слеши перед //Serial.println(dt1), заливаю через программу для ардуины получившийся скетч
3) В программе нажимаю иконку справа с лупой типа (монитор порта, как я понял), нажимаю кнопки, смотрю, как они у меня определяются.
4) Меняю в скетче значения кнопок на мои (определившиеся), заливаю готовый скетч.
Дальше, что делать?

armlive
26.03.2014, 18:29
так, пишу, что я понял,
1) подключаю к 6пину колодки резистор на 47ом, к 16 пину, резистор на 150 ом, объединяю проводом, вставляю конец в ардуину А0, припаиваю к этому проводу резистор и вставляю в ардуину +5в, из 15 пина вставляю провод в любой gnd на ардуине.
2) Убираю слеши перед //Serial.println(dt1), заливаю через программу для ардуины получившийся скетч
3) В программе нажимаю иконку справа с лупой типа (монитор порта, как я понял), нажимаю кнопки, смотрю, как они у меня определяются.
4) Меняю в скетче значения кнопок на мои (определившиеся), заливаю готовый скетч.
Дальше, что делать?
Правильно, дальше позже скину файлы и объясню

Oreshrek
26.03.2014, 19:08
Правильно, дальше позже скину файлы и объясню

Ок, спасибо, буду ждать)

armlive
26.03.2014, 21:00
Вот почитай и потренируйся http://arduino.cc/en/Hacking/DFUProgramming8U2

Arduino-keyboard-0.3.hex Для прошивки, будет определятся как HID клавиатура, это конечный вариант.
UNO-dfu_and_usbserial_combined.hex стандартная, для UNO-dfu_and_usbserial_combined.hex.
Прикрепил файлы

Oreshrek
26.03.2014, 21:33
Вот почитай и потренируйся http://arduino.cc/en/Hacking/DFUProgramming8U2

Arduino-keyboard-0.3.hex Для прошивки, будет определятся как HID клавиатура, это конечный вариант.
UNO-dfu_and_usbserial_combined.hex стандартная, для UNO-dfu_and_usbserial_combined.hex.
Прикрепил файлы

Для работы кнопок нужно шить Arduino-keyboard-0.3.hex, а UNO-dfu_and_usbserial_combined.hex это стандартная прошивка? Правильно?

armlive
26.03.2014, 21:48
Для работы кнопок нужно шить Arduino-keyboard-0.3.hex, а UNO-dfu_and_usbserial_combined.hex это стандартная прошивка? Правильно?
Да, это шьется контроллер

Oreshrek
29.03.2014, 15:36
Да, это шьется контроллер

привет, с прошивкой контроллера все было проще всего) только через другую прогу заливал хекс.
После прошивки под "хид" не заметил, чтобы планшет как-то реагировал на ардуину, все также просто зажигается диод на ардуине и все. Так и должно быть?
И по монитору, в мониторе бежит цифра нажимаю кнопки, меняются строчки, как раз эти строчки как понял и надо отлавливать?
А что именно в файле по кнопкам, на планшете менять? Нужно строки какие-то добавить или переназначать уже существующие?

armlive
29.03.2014, 22:20
привет, с прошивкой контроллера все было проще всего) только через другую прогу заливал хекс.
После прошивки под "хид" не заметил, чтобы планшет как-то реагировал на ардуину, все также просто зажигается диод на ардуине и все. Так и должно быть?
И по монитору, в мониторе бежит цифра нажимаю кнопки, меняются строчки, как раз эти строчки как понял и надо отлавливать?
А что именно в файле по кнопкам, на планшете менять? Нужно строки какие-то добавить или переназначать уже существующие?
Проверить можешь этим приложением (https://play.google.com/store/apps/details?id=jp.ne.neko.freewing.KeyCodeDisp), если не работает исправляй.
По монитору: Нажал к примеру Vol + побежала цифра 567, это значение прописываешь #define KEY_CH_VOL_PLUS (СуДА).
Готовый Generic и файл уно, даже под дешевые джойстики исправил

Oreshrek
30.03.2014, 20:24
Проверить можешь этим приложением (https://play.google.com/store/apps/details?id=jp.ne.neko.freewing.KeyCodeDisp), если не работает исправляй.
По монитору: Нажал к примеру Vol + побежала цифра 567, это значение прописываешь #define KEY_CH_VOL_PLUS (СуДА).
Готовый Generic и файл уно, даже под дешевые джойстики исправил

пока на радостях, решил написать отчет) долго конечно ипался, даже с учетом того, что ты скинул мне почти готовые файлы. Проблема была в том, что кнопки опознавались все равно не так как нужно, в итоге через keycodedisplay считал как у меня определялись кнопки, и уже с учетом этого редактировал редактированный тобой дженерик)) Буду летом в Армавире, с меня магарыч, спасибо огромное за помощь и уделенное внимание) С кнопками в итоге разделался)

armlive
30.03.2014, 21:28
пока на радостях, решил написать отчет) долго конечно ипался, даже с учетом того, что ты скинул мне почти готовые файлы. Проблема была в том, что кнопки опознавались все равно не так как нужно, в итоге через keycodedisplay считал как у меня определялись кнопки, и уже с учетом этого редактировал редактированный тобой дженерик)) Буду летом в Армавире, с меня магарыч, спасибо огромное за помощь и уделенное внимание) С кнопками в итоге разделался)
Рад за тебя!

oledv
06.04.2014, 22:17
Подскажите как в Андройде нажать кнопу Меню.

лёна
06.04.2014, 23:05
oledv
Привет,как это,нажать кнопку меню ? обычно,и меню чего ?вопрос вообще какой то не полный,подумай и сформулируй правильный вопрос,тогда тебе помогут.

oledv
07.04.2014, 00:36
Поставлю вопрос по другому ) да немного не корректно его задал )

Как в андройде с подключенной ардуиной, которая прикинулась hid устройством смоделировать нажатие на кнопку Home для перехода на рабочий стол?

d3890666
07.04.2014, 01:14
Править generic.kl либо зажать alt+esc. Я использовал второе. По стандартным сочетаниям для андройда есть файл generic.kcm. help (http://source.android.com/devices/tech/input/key-character-map-files.html)

oledv
07.04.2014, 01:49
Править generic.kl либо зажать alt+esc. Я использовал второе. По стандартным сочетаниям для андройда есть файл generic.kcm. help (http://source.android.com/devices/tech/input/key-character-map-files.html)

спасибо, работает.

ilya174
07.04.2014, 22:25
Поставлю вопрос по другому ) да немного не корректно его задал )

Как в андройде с подключенной ардуиной, которая прикинулась hid устройством смоделировать нажатие на кнопку Home для перехода на рабочий стол?

Я для этих целей использую приложение Multilanguage Keymap Redefiner (https://play.google.com/store/apps/details?id=innerlife.keyboard.multilanguagekeymapr edefiner&hl=ru) очень удобная прога. Можно переназначить любую кнопку.

Chubaka885
09.04.2014, 22:52
Кто нибудь знает как "жёстко" прописать сочетание клавиш на запуск приложения, не используя Multilanguage Keymap Redefiner и подобные ей?

anton2204
09.04.2014, 23:32
Кто нибудь знает как "жёстко" прописать сочетание клавиш на запуск приложения, не используя Multilanguage Keymap Redefiner и подобные ей?
Можно.Через Быстрый запуск.
http://pccar.ru/showpost.php?p=279247&postcount=54

Chubaka885
10.04.2014, 18:03
Можно.Через Быстрый запуск.
http://pccar.ru/showpost.php?p=279247&postcount=54
Спасибо. То что нужно. И запуск шустрее и чётко всё отрабатывает.
Только я так понял что сочетания только с кнопкой win?

Alekssandr
01.05.2014, 00:29
Наконец то доделал прошивку на свою машинку которая будет управлять 3-мя устройствами сразу.
Из устройств BLUETOOTH наушники с кнопками, NEXUS 7, Магнитола PIONER. Было решено сделать так чтоб всеми этими устройствами можно было управлять при помощи 5-и резистивных кнопок через контроллер Arduino micro pro.

кнопка выглядит так

http://photo.qip.ru/photo/alexstankov/115733677/xlarge/136283090.jpg


С ардуино знаком около года, в этот проект вложил все чему научился=) все работает стабильно и так как надо.

В итоге имеем 3 менюшки,
Переключение по меню происходит удержанием клавиши моде в течении 6-и секунд, + выбранная позиция не сбрасывается при отключении питания она подгружает всю инфу с энергонезависимой памяти EEPROM

1-я для PIONER (сопротивления нужных номиналов замыкаются оптронами)
кнопка PWR -> следующая песня
кнопка MODE -> приглушение звука
кнопка SEEK -> предидущая песня
кнопка VOL+ -> увеличение громкости PIONEER
кнопка VOL- -> уменьшение громкости PIONEER

2-я для BLUETOOTH (нужные кнопки замыкаются оптронами)
кнопка PWR -> следующая песня
кнопка MODE -> пауза, плей, ответить на звонок
кнопка MODE при удержании более чем 3-х сек гарнитура включиться или отключиться
кнопка SEEK -> предидущая песня
кнопка VOL+ -> увеличение громкости PIONEER
кнопка VOL- -> уменьшение громкости PIONEER

3-я для NEXUS 7 (работает как HID)
кнопка PWR -> следующая песня
кнопка PWR при удержании кнопки увеличивается громкость на планшете
кнопка MODE -> плей пауза
кнопка SEEK -> предидущая песня
кнопка SEEK при удержании кнопки уменьшается громкость на планшете
кнопка VOL+ -> увеличение громкости PIONEER
кнопка VOL- -> уменьшение громкости PIONEER

Здесь скетч 35866 работает под Arduino Leonadro и Arduino microPro, также не забудьте заменить 2 файла USBAPI.h, HID.cpp скачать можно из с поста #182
Надеюсь этот код поможет кому.

Всем спасибо наконец то у меня заканчивается потихоньку эта эпопея с кнопками на руле=)))

Осталось доделать индикатор который будет отображать что сейчас выбрано и включено.

armlive
04.06.2014, 10:20
Вопрос: у кого работают кнопки на Arduino UNO R3, стабильно?
После замены блока питания, начались косяки, в месте с кодами кнопок отсылается ещё что-то, что постоянно вводит систему в ступор, а потом выскакивает окно о остановке приложений, в основном гугл поиск. Что только не делал, в терминале все чисто, уже 3 день мучаюсь.

pokertk
04.06.2014, 20:37
кнопка выглядит так

http://photo.qip.ru/photo/alexstankov/115733677/xlarge/136283090.jpg
[/QUOTE]

От чего такая кнопка?

armlive
05.06.2014, 00:32
Вопрос: у кого работают кнопки на Arduino UNO R3, стабильно?
После замены блока питания, начались косяки, в месте с кодами кнопок отсылается ещё что-то, что постоянно вводит систему в ступор, а потом выскакивает окно о остановке приложений, в основном гугл поиск. Что только не делал, в терминале все чисто, уже 3 день мучаюсь.
Купил сегодня леонардо, такая же ерунда, че за ....?

pokertk
05.06.2014, 01:36
Купил сегодня леонардо, такая же ерунда, че за ....?

Дребезг, не?

armlive
05.06.2014, 09:21
Дребезг, не?

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

ilya174
05.06.2014, 15:53
Вопрос: у кого работают кнопки на Arduino UNO R3, стабильно?
После замены блока питания, начались косяки, в месте с кодами кнопок отсылается ещё что-то, что постоянно вводит систему в ступор, а потом выскакивает окно о остановке приложений, в основном гугл поиск. Что только не делал, в терминале все чисто, уже 3 день мучаюсь.
Было подобное, когда скорость порта выставлял отличную от 9600.

armlive
05.06.2014, 17:11
Было подобное, когда скорость порта выставлял отличную от 9600.
Короче пере прошил планшет, косяки пропали. С чем было связанно это, не пойму.

Timur PERM
06.06.2014, 05:48
Короче пере прошил планшет, косяки пропали. С чем было связанно это, не пойму.

Прошил старой прошивкой?

armlive
06.06.2014, 09:22
Прошил старой прошивкой?

Нет, той же

Alekssandr
13.06.2014, 23:03
pokertk

Это родные рулевые кнопки с Lacetti

Artemka181
15.06.2014, 15:54
Не могу прошить USB HID в Leonardo и maga2560 на чипе mega8U2. Использовал Flip 3.4.7. Подскажите что не так ?

lti1
15.06.2014, 16:25
Artemka181, Leonardo и так умеет прикидываться HID устройством.

Artemka181
15.06.2014, 21:15
Artemka181, Leonardo и так умеет прикидываться HID устройством.

Вот у меня не хотит !!!! Сам не знаю

lti1
15.06.2014, 21:48
Вот у меня не хотит !!!! Сам не знаю
А что делаете и что не получается? Так (http://pccar.ru/showpost.php?p=277286&postcount=182)?