PCCar.ru - Ваш автомобильный компьютер

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > AndroidCar > Беcпроводные коммуникации > Bluetooth

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2013, 03:24   #1
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
lti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond repute
По умолчанию ИК управление Android по Bluetooth

Почитав темы на подобии Резистивные кнопки под андроид, решил сделать управление планшетом с ИК пульта. Почему с ИК пульта и почему по bluetooth? Да потому, что нет у меня кнопок на руле, зато есть такой пульт и мой Galaxy Tab 2 не может работать одновременно с USB OTG и зарядкой.
Состоит данное устройство из двух частей, bluetooth модуля HC-05
Нажмите на изображение для увеличения
Название: HC-05.jpg
Просмотров: 3830
Размер:	202.2 Кб
ID:	32461
покупал на 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.
Нажмите на изображение для увеличения
Название: hc05-arduino.png
Просмотров: 2521
Размер:	32.7 Кб
ID:	32457
Ссылки:
Здесь, здесь как работать с ИК и Arduino.
Нажмите на изображение для увеличения
Название: ir-schematic.png
Просмотров: 2302
Размер:	1.0 Кб
ID:	32458
Только я использовал пин 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
Добавить если автоматически при подключении не переходит в режим "data mode". Занимает PIO3 "WAKE UP".
Код:
SET CONTROL CD 08 0
SET CONTROL BIND 0 08 RISE DELAY 0 500 SELECT 1
Скетч для arduino v.7:
Код:
#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);
  }
}
Для перехода по альбомам, кнопка вверх и вниз, используется двойное нажатие Next Track и Previous Track, т.е. arduino отсылает код два раза с паузой 0.1 секунды. Для работы функции в настройках Poweramp необходимо включить двойное и тройное нажатие.
Нажмите на изображение для увеличения
Название: Screenshot_2013-08-23-15-02-54.jpg
Просмотров: 1653
Размер:	45.4 Кб
ID:	32459
Здесь все необходимое для прошивки и настройки HC-05, включая прошивку iWRAP5.
Видео как работает устройство.

Последний раз редактировалось admin; 16.03.2017 в 00:31.
lti1 вне форума   Ответить с цитированием
Старый 25.08.2013, 15:50   #2
mas_u
Старший Пользователь
 
Регистрация: 08.05.2011
Регион: Украина
Машина: Subaru
Сообщений: 233
mas_u is on a distinguished road
По умолчанию

Цитата:
Сообщение от lti1 Посмотреть сообщение
Но прошивка iWRAP4 не позволяет использовать мультимедийные клавиши клавиатуры, такие как: Play/pause, Next Track, Previous Track и т.д.
Из доки на iWRAP4 -

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
mas_u вне форума   Ответить с цитированием
Старый 25.08.2013, 16:08   #3
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
lti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от mas_u Посмотреть сообщение
Из доки на iWRAP4 -

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
И ниже примечание, что работает только на iWRAP4.1 и выше. Прошивку 4.1 не нашёл, наверное какая то бета была, официальная утилита предлагает обновить только на 4, 4.01 и 5.01. Из выше перечисленных работает только на 5.01, сам проверял.
lti1 вне форума   Ответить с цитированием
Старый 25.08.2013, 16:29   #4
mas_u
Старший Пользователь
 
Регистрация: 08.05.2011
Регион: Украина
Машина: Subaru
Сообщений: 233
mas_u is on a distinguished road
По умолчанию

Цитата:
Сообщение от lti1 Посмотреть сообщение
И ниже примечание, что работает только на iWRAP4.1 и выше. Прошивку 4.1 не нашёл, наверное какая то бета была, официальная утилита предлагает обновить только на 4, 4.01 и 5.01. Из выше перечисленных работает только на 5.01, сам проверял.
Да, согласен. Не работает на 4.0.0.
Что бы не париться с обновлением до 5 версии еще можно настроить файл .kl для запуска мультимедиа кнопок через обычные.
mas_u вне форума   Ответить с цитированием
Старый 25.08.2013, 16:39   #5
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
lti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от mas_u Посмотреть сообщение
Что бы не париться с обновлением до 5 версии еще можно настроить файл .kl для запуска мультимедиа кнопок через обычные.
А что там париться? Прошивку 5.01 я выложил, а вопрос с лицензией решается за 30 минут (в рабочее время).
lti1 вне форума   Ответить с цитированием
Старый 26.08.2013, 12:28   #6
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
lti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от lti1 Посмотреть сообщение
Пока не все работает гладко, а именно после подключение к планшету, приходится вручную, кнопкой пульта подавать команду модулю "SELECT 1", что бы он перешел в режим "data mode", документация не вся изучена, с английским у меня туго, думаю в скором времени решу.
Из "Руководства пользователя iWRAP5 Version 1.19" следует, что модуль должен сам переходить в "data mode" при следующих событиях:
- CONNECT event
- RING event
- Escape sequence
- SELECT command
Но почему-то при - CONNECT event и - RING event он этого не делает. На прошивке iWRAP4 и iWRAP4.01 все работало как положено.
Нажмите на изображение для увеличения
Название: data mode.png
Просмотров: 1034
Размер:	92.2 Кб
ID:	32470

Сейчас пытаюсь программно решить, по событию подключено одно или более устройств (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
Но команда "SELECT 1" проходит слишком рано и модуль в "data mode" не переходит. Нужно что бы команда проходила после последней строчки "HID 1 OUTPUT 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00".
Код:
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.
lti1 вне форума   Ответить с цитированием
Старый 27.08.2013, 00:20   #7
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
lti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от lti1 Посмотреть сообщение
Сейчас пытаюсь программно решить, по событию подключено одно или более устройств (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
Решил, добавив пауза 0,5 сек. Теперь все работает как надо.
Код:
SET CONTROL CD 08 0
SET CONTROL BIND 0 08 RISE DELAY 0 500 SELECT 1
lti1 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 00:01.


Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot