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

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > Разработка программ > Программы управления > iCarDS

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2013, 12:47   #1
filinmd
Старший Пользователь
 
Аватар для filinmd
 
Регистрация: 20.03.2012
Возраст: 33
Город: Москва
Регион: 77, 97, 99, 177
Машина: Ford Focus 2, Audi Q7
Сообщений: 163
filinmd will become famous soon enoughfilinmd will become famous soon enough
По умолчанию iCarDuino + MMI пульт AUDI

Ну что ж, начну свой рассказ ...

Хочу подключить пульт MMI от Audi к своему PCCar/

Подключать буду через Arduino https://duino.ru/arduino.html
Основной задачей пульта будет управление в iCar.
С отправкой и получением команд от пульта я разобрался ( Еще раз ОГРОМНОЕ СПАСИБО crashmilan )

Подключаюсь к пульту через терминал Extem. Настройки 9600,8,2.
PHP код:
#include <SoftwareSerial.h>
SoftwareSerial MMI_Serial(42);
byte mmi2pc;

byte pc2mmi;



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

void loop() // run over and over
{
  if (
MMI_Serial.available())
  {
    
mmi2pc MMI_Serial.read();
    
Serial.write(mmi2pc);
    
MMI_Serial.write(06);   // это ответ пульту, что данные получены
     

      
   
  if (
Serial.available())
  {
    
pc2mmi Serial.read();
    
MMI_Serial.write(pc2mmi);
  }
  } 
И все шикарно работает, и отправка и получение.
Вроде бы все хорошо, но как всегда без "НО" не обошлось...


Попробовал по управлять iCar.
Без бубна не обошлось. Для этого мне пришлось программно включать пульт через терминал( Для этого надо отправить на пульт команду 10 02 70 12 10 03 A7 и после этого можно получить инфу о нажатии кнопок) а потом запускать iCarDS и в настройках плагина назначать кнопки. Одна кнопка в iCar имеет несколько значений, но это как я понял из за того что плагин получает не привычное для него количество байт.



А вот теперь расскажу про "НО"...

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

Пробовал обрабатывать через switch case... вроде что то получалось, но отправить заветный код (10 02 70 12 10 03 A7) включения так и не смог, хотя код подтверждения (06) отправляется и пульт его прекрасно понимает.

Прошу помощи у Вас, великие Гуру, разобрать с отправкой кодов на пульт.

Вот пример общения в терминале:

PHP код:
1
67 1A 04 FA 27 C5 00  // Когда появляется питание на пульте он начинает посылать этот код, на который требуется подтверждение получения "06"
2
67 1A 04 FA 27 C5 00  // Когда появляется питание на пульте он начинает посылать этот код, на который требуется подтверждение получения "06"
3
06   // Отправляю на пульт код подтверждения 
4
10 02 70 12 10 03 A7    // Отправляю на пульт код [B]включения [/B]
5
7E 00    //  Ответ пульта что он принял код 

67 2A DF F2 4B 00  //  Ответ пульта что он включился 
6
06  // Отправляю на пульт код подтверждения 
7
10 02 64 99 01 10 03 23  // Отправляю на пульт код [B]разрешения на включение  подсветки возле кнопок[/B]
8
7E 00  //  Ответ пульта что он принял код 
9
06 // Отправляю на пульт код подтверждения 
10
10 02 68 01 02 10 03 90 // Отправляю на пульт код [B]включения подсветки возле кнопки MEDIA[/B]
11
7E 00  //  Ответ пульта что он принял код 
12
06 // Отправляю на пульт код подтверждения 

Последний раз редактировалось admin; 21.03.2017 в 02:31.
filinmd вне форума   Ответить с цитированием
Старый 14.03.2013, 14:36   #2
Bersenev
Бывалый писикарщик
 
Аватар для Bersenev
 
Регистрация: 23.04.2009
Возраст: 53
Город: Ставрополь
Регион: 26
Машина: Opel Zafira 2007
Сообщений: 5,275
Bersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant future
По умолчанию

2 filinmd

Из общения в личке я понял, что ты уже сделал скетч который общается с ардуино и отправляет данные в плагин iCarDuino в нужном формате, а получается что ещё нет.

Давай уточним такой момент. Когда пульт шлет это

67 1A 04 FA 27 C5 00 // Когда появляется питание на пульте он начинает посылать этот код, на который требуется подтверждение получения "06"

Он это делает постоянно с каким-то временным интервалом или один раз и ждёт код подтверждения?
Bersenev вне форума   Ответить с цитированием
Старый 14.03.2013, 14:56   #3
filinmd
Старший Пользователь
 
Аватар для filinmd
 
Регистрация: 20.03.2012
Возраст: 33
Город: Москва
Регион: 77, 97, 99, 177
Машина: Ford Focus 2, Audi Q7
Сообщений: 163
filinmd will become famous soon enoughfilinmd will become famous soon enough
По умолчанию

Цитата:
Сообщение от Bersenev Посмотреть сообщение

Давай уточним такой момент. Когда пульт шлет это

67 1A 04 FA 27 C5 00 // Когда появляется питание на пульте он начинает посылать этот код, на который требуется подтверждение получения "06"

Он это делает постоянно с каким-то временным интервалом или один раз и ждёт код подтверждения?
Мой косяк,что не уточнил в личке что данные идут не в формате плагина.


67 1A 04 FA 27 C5 00 он шлет до получения 06



p.s. сейчас наткнулся на скетч для iBUS.... сижу разбираюсь, задачи похожи.
filinmd вне форума   Ответить с цитированием
Старый 14.03.2013, 15:17   #4
Bersenev
Бывалый писикарщик
 
Аватар для Bersenev
 
Регистрация: 23.04.2009
Возраст: 53
Город: Ставрополь
Регион: 26
Машина: Opel Zafira 2007
Сообщений: 5,275
Bersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant future
По умолчанию

Цитата:
Сообщение от filinmd Посмотреть сообщение
67 1A 04 FA 27 C5 00 он шлет до получения 06

с каким то временным интервалом (если да, то с каким примерно) или без остановки?
Bersenev вне форума   Ответить с цитированием
Старый 14.03.2013, 15:23   #5
filinmd
Старший Пользователь
 
Аватар для filinmd
 
Регистрация: 20.03.2012
Возраст: 33
Город: Москва
Регион: 77, 97, 99, 177
Машина: Ford Focus 2, Audi Q7
Сообщений: 163
filinmd will become famous soon enoughfilinmd will become famous soon enough
По умолчанию

Цитата:
Сообщение от Bersenev Посмотреть сообщение
с каким то временным интервалом (если да, то с каким примерно) или без остановки?
Вообщем так:

Даю 12В на пульт и он начинает посылать этот код раз в секунду ( может и быстрее но терминал выдает его примерно с таким интервалом ). Если не посылать ему ответ то он отправит 20 таких кодов и уйдет в режим ожидания. По этому я ему сразу даю "06" и его это полностью устраивает и с ним у меня проблем нет. Проблема в отправке коде на включение, который нужно отправить пульту.
filinmd вне форума   Ответить с цитированием
Старый 14.03.2013, 15:42   #6
Bersenev
Бывалый писикарщик
 
Аватар для Bersenev
 
Регистрация: 23.04.2009
Возраст: 53
Город: Ставрополь
Регион: 26
Машина: Opel Zafira 2007
Сообщений: 5,275
Bersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant future
По умолчанию

ещё такой вопрос, все команды от пульта начинаются с байта 67, а заканчиваются байтом 00? Кроме кода подтверждения FE 00 разумеется
Bersenev вне форума   Ответить с цитированием
Старый 14.03.2013, 16:51   #7
filinmd
Старший Пользователь
 
Аватар для filinmd
 
Регистрация: 20.03.2012
Возраст: 33
Город: Москва
Регион: 77, 97, 99, 177
Машина: Ford Focus 2, Audi Q7
Сообщений: 163
filinmd will become famous soon enoughfilinmd will become famous soon enough
По умолчанию

Цитата:
Сообщение от Bersenev Посмотреть сообщение
ещё такой вопрос, все команды от пульта начинаются с байта 67, а заканчиваются байтом 00? Кроме кода подтверждения FE 00 разумеется
Ура, я разобрался. Пульт тепреь включает Ардуинка , и нажатие каждой кнопки я могу отправить в Serial в любом удобном виде.
Единственный нюанс что работает только на скорости 9600.


Теперь хотелось бы получить ответ от плагина: какое окно открыто.

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

PHP код:
//*****************************************************          Системные коды          *******************************************************************

byte START_12V[8] = {00x670xFF0x1A0x040xFA0x270xC5}; // 67 FF 1A 4 FA 27 C5 
byte Pult_ON[8] = {00x100x020x700x120x100x030xA7}; // c10 02 70 12 10 03 A7  

byte Pult_ON_Otvet[8] = {00x670xFF0x2A0xDF0xF20x4B0x00 }; //     67 FF 2A DF F2 4B 0 

byte Knopki_ON[8] = {0x100x020x640x990x010x100x030x23}; // 10 02 64 99 01 10 03 23 
byte Podsvetka_ON[8] = {0x100x020x600x9A0x010x100x030x20}; // 10 02 60 9A 01 10 03 20 


Сейчас скетч причешу и выложу...
filinmd вне форума   Ответить с цитированием
Старый 15.03.2013, 10:59   #8
pierrotm777
Старший Пользователь
 
Аватар для pierrotm777
 
Регистрация: 07.11.2010
Регион: другой - для добавления сообщить ab
Сообщений: 324
pierrotm777 is just really nicepierrotm777 is just really nicepierrotm777 is just really nicepierrotm777 is just really nice
По умолчанию

Sorry,
I don't speak russian,
How do you connect the arduino to your Aud MMI system (what electrical interface)
pierrotm777 вне форума   Ответить с цитированием
Старый 15.03.2013, 12:07   #9
filinmd
Старший Пользователь
 
Аватар для filinmd
 
Регистрация: 20.03.2012
Возраст: 33
Город: Москва
Регион: 77, 97, 99, 177
Машина: Ford Focus 2, Audi Q7
Сообщений: 163
filinmd will become famous soon enoughfilinmd will become famous soon enough
По умолчанию

Цитата:
Сообщение от pierrotm777 Посмотреть сообщение
Sorry,
I don't speak russian,
How do you connect the arduino to your Aud MMI system (what electrical interface)
MMI ARDUINO

16 pin ---- D2
15 pin ---- D4


Sketch in the next Post
filinmd вне форума   Ответить с цитированием
Старый 15.03.2013, 12:18   #10
filinmd
Старший Пользователь
 
Аватар для filinmd
 
Регистрация: 20.03.2012
Возраст: 33
Город: Москва
Регион: 77, 97, 99, 177
Машина: Ford Focus 2, Audi Q7
Сообщений: 163
filinmd will become famous soon enoughfilinmd will become famous soon enough
По умолчанию

И так отчитываюсь за проделанную работу.

Ардуиной могу делать с пультом все что угодно

Текущий скетч с демонстрацией возможностей.
PHP код:
#include <SoftwareSerial.h>
SoftwareSerial MMI(42); //TX, RX пульта  

int MMIreceiveByte 0;          // byte reading from MMI
byte MMIbyte[8] = {0,0,0,0,0,0,0,0}; // key byte sequence 
int Delay 10//delay in millisec 
int MMIcom 0//boolean value set 1 if comand detected 
int ComID 0// comand ID (for easy select case routine) 
int otvet 0// id otveta

int incomingByte 0;      // byte reading from serial port 

//*****************************************************          Системные коды          *******************************************************************

byte START_12V[8] = {00x670xFF0x1A0x040xFA0x270xC5}; // Ответ пульта после подачи +12 67 FF 1A 4 FA 27 C5 
byte Pult_ON[8] = {00x100x020x700x120x100x030xA7}; // Команда включение пульта  10 02 70 12 10 03 A7  

byte Pult_ON_Otvet[8] = {00x670xFF0x2A0xDF0xF20x4B0x00 }; // Ответ пульта после программного включения 67 FF 2A DF F2 4B 0 

byte Knopki_ON[8] = {0x100x020x640x990x010x100x030x23}; // Разрешить подсветку  10 02 64 99 01 10 03 23 
byte Podsvetka_ON[8] = {0x100x020x600x9A0x010x100x030x20}; // Включение общей  подсветки кнопок  10 02 60 9A 01 10 03 20





//*****************************************************           Коды кнопок          *******************************************************************

byte NAVI_DOWN[8] = {00x670xFF0x3E,0xF50xDF0xF20x4B}; // Нажатие кнопки  67 FF 3E F5 DF F2 4B                   *Проверено
byte NAVI_1_DOWN[8] = {00x670xFF0x3A0xEA0xDF0xF20x49}; // Отпустили кнопку 67 FF 3A EA DF F2 49               *Проверено

byte INFO_DOWN[8] = {00x670xFF0x3E0xF30xDF0xF20x49}; //Нажатие кнопки 67 FF 3E F3 DF F2 49                    *Проверено
byte INFO_1_DOWN[8] = {00x670xFF0x3A0xE60xDF0xF20x47}; // Отпустили кнопку 67 FF 3A E6 DF F2 47               *Проверено

byte CAR_DOWN[8] = {00x670xFF0x3E0xF10xBE0xF20x47}; //Нажатие кнопки  67 FF 3E F1 BE F2 47                    *Проверено
byte CAR_1_DOWN[8] = {00x670xFF0x3A0xE20xBE0xF20x45}; // Отпустили кнопку 67 FF 3A E2 BE F2 45                *Проверено

byte SETUP_DOWN[8] = {00x670xFF0x3E0xEF0xBE0xF20x45}; //Нажатие кнопки  67 FF 3E EF BE F2 45                  *Проверено
byte SETUP_1_DOWN[8] = {00x670xFF0x3A0xDE0xBE0xF20x43}; // Отпустили кнопку 67 FF 3A DE BE F2 43              *Проверено

byte RADIO_DOWN[8] = {00x670xFF0x3E0xCF0xDF0xF20x25}; //Нажатие кнопки  67 FF 3E CF DF F2 25                  *Проверено 
byte RADIO_1_DOWN[8] = {00x670xFF0x3A0x9E0xDF0xF20x23}; // Отпустили кнопку 67 FF 3A 9E DF F2 23              *Проверено

byte MEDIA_DOWN[8] = {00x670xFF0x3E0xFB0xBE0xF20x51}; //Нажатие кнопки  67 FF 3E FB BE F2 51                  *Проверено
byte MEDIA_1_DOWN[8] = {00x670xFF0x3A0xF60xBE0xF20x4F}; // Отпустили кнопку 67 FF 3A F6 BE F2 4F              *Проверено 

byte NAME_DOWN[8] = {00x670xFF0x3E0xF90xDF0xF20x4F}; // Нажатие кнопки  67 FF 3E F9 DF F2 4F                  *Проверено
byte NAME_1_DOWN[8] = {00x670xFF0x3A0xF20xDF0xF20x4D}; // Отпустили кнопку 67 FF 3A F2 DF F2 4D               *Проверено

byte TEL_DOWN[8] = {00x670xFF0x3E0xF70xBE0xF20x4D}; // Нажатие кнопки  67 FF 3E F7 BE F2 4D                   *Проверено
byte TEL_1_DOWN[8] = {00x670xFF0x3A0xEE0xBE0xF20x4B}; // Отпустили кнопку 67 FF 3A EE BE F2 4B                *Проверено

byte LeftReturn_DOWN[8] = {00x670xFF0x3E0xE70xDF0xF20x3D}; // Нажатие кнопки  67 FF 3E E7 DF F2 3D            *Проверено
byte LeftReturn_1_DOWN[8] = {00x670xFF0x3A0xCE0xDF0xF20x3B}; //Отпустили кнопку  67 FF 3A CE DF F2 3B         *Проверено

byte Return_DOWN[8] = {00x670xFF0x3E0xE10xDF0xF20x37}; // Нажатие кнопки  67 FF 3E E1 DF F2 37                *Проверено
byte Return_1_DOWN[8] = {00x670xFF0x3A0xC20xDF0xF20x35}; // Отпустили кнопку 67 FF 3A C2 DF F2 35             *Проверено

byte RightReturn_DOWN[8] = {00x670xFF0x3E0xDF0xBE0xBE0xF2}; // Нажатие кнопки  67 FF 3E DF BE BE F2           *Проверено
byte RightReturn_1_DOWN[8] = {00x670xFF0x3A0xBE0xBE0xBE0xF2}; // Отпустили кнопку 67 FF 3A BE BE BE F2        *Проверено 

byte Big_Left[8] = {00x670xFF0xBA0xF40xBE0xF20x11}; // Повернули против часовой  67 FF BA F4 BE F2 11         *Проверено   
byte Big_DOWN[8] = {00x670xFF0x3E0xFD0xBE0xF20x53}; // Нажатие кнопки  67 FF 3E FD BE F2 53                   *Проверено  
byte Big_1_DOWN[8] = {00x670xFF0x3A0xFA0xBE0xF20x51}; // Отпустили кнопку 67 FF 3A FA BE F2 51                *Проверено  
byte Big_Right[8] = {00x670xFF0xBE0xF50xBE0xF20x13}; // Повернули по часовой 67 FF BE F5 BE F2 13             *Проверено  

byte Small_Left[8] = {00x670xFF0xFA0xF50xBE0xF20x31}; // овернули против часовой  67 FF FA F5 BE F2 31        *Проверено   
byte Small_Right[8] = {00x670xFF0xFE0xF40xBE0xF20x33}; // Повернули по часовой 67 FF FE F4 BE F2 33           *Проверено     
byte Small_DOWN[8] = {00x670xFF0x3E0x8F0xBE0xF20xE5}; // Нажатие кнопки  67 FF 3E 8F BE F2 E5                 *Проверено   
byte Small_1_DOWN[8] = {00x670xFF0x3A0x1E0xBE0xF20xE3}; // Отпустили кнопку 67 FF 3A 1E BE F2 E3              *Проверено       

byte LeftUP_DOWN[8] = {00x670xFF0x3E0xEB0xDF0xF20x41}; // Нажатие кнопки  67 FF 3E EB DF F2 41               *Проверено
byte LeftUP_1_DOWN[8] = {00x670xFF0x3A0xD60xDF0xF20x3F}; // Отпустили кнопку 67 FF 3A D6 DF F2 3F            *Проверено

byte LeftDown_DOWN[8] = {00x670xFF0x3E0xE90xBE0xF20x3F}; // Нажатие кнопки  67 FF 3E E9 BE F2 3F             *Проверено
byte LeftDown_1_DOWN[8] = {00x670xFF0x3A0xD20xBE0xF20x3D}; // Отпустили кнопку 67 FF 3A D2 BE F2 3D          *Проверено

byte RightUP_DOWN[8] = {00x670xFF0x3E0xE50xBE0xF20x3B}; // Нажатие кнопки  67 FF 3E E5 BE F2 3B              *Проверено
byte RightUP_1_DOWN[8] = {00x670xFF0x3A0xCA0xBE0xF20x39}; // Отпустили кнопку 67 FF 3A CA BE F2 39           *Проверено

byte RightDown_DOWN[8] = {00x670xFF0x3E0xE30xBE0xF20x39}; // Нажатие кнопки  67 FF 3E E3 BE F2 39            *Проверено
byte RightDown_1_DOWN[8] = {00x670xFF0x3A0xC60xBE0xF20x37}; // Отпустили кнопку 67 FF 3A C6 BE F2 37         *Проверено


//*****************************************************           Коды лампочек           *******************************************************************

byte NAVI_ON[8] = {0x100x020x680x010x050x100x030x93}; // 10 02 68 01 05 10 03 93                             *Проверено
byte NAVI_OFF[8] = {0x100x020x680x000x050x100x030x92}; // 10 02 68 00 05 10 03 92                            *Проверено        

byte INFO_ON[8] = {0x100x020x680x010x060x100x030x94}; // 10 02 68 01 06 10 03 94                             *Проверено
byte INFO_OFF[8] = {0x100x020x680x000x060x100x03 0x93}; // 10 02 68 00 06 10 03 93                           *Проверено        

byte CAR_ON[8] = {0x100x020x680x010x070x100x030x95}; // 10 02 68 01 07 10 03 95                              *Проверено
byte CAR_OFF[8] = {0x100x020x680x000x070x100x030x94}; // 10 02 68 00 07 10 03 94                             *Проверено

byte SETUP_ON[8] = {0x100x020x680x010x080x100x030x96}; // 10 02 68 01 08 10 03 96                            *Проверено
byte SETUP_OFF[8] = {0x100x020x680x000x080x100x030x95}; // 10 02 68 00 08 10 03 95                           *Проверено 

byte RADIO_ON[8] = {0x100x020x680x010x180x100x030xA6}; // > 10 02 68 01 18 10 03 A6                          *Проверено 
byte RADIO_OFF[8] = {0x100x020x680x000x180x100x030xA5}; // > 10 02 68 00 18 10 03 A5                         *Проверено      

byte MEDIA_ON[8] = {0x100x020x680x010x020x100x030x90}; // 10 02 68 01 02 10 03 90                            *Проверено
byte MEDIA_OFF[8] = {0x100x020x680x000x020x100x030x8F}; // 10 02 68 00 02 10 03 8F                           *Проверено   

byte NAME_ON[8] = {0x100x020x680x010x030x100x030x91}; // 10 02 68 01 03 10 03 91                             *Проверено   
byte NAME_OFF[8] = {0x100x020x680x000x030x100x030x90}; // 10 02 68 00 03 10 03 90                            *Проверено   

byte TEL_ON[8] = {0x100x020x680x010x040x100x030x92}; // 10 02 68 01 04 10 03 92                              *Проверено
byte TEL_OFF[8] = {0x100x020x680x000x040x100x030x91}; // 10 02 68 00 04 10 03 91                             *Проверено

byte LeftUP_ON[8] = {0x100x020x680x010x0A0x100x030x98}; // 10 02 68 01 0A 10 03 98                           *Проверено
byte LeftUP_OFF[8] = {0x100x020x680x000x0A0x100x030x97}; // 10 02 68 00 0A 10 03 97                          *Проверено    

byte LeftDown_ON[8] = {0x100x020x680x010x0B0x100x030x99}; // 10 02 68 01 0B 10 03 99                         *Проверено 
byte LeftDown_OFF[8] = {0x100x020x680x000x0B0x100x030x98}; // 10 02 68 00 0B 10 03 98                        *Проверено     
  
byte RightUP_ON[8] = {0x100x020x680x010x0D0x100x030x9B}; // 10 02 68 01 0D 10 03 9B                          *Проверено
byte RightUP_OFF[8] = {0x100x020x680x000x0D0x100x030x9A}; // 10 02 68 00 0D 10 03 9A                         *Проверено       

byte RightDown_ON[8] = {0x100x020x680x010x0E0x100x030x9C}; // 10 02 68 01 0E 10 03 9C                        *Проверено  
byte RightDown_OFF[8] = {0x100x020x680x000x0E0x100x030x9B}; // 10 02 68 00 0E 10 03 9B                       *Проверено   


void setup() 

  
Serial.begin(9600);           // открываем порт на скорости 9600 для передачи в ПК 
  
MMI.begin(9600);              // открываем порт на скорости 9600 для передачи в MMI



void loop() 

  if (
Serial.available())
    {
      
MMI.write(Serial.read());
    }  
  if (
MMI.available() && MMIcom==)
    { 
      
ReadMMI(); 
    }
   else
  {
    
    switch (
otvet)
      {
        case 
1:
          
delay (5);        
          
WriteMMI(Pult_ON8);  
        break;
        
        case 
2
          
delay (5);
          
WriteMMI(Podsvetka_ON,8);
          
delay (5);
          
WriteMMI(Knopki_ON8); 
        break;
        
        case 
3
          
delay (5);
          
WriteMMI(NAVI_ON8);  
        break;
        case 
4:
          
delay (5); 
          
WriteMMI(INFO_ON8);  
        break;
        case 
5
          
delay (5);
          
WriteMMI(CAR_ON8);  
        break;
        case 
6
          
delay (5);
          
WriteMMI(SETUP_ON8);  
        break;
        case 
7
          
delay (5);
          
WriteMMI(RADIO_ON8);  
        break;
        case 
8
          
delay (5);
          
WriteMMI(MEDIA_ON8);  
        break;
        case 
9
          
delay (5);
          
WriteMMI(NAME_ON8);  
        break;
        case 
10
          
delay (5);
          
WriteMMI(TEL_ON8);  
        break;
        case 
11
          
delay (5);
          
WriteMMI(LeftUP_ON8);  
        break;
        case 
12
          
delay (5);
          
WriteMMI(LeftDown_ON8);  
        break;
        case 
13
          
delay (5);
          
WriteMMI(RightUP_ON8);  
        break;
        case 
14
          
delay (5);
          
WriteMMI(RightDown_ON8);  
        break;
        case 
15
          
delay (5);
          
WriteMMI(SETUP_OFF8);  
        break;
        case 
16
          
delay (5);
          
WriteMMI(CAR_OFF8);  
        break;
        case 
17
          
delay (5);
          
WriteMMI(TEL_OFF8);  
        break;
        case 
18
          
delay (5);
          
WriteMMI(LeftUP_OFF8);  
        break;
        case 
19
          
delay (5);
          
WriteMMI(LeftDown_OFF8);  
        break;
        case 
20
          
delay (5);
          
WriteMMI(RightUP_OFF8);  
        break;
        case 
21
          
delay (5);
          
WriteMMI(RightDown_OFF8);  
        break;
        case 
22
          
delay (5);
          
WriteMMI(RADIO_OFF8);  
        break;
        case 
23
          
delay (5);
          
WriteMMI(NAVI_OFF8);  
        break;
        
        
       
      } 
      
otvet 0;
  }  
        
   
  if (
MMIcom==1)
    { 
      switch (
ComID// обрабатываем команды, Основные Case это 1 и 2 , остальные связаны с кнопками. Сейчас я их использую что бы зажигать лампочки возле кнопок.
     //   ************************************************************** впринципе их можно не использовать, либо использовать если нужна обработка длинных нажатий.  
      

        case 
100
          
SerialPrintKey();
          
MMI.write(06);
        break; 
        
        case 
1:    
          
MMI.write(06);
          
otvet 1;
        break;   
                
        case 
2:  
          
MMI.write(06);
          
otvet 2;
        break;  
         
        case 
3
          
SerialPrintKey();
          
MMI.write(06);
          
        break; 
        
        case 
4
          
SerialPrintKey();
          
MMI.write(06); 
          
otvet 3;
        break;
        
        case 
5
          
SerialPrintKey();
          
MMI.write(06);
         
        break;  
         
        case 
6
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 4;
        break; 
        
        case 
7
          
SerialPrintKey();
          
MMI.write(06);
          
        break; 
        
        case 
8
          
SerialPrintKey();
          
MMI.write(06); 
          
otvet 5;
        break;
        
        case 
9
          
SerialPrintKey();
          
MMI.write(06);
         
        break;  
         
        case 
10
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 6;
        break;  
        case 
11
          
SerialPrintKey();
          
MMI.write(06);
          
        break; 
        
        case 
12
          
SerialPrintKey();
          
MMI.write(06); 
          
otvet 7;
        break;
        
        case 
13
          
SerialPrintKey();
          
MMI.write(06);
         
        break;  
         
        case 
14
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 8;
        break;
        
        case 
15
          
SerialPrintKey();
          
MMI.write(06);
          
        break; 
        
        case 
16
          
SerialPrintKey();
          
MMI.write(06); 
          
otvet 9;
        break;
        
        case 
17
          
SerialPrintKey();
          
MMI.write(06);
         
        break;  
         
        case 
18
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 10;
        break;  
        
        case 
19
          
SerialPrintKey();
          
MMI.write(06);
          
        break; 
        
        case 
20
          
SerialPrintKey();
          
MMI.write(06); 
          
otvet 15;
        break;
        
        case 
21
          
SerialPrintKey();
          
MMI.write(06);
         
        break;  
         
        case 
22
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 16;
        break; 
        
        case 
23
          
SerialPrintKey();
          
MMI.write(06);
          
        break; 
        
        case 
24
          
SerialPrintKey();
          
MMI.write(06); 
          
otvet 17;
        break;
        
        case 
25
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 18;
        break;  
         
        case 
26
          
SerialPrintKey();
          
MMI.write(06);
          
        break;
        
        case 
27
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 19;
        break;  
         
        case 
28
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 20;
        break;
        
        case 
29
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 21;
        break; 
        
        case 
30
          
SerialPrintKey();
          
MMI.write(06); 
          
otvet 22;
        break;
        
        case 
31
          
SerialPrintKey();
          
MMI.write(06);
         
        break;  
         
        case 
32
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 23;
        break; 
        
        case 
33
          
SerialPrintKey();
          
MMI.write(06);
          
        break; 
        
        case 
34
          
SerialPrintKey();
          
MMI.write(06); 
          
otvet 11;
        break;
        
        case 
35
          
SerialPrintKey();
          
MMI.write(06);
         
        break;  
         
        case 
36
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 12;
        break;  
         case 
37
          
SerialPrintKey();
          
MMI.write(06);
          
        break;  
        case 
38
          
SerialPrintKey();
          
MMI.write(06);
          
otvet 13;
        break; 
        
        case 
39
          
SerialPrintKey();
          
MMI.write(06); 
          
        break;
        
        case 
40
          
SerialPrintKey();
          
MMI.write(06);
         
otvet 14;
        break;  
         
          
       
    }  
   
   
MMIcom 0;
   
MMI.flush(); 
  } 
}  

void ReadMMI() 

      
MMIreceiveByte MMI.read();    //read 1-st byte Если 67 то это пульт  
      
if (MMIreceiveByte==0x67
      { 
        
MMIbyte[1]=0x67
        for (
int i=2<= 7i++)
          {   
            
MMIbyte[i] = MMI.read();    //read  2,3,4,5,6,7 bytes of data   -  читаем следующие байты 
            
delay(Delay); 
          } 
            
        
ComID=100// по умолчанию не опознаный код
       
        
if(memcmp(MMIbyteSTART_12V8) == ){ComID=1;} 
        if(
memcmp(MMIbytePult_ON_Otvet8) == ){ComID=2;} 
        if(
memcmp(MMIbyteNAVI_DOWN8) == ){ComID=3;} 
        if(
memcmp(MMIbyteNAVI_1_DOWN8) == ){ComID=4;}    
        if(
memcmp(MMIbyteINFO_DOWN8) == ){ComID=5;} 
        if(
memcmp(MMIbyteINFO_1_DOWN8) == ){ComID=6;}
        if(
memcmp(MMIbyteCAR_DOWN8) == ){ComID=7;} 
        if(
memcmp(MMIbyteCAR_1_DOWN8) == ){ComID=8;} 
        if(
memcmp(MMIbyteSETUP_DOWN8) == ){ComID=9;}  
        if(
memcmp(MMIbyteSETUP_1_DOWN8) == ){ComID=10;}  
        if(
memcmp(MMIbyteRADIO_DOWN8) == ){ComID=11;}
        if(
memcmp(MMIbyteRADIO_1_DOWN8) == ){ComID=12;}
        if(
memcmp(MMIbyteMEDIA_DOWN8) == ){ComID=13;}
        if(
memcmp(MMIbyteMEDIA_1_DOWN8) == ){ComID=14;}
        if(
memcmp(MMIbyteNAME_DOWN8) == ){ComID=15;}
        if(
memcmp(MMIbyteNAME_1_DOWN8) == ){ComID=16;}
        if(
memcmp(MMIbyteTEL_DOWN8) == ){ComID=17;}
        if(
memcmp(MMIbyteTEL_1_DOWN8) == ){ComID=18;}
        if(
memcmp(MMIbyteLeftReturn_DOWN8) == ){ComID=19;}
        if(
memcmp(MMIbyteLeftReturn_1_DOWN8) == ){ComID=20;}
        if(
memcmp(MMIbyteReturn_DOWN8) == ){ComID=21;}
        if(
memcmp(MMIbyteReturn_1_DOWN8) == ){ComID=22;}
        if(
memcmp(MMIbyteRightReturn_DOWN8) == ){ComID=23;}
        if(
memcmp(MMIbyteRightReturn_1_DOWN8) == ){ComID=24;}
        if(
memcmp(MMIbyteBig_Left8) == ){ComID=25;}
        if(
memcmp(MMIbyteBig_DOWN8) == ){ComID=26;}
        if(
memcmp(MMIbyteBig_1_DOWN8) == ){ComID=27;}
        if(
memcmp(MMIbyteBig_Right8) == ){ComID=28;}
        if(
memcmp(MMIbyteSmall_Left8) == ){ComID=29;}
        if(
memcmp(MMIbyteSmall_Right8) == ){ComID=30;}
        if(
memcmp(MMIbyteSmall_DOWN8) == ){ComID=31;}
        if(
memcmp(MMIbyteSmall_1_DOWN8) == ){ComID=32;}
        if(
memcmp(MMIbyteLeftUP_DOWN8) == ){ComID=33;}
        if(
memcmp(MMIbyteLeftUP_1_DOWN8) == ){ComID=34;}
        if(
memcmp(MMIbyteLeftDown_DOWN8) == ){ComID=35;}
        if(
memcmp(MMIbyteLeftDown_1_DOWN8) == ){ComID=36;}
        if(
memcmp(MMIbyteRightUP_DOWN8) == ){ComID=37;}
        if(
memcmp(MMIbyteRightUP_1_DOWN8) == ){ComID=38;}
        if(
memcmp(MMIbyteRightDown_DOWN8) == ){ComID=39;}
        if(
memcmp(MMIbyteRightDown_1_DOWN8) == ){ComID=40;}
      
        
MMIcom=1
      } 
      else 
      { 
        
MMIcom=0
      } 
      
MMI.flush(); 


void SerialPrintKey()  //Вывод команды в сериал порт , тут можно привести ее к привычному для iCar виду

    for (
int x=1<= 7x++){   
            
Serial.print(MMIbyte[x], HEX); 
            
Serial.print(" "); 
        } 
    
Serial.println(); 


void WriteMMI(byte Mas[], int Byte)   //  Процедуры отправки команд на пульт 
{   
          for (
int i=0i<Bytei++) { 
          
MMI.write(Mas[i]);
          
delay(2); 


и видео того что получилось http://youtu.be/TGI83w3t2F8

filinmd вне форума   Ответить с цитированием
Ответ


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

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

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



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


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