Управление планшетом с кнопок на руле

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Всем привет. Такой вот проект затеял, имеется машина китайская, магнитола там не стандартная 2 din, всего 7 см лубиной и кроме как играть mp3 и радио она не умеет. Решил заменить её на планшет, потому как подходящие магнитолы стоят от 25к.р. что не приемлимо, планшет по акции обошёлся всего в 1590р, сделал УНЧ, всё подключил и всё прекрасно работает и функционал огромнейший. Но остался один нюанс, остались родные кнопки управления под магнитолой и на руле. Больше смущают под магнитолой:

для этих целей решил использоваь вот такой модуль Arduino Micro Pro как на нём написано, хотя компом рапознаётся как Leonardo

За основу было взята вот такая схема, думаю все её видели и знают, правда кнопок у меня больше:

И вот это видео: http://vk.com/video-87144089_171238612

В программирования я пока НАЧИНАЮЩИЙ (больше по железу), прошу помощи в добавке пары функций. А именно переключение треков я сделал, на скетче видно

проверял, треки переключаются! Как сделать:

1) "Mute" отключение/включение звука

2)  добавить нопки "Домой" и "Назад", так сказать продублировать экранные кнопки на Android планшете

3) добавить кнопки, допустим F1, F2, F3, F4 (как на любой клаве) в поледствии на них будет забит автозапуск определённых приложения, но это уже в самом планшете.

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

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Дайте весь скетч посмотреть.

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Так как я не смог сделать то что тут попросил в 3-х пунктах, сделал пока так что работают только две кнопки - переключения песен. А весь скетч на скрине, если нужно выложу файлом. Есть сомнения что это работает?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

из того, что на скрине, не понятно какие библиотеки используются.

класс Remote откуда?

А так - просто добавьте остальные диапозоны для резистивных кнопок. В принциве нужно проверять, но если тенденция верна - с шагом 100.

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Вот ссылка на загрузку иде с интегрированной(исправленной) библитекой: USB Remote Control and Multimedia Keys support for Arduino Platform 1.0.5

Порылся, используется исправленный однако USBAPI.h - Introduced support for Consumer Control devices on Leonardo and Micro, так как в официальных релизах его содержание другое, хотя ХЗ, я не качал все, проверил только последних несколько версий и 1.0.5.

Вот к стати первоисточник, он указан у автора видео.

Mikhail_Sakh
Offline
Зарегистрирован: 03.04.2014

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

2. Есть в андроиде быстрый запуск, т. е. можно назначить практически любое действие на клавишу клавиатуры т.е. Леонардо (Pro Micro) Еще инфа... у меня так же работает отлично. 

Удачи!

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Gippopotam пишет:

из того, что на скрине, не понятно какие библиотеки используются.

класс Remote откуда?

А так - просто добавьте остальные диапозоны для резистивных кнопок. В принциве нужно проверять, но если тенденция верна - с шагом 100.

Откуда Remote я если честно не знаю, я только начал в этом капаться. Все познания программирования у меня закончились на basic. Ковырял управление LPT портом на нём. Все 9 кнопок я добавял. Но вот как на них повесить функии клавиатурных клавишь я хз... Руководствовался видео что приводил по ссылке

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Первоисточник я смотрел, сделал "mute" на компе она работает, а вот планшет на андройде не воспринимает её. В итоге сделал play/pause, если не придераться то функия таже почти - музыка затыкается. Треки переключаются. С кнопкой "Назад" вроде как понятно - это клавиша Esc но как её забиндить на мою резестивную кнопку ума не приложу.

То что привели ниже с сайта carPC читал, но не могу разобраться в коде, а разжевать желающих нет :(

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Я был на carPC там из дополнительных кнопок только "Alt+Тab", а мне нужно 6 т.е. ещё 5 кнопок добавить и я что то никак не пойму куда копать... Да и среди этих 7 должна быть одна "Esc"

Mikhail_Sakh
Offline
Зарегистрирован: 03.04.2014

Morfey86rus пишет:

Я был на carPC там из дополнительных кнопок только "Alt+Тab", а мне нужно 6 т.е. ещё 5 кнопок добавить и я что то никак не пойму куда копать... Да и среди этих 7 должна быть одна "Esc"

В андроиде есть кнопка BACK. Функции те же, что и у ESC в винде. У BACK есть свой код. Его в ардуину и будет вам ESC. 4pda

Я же писал выше

Mikhail_Sakh пишет:

2. Есть в андроиде быстрый запуск, т. е. можно назначить практически любое действие на клавишу клавиатуры т.е. Леонардо (Pro Micro) 

Войдите в это скрытое меню переназначения клавиш и будет Вам счастье. У меня клавиша F1 (по Вашему) на руле одна. С нее я запускаю Таскеровский плагин Autovoice Recognize (вроде так называется), в этот момент затыкается музыка, я произношу допустим "навигация" и оп! открывается яндекс навигатор... или например "музыка" и открывается плеер.... В таскере для всех этих команд назначил соответствующее действие... 

Вам проще, у вас куча кнопок F.... открывайте меню, назначайте запуск приложений на кнопки.... 

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

З.Ы. вот еще нашел на скорую руку....

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

С новым годом всех! С автозапуском я разобрался, ту ничего сложного нет. Я застрял на самих кнопках. Вот накидал небольшой скетч по своим клавишам:

int analogPin=0;
int data;
 
void setup()
{
  Keyboard.begin();
  Serial.begin(9600);
}
 
void loop()
{
  data=analogRead(analogPin); //читаем значение нажатой кнопки
  Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
 
  if (data==614)  Keyboard.write(177); //Esc
  if (data==122)  Keyboard.write(195); //F2
  if (data==165)  Keyboard.write(196); //F3
  if (data==216)  Keyboard.write(197); //F4
  if (data==276)  Keyboard.write(198); //F5
  if (data==277)  Keyboard.write(199); //F6
  if (data>=315 && data<=345)  // следующий трек
    {
      Remote.next();
      Remote.clear();
    }
  if (data>=315 && data<=345)  // предыдущий трек
  {
  Remote.previous();
  Remote.clear();
  }
  if (data>=420 && data<=460)  // воспроизведение / пауза
    {
      Remote.play_pause();
      Remote.clear();
    }
  delay(100);
}
 
В начале не стал прописывать предел для резестивной кнопки на клавиши F. Меня интересует вопрос если нажать кнопку, допустим F1, и отпустить тоне будет ли эффекта залипания? А то я тут эксперементировал с клавишей ESC, получилось, но поймал глюк. Она постоянно срабатывала с интервалм в 0,5сек и при этом печаталась буква "т" руской раскладки. Т.е. Записал скетч в ардуину, всё ОК, нажал кнопку и понеслось, кнопку то отпустил а выполнение команды продолжалось. Два часа голову ломал как прекратить, прошить не мог, все менюшки в программе закрывались :) Посоветовали написать на клавишу так: if (data==614)  Keyboard.write(177); //Esc при нажатии не залипнит???
Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Сам спросил сам и отвечу, невыдержал от любопытства и залил скетч только с клавишей ESC и всё прекрасно работает, осталось раздобыть кнопку HOME и будет мне счастье :)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Morfey86rus, в библиотеке должен быть файл описаний с синтаксисом команд. После нажатия клавиши скорее всего нужно подать код отжатия Keyboard.write(0); или что-то вроде того. Смотрите в библе.

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

спасибо за подсказки, всё работает, никто не подскажет как быть с сенсорной кнопкой Home на экране планшета??? Как её продублировать физической кнопкой, что прописать???

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Morfey86rus, вам нужно узнать её скан-код. Если это аналог мультимедийной кнопки Home, то придётся вписать в библиотеку новую функцию для кода 0x0223. Если аналог обычной кнопки Home, то вписать её скан-код в keyboard.write(0x4a)

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

К сожалению это не обычная кнопка Home (что на всех клавах имеется), у меня мультимедия клава на ней есть кнопка Home (ввиде домика) тоже не работает как в Андройде, а только в браузере переходит на домашнюю страницу! Методом проб, ошибок и интернета выяснил что сенсорная кнопка Home на Андройде это сочетание двух клавишь: Alt+Esc, dimax как забить сочетание клавишь не подскажешь?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Morfey86rus, хм что то вроде этого:

Keyboard.press(KEY_RIGHT_ALT); Keyboard.press(KEY_ESC); delay(5); Keyboard.releaseAll();

 

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

dimax, спасибо за подсказку. Как раз хотел сам предложить почти такое же:

 if (data==165) //Left ALT + Esc
  {
    Keyboard.write(130);  //LEFT_ALT
    Keyboard.write(177);  //Esc
    delay(100);
    Keyboard.releaseAll();
  }
Щас попробую, посмотрим что получится...
Morfey86rus
Offline
Зарегистрирован: 20.12.2015

dimax, а что не обезательно кодом (цифрами) клавиши вбивать? Кстати всё работает, только паузу поставил как 100, а то с 5 очень шустро и порой как будто несколько раз нажал

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Morfey86rus, по желанию. Там в файлике USBAPI.h расписаны дефайны переназначения кодов.

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

dimax, понял спасибо. А не скажешь энкондер настраивать сложно, т.е. скетч под него написать??? Держу пари у меня энкондер оптический как старые мышки те что с шариком были. Потому как может крутится в разные стороны без ограничния. Хотя может конструкция быть другой, кнопки завтро наверное с машины выдеру, пока всё на макетке собираю

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Ребята помогите пожалуйста с подключение энкондера, никак не пойму как его подключить и к каким выводам. У него 3 вывода и корпус; корпус и средний вывод прозваниваются, думаю что общий и получается верхний и нижний выводы на управление. Представляю как он работает, но как его подключить, и куда для меня пока загадка. И как написать скетч для управления громкостью. Буду очень благодарен, не оставляйте начинающего :)))

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Подключился я этот энкондер к ардуине, подал питание +5В через два резистора 10к на крайние выводы энкодера. Написал скетч, всё работает, но постоянно проскакивают глюки! Т.е. крутишь энкондер вправо (прибавляю звук) он начинает прибавляется и появляется индикатор, но тут же звук может убавиться на пару пунктов, потом прибавился чуть чуть и основу убавиться. Тоже самое происходит когда уменьшает громкость. Пока не дома, как приеду выложу скетч. Помогите с этим разобраться, уже 3 дня мозг выношу и гугл замучили уже. Весь проект из-за это у меня встал, на мамашине без музыки езжу, жуть как тяжко! Выручайте ребята

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

1000-10000  пик на каждый вход подвесьте......

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Я так понимаю по конденсаторы с крайних ножек на центральную (общую) повесить, я правильно понял?

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Да

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Спасибо большое, добавил по конденсатору в 0,1мкф в каждое плечё и всё прекрасно заработало - никаких глюков!

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Последний вопрос, как оказалось кнопка On/Off на панельки сидит с верхним рядом мультимедийных кнопок. А Power на планшете сам по себе, даже на общий не звонится, отсюда хочу замутить вот такое решение:

Настроить эту кнопку с панель как и все резестивные, но так чтоб она подавала логический сигнал на один из цифровых выходов, а на цифровой выход повесить оптопару с транзисторным выходом 4N26 (других у меня нет:)) Что получилось таким макаром, нажал на кнопку, а транзистор закрмкнул контакты на планшете, отпустил кнопку и транзистор вернулся в  исходное состояние; по типу кнопки без фиксации. Можно такое провернуть и именно с этой оптопарой?

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Полностью разобрался и всё сделал, работает прекрасно. Но появилась мысль можно ли две кнопки повесить функции принятия звонка и окончание, т.е. красную и зелёную трубку сделать???

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Ещё раз всем привет. Решил добавить ещё одну пару функция на одну кнопку, которая будет управлять двумя цифровыми выводами, но как это сделать ума не приложу. Кучу инфы перечитал и пересмотрел но ..... застрял.

В кратце: есть кнопка на аналоговом входе со значением 173 и на неё две функции должно висеть. При одиночном нажатии должен податься сигнал на 13pin, на котором висит релеи оно должна сработать, кнопку отпустили, реле всё равно замкнула цепь, т.е. сигнал HIGH с 13 pin не пропадает до следующего нажатия. С этим вроде разобрался чуть чуть, правда не пойму как побароть дребезг контактов. А вот вторая функция скажим так: при длительном нажатии (скажем 2...3сек) на туже кнопку должна подать сигна на 1pin и активировать оптопару, кнопку отпустили оптопара осталась в сработке, опять нажали (скажем на 2...3сек) и оптопара выключилась. 

Поскажите как это организовать на одной кнопке, буду очень благодарен примеру, не бросайте новичков! Заранее спасибо!!!

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

вот что накидал. Поидеи должен по первому нажатию включить встроенный светодиод на pin13 и выключить его по второму нажатию. Скажите работать будет, дело в том что уехал на вахту, а контроллер забыл дома :(

int analogPin = A0;
int rknop;
int ledPin = 13;
boolean lastButton = LOW;
boolean ledOn = false;
 
void setup ()
{
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}
 
void loop()
{
  rknop=analogRead(A0);   //значение аналоговой кнопки 173
  
  if(rknop <185 && rknop>165 && lastButton == LOW)
  {
    ledOn = !ledOn;
    lastButton = HIGH;
  }
  else
  {
    lastButton = (rknop <185 && rknop>165);
  }
  digitalWrite(ledPin, ledOn);
}
Morfey86rus
Offline
Зарегистрирован: 20.12.2015

работает как и хотелось. Нашёл интузиаста который проверит. А как сделать на туже кнопку только по долгому нажатию и управление по другому пину, а не по 13?????

Mxgoodwin
Offline
Зарегистрирован: 09.12.2016

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

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Пиши либо сюда либо в вибер, если есть, мой номер +79097117860

Mxgoodwin
Offline
Зарегистрирован: 09.12.2016

А есть в контакте аккаунт? Вибер начал ставить, тел пишет нет места... чертова вражеская техника. Если есть можешь стукнуть в вк? https://vk.com/maxgoodwin

По началу вопросы могут быть очень тупыми, не хочу форум засорять )

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Mxgoodwin пишет:

чертова вражеская техника.

Ну так выкинь и не пользуйся....

Mxgoodwin
Offline
Зарегистрирован: 09.12.2016

Jeka_M пишет:

Ну так выкинь и не пользуйся....

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

Morfey86rus
Offline
Зарегистрирован: 20.12.2015

Контакта нет к сожалению, а может и к счастью. Только вибер и ватсап и уже на номере +79505297370

Migel85
Offline
Зарегистрирован: 07.12.2017

Всем привет, кто может написать скетч? Задача такая: на одну ногу посадить кнопки alt+tab, play_pause, перемотка вперед-назад, на вторую: громкость +/-, назад, ответить на вызов, завершить вызов (mute). Я в программировании полный ноль, мне проще спаять, сварить че нибудь

dimonqrz
Offline
Зарегистрирован: 12.11.2017

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

dimonqrz
Offline
Зарегистрирован: 12.11.2017

поделитесь скетчем и схемой