PDA

Просмотр полной версии : JoyCon Exr + ARDUINO


Andrey_61
14.04.2013, 13:17
Задумал я соединить эти два девайса.

по моей задумке arduino обрабатывает все сигналы с резистивных кнопок, энкодера, возможно ИК пульта(этот пункт пока под сомнением), и имитирует нажатие кнопок на JoyConе.

Нафига, почему не использовать просто JoyCon?
1. При нажатии на любую кнопку планшет будет просыпаться, меня это не устраивает.
2. Хочу отдельную обработку коротких и длинных нажатий.
3. Различная реакция на поворот энкодера в зависимости от того нажата КЭ(кнопка энкодера) или нет.
4. Пробуждение планшета только по нажатию КЭ

На данный момент заказан JoyCon и имеется Arduino nano v5.
Написан скетчик со следующим алгоритмом.

- при включении зажигания включаем планшет (выводим из сна)
- при выключении зажигания выключаем (отправляем в сон) через 3 секунды. Если в течении этих трех секунд опять включили зажигание или нажали КЭ то выключение отменяется.
- при выключении зажигания плавно тухнет индикатор питания.
- если планшет включен, не важно есть зажигание или нет длинное нажатие на КЭ выключает планшет.
- если планшет выключен то короткое нажатие на КЭ включает планшет
- отдельно обрабатываются вращения энкодера с нажатой и отжатой КЭ
- нажатие КЭ при включенном планшете: короткое --> enter, длинное --> POWER OFF, при выключенном планшете --> POWER ON


В общем если кому нибудь кроме меня интересна такая связка то выложу схему и исходники (как все допишу и отлажу).
Ну и готов выслушать конструктивные замечания и предложения по реализации.

p.s. была мысль на arduino реализовать hid клавиатуру, но на nano эта конструкция работала нестабильно, а покупать более мощную желания не было, поэтому решил отказаться в пользу более промышленного решения.

macau
14.04.2013, 14:23
конечно выкладывай, интересно как реализован енкодер

Kamik
14.04.2013, 15:30
:yes4: выкладывай, очень интересно

Andrey_61
14.04.2013, 16:02
В наличии есть 8-и позиционный джойстик с энкодером, 8 осей это много, планирую использовать четыре.

Алгоритм думаю такой.

________________________лево___|__право__|верх|_ни з
короткое нажатие_________←_________→______↑_____↓
длинное нажатие______PrewTrtack__NextTrack__Esk__Menu

_____________________вращение влево__|__вращение вправо
кн. энкодера отжата_________vol+________________vol-
кн. энкодера нажата________HOME_____________Alt+Tab



еще думаю, прикручивать туда ик пульт или нет. В предидущей магнитоле он 99 % времени валялся в бардачке.

macau
14.04.2013, 19:08
нажатие+поворот в движении оче неудобно

Andrey_61
14.04.2013, 19:42
нажатие+поворот в движении оче неудобно
Это если надо долго крутить, а у меня против часовой один щелчок, по часовой 4-5 щелчков (сколько там одновременно может быть запущенно приложений)

Andrey_61
18.04.2013, 00:02
За пару вечеров наваял скетчик для ARDUINO

В качестве энкодера использовал 8- позиционный джойстик RKJXT1E12001 (http://ru.onlinecomponents.com/datasheet/rkjxt1e12001.aspx?p=10114295&Resource=1), он хоть и 8-ми позиционный, но по нему можно отслеживать 16 положений, хотя это скорее не фича, а баг связанный с миниатюрными размерами, так же при каждом нажатии стика срабатывает еще и центральная кнопка энкодера, что тоже добавило проблем при написании алгоритма.

Вот небольшое видео как это работает
http://youtu.be/2x4QndwLlCE

Alex-NN
19.04.2013, 00:44
Автор начал очень полезное дело! Надеюсь в итоге в ветке появится схема и скетч.

Andrey_61
19.04.2013, 10:35
Автор начал очень полезное дело! Надеюсь в итоге в ветке появится схема и скетч.

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

P.s. если кому нибудь попадались нормальные джойстики с энкодерами кидайте сюда ссылки. т.к. у меня есть подозрение что мой 8-ми позиционный будет не очень удобен в управлении.

macau
19.04.2013, 11:02
от уравления зеркалами не пойдет? они обычно не вырвиглазны и удобны

Andrey_61
19.04.2013, 11:45
от уравления зеркалами не пойдет? они обычно не вырвиглазны и удобны

а это идея, и теоретически с помощью холодной сварки его можно сростить с энкодером

macau
19.04.2013, 14:55
кстати как реализован саспенд ардуины? или она не засыпает? сколько потребление вхолостую?

Andrey_61
19.04.2013, 15:18
кстати как реализован саспенд ардуины? или она не засыпает? сколько потребление вхолостую?

Что такое саспенд, судя по контексту спящий режим?

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

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


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

macau
19.04.2013, 16:27
у меня нано в3, в холостом режиме жрет около 80ма, что много. вот по этому мануалу http://donalmorrissey.blogspot.ru/2010/04/putting-arduino-diecimila-to-sleep-part.html удолось снизить потребление в спячке до 14ма.
выключение на киндле я организовал подпаявшесь к кнопке питания. там при подаче низкого уровня 200-500мс хватает чтоб эмулировть короткое нажатие: https://github.com/tmpdo/tiggo_mmcu/blob/master/nano_mcu/nano_mcu.ino там этот кусок закомменчен

alexvtk
19.04.2013, 18:45
Что такое саспенд, судя по контексту спящий режим?

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

Тем же Таскером и сделайте. В качестве плагина Таскер воспринимает это (https://play.google.com/store/apps/details?id=com.siriusapplications.quickboot&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5za XJpdXNhcHBsaWNhdGlvbnMucXVpY2tib290Il0.). Использую и нет проблем.

Andrey_61
19.04.2013, 20:05
Тем же Таскером и сделайте. В качестве плагина Таскер воспринимает это (https://play.google.com/store/apps/details?id=com.siriusapplications.quickboot&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5za XJpdXNhcHBsaWNhdGlvbnMucXVpY2tib290Il0.). Использую и нет проблем.

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

Andrey_61
19.04.2013, 20:17
у меня нано в3, в холостом режиме жрет около 80ма, что много. вот по этому мануалу http://donalmorrissey.blogspot.ru/2010/04/putting-arduino-diecimila-to-sleep-part.html удолось снизить потребление в спячке до 14ма.
выключение на киндле я организовал подпаявшесь к кнопке питания. там при подаче низкого уровня 200-500мс хватает чтоб эмулировть короткое нажатие: https://github.com/tmpdo/tiggo_mmcu/blob/master/nano_mcu/nano_mcu.ino там этот кусок закомменчен

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

macau
19.04.2013, 20:21
Сейчас нечем померить потребление, вернее есть чем, но ардуина запитана через usb, как будет под рукой БП что бы подать внешнее питание поиграюсь с энергосбережением, хотя по мне так 80 мА для автомобильного аккума как слону дробинка, у меня регик запитан постоянно, жрет что то около 200 мА, проблем с аккумулятором даже зимой никогда не было, а если и начнутся, так это акум надо менять.

что-то я про 80 загнул. http://pccar.ru/showthread.php?t=18872&page=3 тут у меня все 200. конечно, возможно кот не оптимизирован, но в любом случае, в спячке оно почти ничего не потребляет

Andrey_61
19.04.2013, 21:13
что-то я про 80 загнул. http://pccar.ru/showthread.php?t=18872&page=3 тут у меня все 200. конечно, возможно кот не оптимизирован, но в любом случае, в спячке оно почти ничего не потребляет

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

Но думаю что оптимизацией процесов я займусь после того как подружу ее с joycon-ом.

Кстати если в теме есть владельцы Joycon-ов, посмотрите, как там сделана подтяжка на + 5в. каналов резистивных кнопок. Есть возможность выдрать этот резистор, или используется внутренний резистор контроллера?

Andrey_61
19.04.2013, 21:19
к вопросу об энергопотреблении, в понедельник возьму токовые клещи и посмотрю сколько а/м потребляет с выключенным зажиганием.

macau
19.04.2013, 23:10
Как я понимаю энергопотребление ардуины в том числе зависит от того, насколько тяжелый скетч в ней крутится, если так то не проблема на режим сна оставлять только проверку ACC, Нажатие кнопки энкодера, и возможно команду с ик-пульта.


вообще там 4 варианта пробуждения: через событие на уарт, через прерывание, через таймер и через пса. для меня уарт не самый удобный вариант, я пробовал через прерывание. в режиме сна в ардуине все процессы останавливаются
http://2.bp.blogspot.com/_9WOJMofzxU0/S9PyagiuISI/AAAAAAAAHY8/tGlOUPRmano/s1600/Picture+1.png
, так что сначала надо ее пробудить(в нано как раз 2 ноги отвечают за нужные прерывания, так что без труда можно повесить и кнопку и асс) а потом уже крутить код. интеррупты так же удобны тем, что можно настроить их либо на изменение уровня в любую сторону, либо как триггер

Andrey_61
20.04.2013, 00:27
т.е не зря я прерывания до последнего не трогал, как чувствовал что пригодятся. Правда с пульта не удастся запустить, но я вообще пока не решил нужен ли он мне.

Andrey_61
29.07.2013, 00:26
Есть у кого нибудь в arduino leonardo?
Пытаюсь сделать из него контроллер, надо кое что протестить, а у меня сейчас нексуса(подойдет в принципе любой девайс на андроиде) под рукой нет.

Andrey_61
01.08.2013, 17:19
В связи с тем что у меня теперь опять есть нексус решил довести проект до ума

От связки JoyCon Exr + ARDUINO решил отказаться в пользу Arduino Leonardo.

На данный момент она умеет представляться HID клавиатурой.
Работает следующий функционал.

Джойстик
________________________лево___|__право__|верх|_ни з
короткое нажатие_________←_________→______↑_____↓
длинное нажатие______PrewTrtack__NextTrack__Esk__Menu

Энкодер
_____________________вращение влево__|__вращение вправо
кн. энкодера отжата_________vol+________________vol-
кн. энкодера нажата_____________________

чуть позже прикручу ИК пульт и продублирую все команды с него.
На данный момент есть несколько вопросов
1. Как выключить планшет(совсем) минуя меню выключения.
2. в винде если нажать ALT+TAB появится список приложений, дальше удерживая ALT можно колесиком мыши листать как вперед по списку, так и назад, в андроиде эта фича не срабатывает, нужны идеи как можно повторить данный функционал. А то ALT+TAB можно листать приложения только вперед.

На выходных постараюсь снять видюху как все это работает.

Andrey_61
15.01.2014, 15:35
Проект получил развитие немного в другом направлении, вместо Arduino Nano+ JoyCon используется Arduino Leonardo, но начальная идея (контроль питания и управление) полностью сохранена, подробности можно посмотреть в моем проекте (http://pccar.ru/showthread.php?p=279316#post279316)

Sangreal
03.03.2014, 20:22
Где же обещанное видео?