25.08.2013, 03:24 | #1 |
Старший Пользователь
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
|
ИК управление Android по Bluetooth
Почитав темы на подобии Резистивные кнопки под андроид, решил сделать управление планшетом с ИК пульта. Почему с ИК пульта и почему по bluetooth? Да потому, что нет у меня кнопок на руле, зато есть такой пульт и мой Galaxy Tab 2 не может работать одновременно с USB OTG и зарядкой.
Состоит данное устройство из двух частей, bluetooth модуля HC-05 покупал на ebay, цена не больше 6$ и Carduino Nano (в дальнейшем, в моем случае будет Arduino Pro Mini). На этом форуме вычитал, что можно прошить HC-05 прошивкой iWRAP4 от WT12, с данной прошивкой модуль может прикидываться HID устройством, здесь инструкция как прошивать и схема LPT программатора. Но прошивка iWRAP4 не позволяет использовать мультимедийные клавиши клавиатуры, такие как: Play/pause, Next Track, Previous Track и т.д. Зато с этим успешно справляется iWRAP5, описание здесь. С помощью утилиты iWRAPUpdateClient, скачанной с сайта techforum.bluegiga.com производителя WT12 обновился до iWRAP5, но данная прошивка не работает без кода лицензии. На дурака, зарегистрировался на форуме techforum.bluegiga.com и по придуманному мной MAC адресу (должен быть такого вида 00:07:80:**:**:**) запросил код лицензии и о чудо, любезные сотрудники Bluegiga сообщили мне код, который был успешно залит вместе MAC адресом с помощью PSTool (входит в состав BlueSuite2_4) в мой модуль (PSKEY_BDADDR и PSKEY_MODULE_SECURITY_CODE, не забываем так же заменить PSKEY_ANA_FREQ и PSKEY_ANA_FTRIM). Потом попробовал попросить еще два кода с другой учетной записи и то же все предоставили. Решено. Пока не все работает гладко, а именно после подключение к планшету, приходится вручную, кнопкой пульта подавать команду модулю "SELECT 1", что бы он перешел в режим "data mode", документация не вся изучена, с английским у меня туго, думаю в скором времени решу. Схема подключения HC-05 к Arduino. Ссылки: Здесь, здесь как работать с ИК и Arduino. Только я использовал пин 10, а не 11, что то на arduino v.7 11-й не захотел работать. Команды настройки HC-05, делал с помощью Blue Terminal: Код:
SET BT NAME IR Remote lti1 SET BT CLASS 00540 SET BT IDENT BT:47 f000 1.0.0 IR Remote lti1 SET BT SSP 3 0 SET PROFILE HID d 40 100 0 en 0409 IR Remote lti1 HID SET F2 05010906a1010507850119e029e715002501750195088102950175088101950575010508850119012905910295017503910395067508150025650507190029658100c0050c0901a1018502050c1500250109e909ea09e209cd19b529b87501950881020a8a010a21020a2a021a23022a27027501950881020a83010a96010a92010a9e010a94010a060209b209b4750195088102c005010902a1010901a10085030509190129031500250195037501810295017505810305010930093109381581257f750895038106050c0a380295018106c0c006abff0a0002a10185047508150026ff00951009018102951009029102c0 SET CONTROL AUTOCALL 11 10000 HID SET CONTROL BAUD 9600,8n1 Код:
SET CONTROL CD 08 0 SET CONTROL BIND 0 08 RISE DELAY 0 500 SELECT 1 Код:
#include <IRremote.h> int RECV_PIN = 10; //вход ИК приемника IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // включить приемник } void loop() { IR_resiver(); } void IR_resiver() { static int a=0; // переменная переключения режима, при нажатии кнопки она принимает значение +1 static int b=0; // static int c=0; // static int d=0; // static int e=0; // static int f=0; // static int g=0; // static unsigned long time_a; static unsigned long time_b; static unsigned long time_c; static unsigned long time_d; static unsigned long time_e; static unsigned long time_f; static unsigned long time_g; static byte NEXT_TRACK[7] = {0x9f, 0x05, 0xa1, 0x02, 0x10, 0x00, 0x00}; // нажать Next Track 0x9f 0x05 0xa1 0x02 0x10 0x00 0x00 static byte PREVIOUS_TRACK[7] = {0x9f, 0x05, 0xa1, 0x02, 0x20, 0x00, 0x00}; // нажать Previous Track 0x9f 0x05 0xa1 0x02 0x20 0x00 0x00 static byte PLAY_PAUSE[7] = {0x9f, 0x05, 0xa1, 0x02, 0x08, 0x00, 0x00}; // нажать Play/pause 0x9f 0x05 0xa1 0x02 0x08 0x00 0x00 static byte RELEASE[7] = {0x9f, 0x05, 0xa1, 0x02, 0x00, 0x00, 0x00}; // отпустить все мультимедиа кнопки static byte ALT_TAB[12] = {0x9f, 0x0a, 0xa1, 0x01, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00}; // нажать Alt+Tab 0x9f 0x0a 0xa1 0x01 0x04 0x00 0x2b 0x00 0x00 0x00 0x00 0x00 static byte ALT[12] = {0x9f, 0x0a, 0xa1, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // нажать Alt 0x9f 0x0a 0xa1 0x01 0x04 0x00 0x00 0x00 0x00 0x00 0x00 0x00 static byte RELEASE_KEY[12] = {0x9f, 0x0a, 0xa1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // отпустить все клавиши 0x9f 0x0a 0xa1 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 static byte R_CTRL[12] = {0x9f, 0x0a, 0xa1, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // RIGHT CTRL для таскера static unsigned long pauseMillis = 0; if (irrecv.decode(&results)) { //0x4AB5FD02, 0x4AB57D82, 0x4AB5BD42, 0x4AB53DC2, 0x4AB5E51A, 0x4AB5B748, 0x4AB54FB0 кодs клавиш моего пульта Pioneer if (results.value == 0x4AB5FD02) {a++,time_a=millis();} // Arrow Up // обработка нажитя клавиши, здесь переменная принимает значение +1 if (results.value == 0x4AB57D82) {b++,time_b=millis();} // Arrow Down if (results.value == 0x4AB5BD42) {c++,time_c=millis();} // Arrow Left if (results.value == 0x4AB53DC2) {d++,time_d=millis();} // Arrow Right if (results.value == 0x4AB5E51A) {e++,time_e=millis();} // Play/pause if (results.value == 0x4AB5B748) {f++,time_f=millis();} // B (Задача Tasker) if (results.value == 0x4AB54FB0) {g++,time_g=millis();} // A (Alt Tab) irrecv.resume(); } if (a==1 && time_a == millis()){ Serial.write(NEXT_TRACK,7); // Двойное нажатие Next Track, следующая папка 0x9f 0x05 0xa1 0x02 0x10 0x00 0x00 Serial.write(RELEASE,7); // Отпушена Next Track 0x9f 0x05 0xa1 0x02 0x00 0x00 0x00 delay(100); Serial.write(NEXT_TRACK,7); // Второй раз нажата Next Track 0x9f 0x05 0xa1 0x02 0x10 0x00 0x00 Serial.write(RELEASE,7); // Отпушена Next Track 0x9f 0x05 0xa1 0x02 0x00 0x00 0x00 delay(10);} else if ((time_a + 200) < millis() && a != 0) {a=0;} // действие после нажатия кнопки, если переменная стала равна 1 то if (b==1 && time_b == millis()){ Serial.write(PREVIOUS_TRACK,7); // Двойное нажатие Previous Track, предыдущая папка 0x9f 0x05 0xa1 0x02 0x20 0x00 0x00 Serial.write(RELEASE,7); // Отпушена Previous Track 0x9f 0x05 0xa1 0x02 0x00 0x00 0x00 delay(100); Serial.write(PREVIOUS_TRACK,7); // Второй раз нажата Previous Track 0x9f 0x05 0xa1 0x02 0x20 0x00 0x00 Serial.write(RELEASE,7); // Отпушена Previous Track 0x9f 0x05 0xa1 0x02 0x00 0x00 0x00 delay(10);} else if ((time_b + 200) < millis() && b != 0) {b=0;} if (c==1 && time_c == millis()){ Serial.write(PREVIOUS_TRACK,7); // Нажата Previous Track 0x9f 0x05 0xa1 0x02 0x20 0x00 0x00 Serial.write(RELEASE,7); // Отпушена Previous Track 0x9f 0x05 0xa1 0x02 0x00 0x00 0x00 delay(10);} else if ((time_c + 200) < millis() && c != 0) {c=0;} if (d==1 && time_d == millis()){ Serial.write(NEXT_TRACK,7); // Нажата Next Track 0x9f 0x05 0xa1 0x02 0x10 0x00 0x00 Serial.write(RELEASE,7); // Отпушена Next Track 0x9f 0x05 0xa1 0x02 0x00 0x00 0x00 delay(10);} else if ((time_d + 200) < millis() && d != 0) {d=0;} // действие после отпускания кнопки if (e==1 && time_e == millis()){ Serial.write(PLAY_PAUSE,7); // Нажата Play/pause 0x9f 0x05 0xa1 0x02 0x08 0x00 0x00 Serial.write(RELEASE,7); // Отпушена Play/pause 0x9f 0x05 0xa1 0x02 0x00 0x00 0x00 delay(10);} else if ((time_e + 200) < millis() && e != 0) {e=0;} // действие после отпускания кнопки if (f==1 && time_f == millis()){ Serial.write(R_CTRL,12); // Задача Tasker delay(10);} else if ((time_f + 200) < millis() && f != 0) { // Serial.write(RELEASE_KEY,12); f=0;} if (g==1 && time_g == millis()){Serial.write(ALT_TAB,12); // Alt+Tab 0x9f 0x0a 0xa1 0x01 0x04 0x00 0x2b 0x00 0x00 0x00 0x00 0x00 Serial.write(ALT,12); // Alt нажат, Tab отпушен 0x9f 0x0a 0xa1 0x01 0x04 0x00 0x00 0x00 0x00 0x00 0x00 0x00 pauseMillis = 0; delay(10);} else if ((time_g + 200) < millis() && g != 0) { // действие после отпускания кнопки, ждет 1 секунду потом все клавиши отпушены 0x9f 0x0a 0xa1 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 pauseMillis = millis(); g=0;} if(pauseMillis && millis()-pauseMillis >= 1000) { pauseMillis = 0; Serial.write(RELEASE_KEY,12); } } Здесь все необходимое для прошивки и настройки HC-05, включая прошивку iWRAP5. Видео как работает устройство. Последний раз редактировалось admin; 16.03.2017 в 00:31. |
25.08.2013, 15:50 | #2 | |
Старший Пользователь
Регистрация: 08.05.2011
Регион: Украина
Машина: Subaru
Сообщений: 233
|
Цитата:
Example how to send play/pause report: 0x9f 0x05 0xa1 0x03 0x08 0x00 0x00 0x9f 0x05 0xa1 0x03 0x00 0x00 0x00 Example how to send next track report: 0x9f 0x05 0xa1 0x03 0x10 0x00 0x00 0x9f 0x05 0xa1 0x03 0x00 0x00 0x00 Example how to send previous track report: 0x9f 0x05 0xa1 0x03 0x20 0x00 0x00 0x9f 0x05 0xa1 0x03 0x00 0x00 0x00 |
|
25.08.2013, 16:08 | #3 | |
Старший Пользователь
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
|
Цитата:
|
|
25.08.2013, 16:29 | #4 | |
Старший Пользователь
Регистрация: 08.05.2011
Регион: Украина
Машина: Subaru
Сообщений: 233
|
Цитата:
Что бы не париться с обновлением до 5 версии еще можно настроить файл .kl для запуска мультимедиа кнопок через обычные. |
|
25.08.2013, 16:39 | #5 |
Старший Пользователь
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
|
|
26.08.2013, 12:28 | #6 | |
Старший Пользователь
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
|
Цитата:
- CONNECT event - RING event - Escape sequence - SELECT command Но почему-то при - CONNECT event и - RING event он этого не делает. На прошивке iWRAP4 и iWRAP4.01 все работало как положено. Сейчас пытаюсь программно решить, по событию подключено одно или более устройств (CD signal is driven high if there are one or more connections.) Код:
SET CONTROL CD 08 0 SET CONTROL BIND 0 08 RISE SELECT 1 Код:
RING 0 12:34:56:78:9a:bc 11 HID SELECT 1 SYNTAX ERROR RING 1 12:34:56:78:9a:bc 13 HID HID 1 OUTPUT 01 00 00 00 00 00 00 00 00 HID 1 OUTPUT 02 00 00 00 HID 1 OUTPUT 03 00 00 00 00 00 HID 1 OUTPUT 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Последний раз редактировалось lti1; 27.08.2013 в 00:16. |
|
27.08.2013, 00:20 | #7 | |
Старший Пользователь
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
|
Цитата:
Код:
SET CONTROL CD 08 0 SET CONTROL BIND 0 08 RISE DELAY 0 500 SELECT 1 |
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|