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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2013, 12:47   #1
filinmd
Старший Пользователь
 
Аватар для filinmd
 
Регистрация: 20.03.2012
Возраст: 36
Город: Москва
Регион: 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(4, 2);
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
Возраст: 55
Город: Ставрополь
Регион: 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
Возраст: 36
Город: Москва
Регион: 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
Возраст: 55
Город: Ставрополь
Регион: 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
Возраст: 36
Город: Москва
Регион: 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
Возраст: 55
Город: Ставрополь
Регион: 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
Возраст: 36
Город: Москва
Регион: 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] = {0, 0x67, 0xFF, 0x1A, 0x04, 0xFA, 0x27, 0xC5}; // 67 FF 1A 4 FA 27 C5 
byte Pult_ON[8] = {0, 0x10, 0x02, 0x70, 0x12, 0x10, 0x03, 0xA7}; // c10 02 70 12 10 03 A7  

byte Pult_ON_Otvet[8] = {0, 0x67, 0xFF, 0x2A, 0xDF, 0xF2, 0x4B, 0x00 }; //     67 FF 2A DF F2 4B 0 

byte Knopki_ON[8] = {0x10, 0x02, 0x64, 0x99, 0x01, 0x10, 0x03, 0x23}; // 10 02 64 99 01 10 03 23 
byte Podsvetka_ON[8] = {0x10, 0x02, 0x60, 0x9A, 0x01, 0x10, 0x03, 0x20}; // 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
Возраст: 36
Город: Москва
Регион: 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
Возраст: 36
Город: Москва
Регион: 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(4, 2); //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] = {0, 0x67, 0xFF, 0x1A, 0x04, 0xFA, 0x27, 0xC5}; // Ответ пульта после подачи +12 67 FF 1A 4 FA 27 C5 
byte Pult_ON[8] = {0, 0x10, 0x02, 0x70, 0x12, 0x10, 0x03, 0xA7}; // Команда включение пульта  10 02 70 12 10 03 A7  

byte Pult_ON_Otvet[8] = {0, 0x67, 0xFF, 0x2A, 0xDF, 0xF2, 0x4B, 0x00 }; // Ответ пульта после программного включения 67 FF 2A DF F2 4B 0 

byte Knopki_ON[8] = {0x10, 0x02, 0x64, 0x99, 0x01, 0x10, 0x03, 0x23}; // Разрешить подсветку  10 02 64 99 01 10 03 23 
byte Podsvetka_ON[8] = {0x10, 0x02, 0x60, 0x9A, 0x01, 0x10, 0x03, 0x20}; // Включение общей  подсветки кнопок  10 02 60 9A 01 10 03 20





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

byte NAVI_DOWN[8] = {0, 0x67, 0xFF, 0x3E,0xF5, 0xDF, 0xF2, 0x4B}; // Нажатие кнопки  67 FF 3E F5 DF F2 4B                   *Проверено
byte NAVI_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xEA, 0xDF, 0xF2, 0x49}; // Отпустили кнопку 67 FF 3A EA DF F2 49               *Проверено

byte INFO_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xF3, 0xDF, 0xF2, 0x49}; //Нажатие кнопки 67 FF 3E F3 DF F2 49                    *Проверено
byte INFO_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xE6, 0xDF, 0xF2, 0x47}; // Отпустили кнопку 67 FF 3A E6 DF F2 47               *Проверено

byte CAR_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xF1, 0xBE, 0xF2, 0x47}; //Нажатие кнопки  67 FF 3E F1 BE F2 47                    *Проверено
byte CAR_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xE2, 0xBE, 0xF2, 0x45}; // Отпустили кнопку 67 FF 3A E2 BE F2 45                *Проверено

byte SETUP_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xEF, 0xBE, 0xF2, 0x45}; //Нажатие кнопки  67 FF 3E EF BE F2 45                  *Проверено
byte SETUP_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xDE, 0xBE, 0xF2, 0x43}; // Отпустили кнопку 67 FF 3A DE BE F2 43              *Проверено

byte RADIO_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xCF, 0xDF, 0xF2, 0x25}; //Нажатие кнопки  67 FF 3E CF DF F2 25                  *Проверено 
byte RADIO_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0x9E, 0xDF, 0xF2, 0x23}; // Отпустили кнопку 67 FF 3A 9E DF F2 23              *Проверено

byte MEDIA_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xFB, 0xBE, 0xF2, 0x51}; //Нажатие кнопки  67 FF 3E FB BE F2 51                  *Проверено
byte MEDIA_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xF6, 0xBE, 0xF2, 0x4F}; // Отпустили кнопку 67 FF 3A F6 BE F2 4F              *Проверено 

byte NAME_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xF9, 0xDF, 0xF2, 0x4F}; // Нажатие кнопки  67 FF 3E F9 DF F2 4F                  *Проверено
byte NAME_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xF2, 0xDF, 0xF2, 0x4D}; // Отпустили кнопку 67 FF 3A F2 DF F2 4D               *Проверено

byte TEL_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xF7, 0xBE, 0xF2, 0x4D}; // Нажатие кнопки  67 FF 3E F7 BE F2 4D                   *Проверено
byte TEL_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xEE, 0xBE, 0xF2, 0x4B}; // Отпустили кнопку 67 FF 3A EE BE F2 4B                *Проверено

byte LeftReturn_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xE7, 0xDF, 0xF2, 0x3D}; // Нажатие кнопки  67 FF 3E E7 DF F2 3D            *Проверено
byte LeftReturn_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xCE, 0xDF, 0xF2, 0x3B}; //Отпустили кнопку  67 FF 3A CE DF F2 3B         *Проверено

byte Return_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xE1, 0xDF, 0xF2, 0x37}; // Нажатие кнопки  67 FF 3E E1 DF F2 37                *Проверено
byte Return_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xC2, 0xDF, 0xF2, 0x35}; // Отпустили кнопку 67 FF 3A C2 DF F2 35             *Проверено

byte RightReturn_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xDF, 0xBE, 0xBE, 0xF2}; // Нажатие кнопки  67 FF 3E DF BE BE F2           *Проверено
byte RightReturn_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xBE, 0xBE, 0xBE, 0xF2}; // Отпустили кнопку 67 FF 3A BE BE BE F2        *Проверено 

byte Big_Left[8] = {0, 0x67, 0xFF, 0xBA, 0xF4, 0xBE, 0xF2, 0x11}; // Повернули против часовой  67 FF BA F4 BE F2 11         *Проверено   
byte Big_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xFD, 0xBE, 0xF2, 0x53}; // Нажатие кнопки  67 FF 3E FD BE F2 53                   *Проверено  
byte Big_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xFA, 0xBE, 0xF2, 0x51}; // Отпустили кнопку 67 FF 3A FA BE F2 51                *Проверено  
byte Big_Right[8] = {0, 0x67, 0xFF, 0xBE, 0xF5, 0xBE, 0xF2, 0x13}; // Повернули по часовой 67 FF BE F5 BE F2 13             *Проверено  

byte Small_Left[8] = {0, 0x67, 0xFF, 0xFA, 0xF5, 0xBE, 0xF2, 0x31}; // овернули против часовой  67 FF FA F5 BE F2 31        *Проверено   
byte Small_Right[8] = {0, 0x67, 0xFF, 0xFE, 0xF4, 0xBE, 0xF2, 0x33}; // Повернули по часовой 67 FF FE F4 BE F2 33           *Проверено     
byte Small_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0x8F, 0xBE, 0xF2, 0xE5}; // Нажатие кнопки  67 FF 3E 8F BE F2 E5                 *Проверено   
byte Small_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0x1E, 0xBE, 0xF2, 0xE3}; // Отпустили кнопку 67 FF 3A 1E BE F2 E3              *Проверено       

byte LeftUP_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xEB, 0xDF, 0xF2, 0x41}; // Нажатие кнопки  67 FF 3E EB DF F2 41               *Проверено
byte LeftUP_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xD6, 0xDF, 0xF2, 0x3F}; // Отпустили кнопку 67 FF 3A D6 DF F2 3F            *Проверено

byte LeftDown_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xE9, 0xBE, 0xF2, 0x3F}; // Нажатие кнопки  67 FF 3E E9 BE F2 3F             *Проверено
byte LeftDown_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xD2, 0xBE, 0xF2, 0x3D}; // Отпустили кнопку 67 FF 3A D2 BE F2 3D          *Проверено

byte RightUP_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xE5, 0xBE, 0xF2, 0x3B}; // Нажатие кнопки  67 FF 3E E5 BE F2 3B              *Проверено
byte RightUP_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xCA, 0xBE, 0xF2, 0x39}; // Отпустили кнопку 67 FF 3A CA BE F2 39           *Проверено

byte RightDown_DOWN[8] = {0, 0x67, 0xFF, 0x3E, 0xE3, 0xBE, 0xF2, 0x39}; // Нажатие кнопки  67 FF 3E E3 BE F2 39            *Проверено
byte RightDown_1_DOWN[8] = {0, 0x67, 0xFF, 0x3A, 0xC6, 0xBE, 0xF2, 0x37}; // Отпустили кнопку 67 FF 3A C6 BE F2 37         *Проверено


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

byte NAVI_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x05, 0x10, 0x03, 0x93}; // 10 02 68 01 05 10 03 93                             *Проверено
byte NAVI_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x05, 0x10, 0x03, 0x92}; // 10 02 68 00 05 10 03 92                            *Проверено        

byte INFO_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x06, 0x10, 0x03, 0x94}; // 10 02 68 01 06 10 03 94                             *Проверено
byte INFO_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x06, 0x10, 0x03 , 0x93}; // 10 02 68 00 06 10 03 93                           *Проверено        

byte CAR_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x07, 0x10, 0x03, 0x95}; // 10 02 68 01 07 10 03 95                              *Проверено
byte CAR_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x07, 0x10, 0x03, 0x94}; // 10 02 68 00 07 10 03 94                             *Проверено

byte SETUP_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x08, 0x10, 0x03, 0x96}; // 10 02 68 01 08 10 03 96                            *Проверено
byte SETUP_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x08, 0x10, 0x03, 0x95}; // 10 02 68 00 08 10 03 95                           *Проверено 

byte RADIO_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x18, 0x10, 0x03, 0xA6}; // > 10 02 68 01 18 10 03 A6                          *Проверено 
byte RADIO_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x18, 0x10, 0x03, 0xA5}; // > 10 02 68 00 18 10 03 A5                         *Проверено      

byte MEDIA_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x02, 0x10, 0x03, 0x90}; // 10 02 68 01 02 10 03 90                            *Проверено
byte MEDIA_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x02, 0x10, 0x03, 0x8F}; // 10 02 68 00 02 10 03 8F                           *Проверено   

byte NAME_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x03, 0x10, 0x03, 0x91}; // 10 02 68 01 03 10 03 91                             *Проверено   
byte NAME_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x03, 0x10, 0x03, 0x90}; // 10 02 68 00 03 10 03 90                            *Проверено   

byte TEL_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x04, 0x10, 0x03, 0x92}; // 10 02 68 01 04 10 03 92                              *Проверено
byte TEL_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x04, 0x10, 0x03, 0x91}; // 10 02 68 00 04 10 03 91                             *Проверено

byte LeftUP_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x0A, 0x10, 0x03, 0x98}; // 10 02 68 01 0A 10 03 98                           *Проверено
byte LeftUP_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x0A, 0x10, 0x03, 0x97}; // 10 02 68 00 0A 10 03 97                          *Проверено    

byte LeftDown_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x0B, 0x10, 0x03, 0x99}; // 10 02 68 01 0B 10 03 99                         *Проверено 
byte LeftDown_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x0B, 0x10, 0x03, 0x98}; // 10 02 68 00 0B 10 03 98                        *Проверено     
  
byte RightUP_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x0D, 0x10, 0x03, 0x9B}; // 10 02 68 01 0D 10 03 9B                          *Проверено
byte RightUP_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x0D, 0x10, 0x03, 0x9A}; // 10 02 68 00 0D 10 03 9A                         *Проверено       

byte RightDown_ON[8] = {0x10, 0x02, 0x68, 0x01, 0x0E, 0x10, 0x03, 0x9C}; // 10 02 68 01 0E 10 03 9C                        *Проверено  
byte RightDown_OFF[8] = {0x10, 0x02, 0x68, 0x00, 0x0E, 0x10, 0x03, 0x9B}; // 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==0 )
    { 
      
ReadMMI(); 
    }
   else
  {
    
    switch (
otvet)
      {
        case 
1:
          
delay (5);        
          
WriteMMI(Pult_ON, 8);  
        break;
        
        case 
2: 
          
delay (5);
          
WriteMMI(Podsvetka_ON,8);
          
delay (5);
          
WriteMMI(Knopki_ON, 8); 
        break;
        
        case 
3: 
          
delay (5);
          
WriteMMI(NAVI_ON, 8);  
        break;
        case 
4:
          
delay (5); 
          
WriteMMI(INFO_ON, 8);  
        break;
        case 
5: 
          
delay (5);
          
WriteMMI(CAR_ON, 8);  
        break;
        case 
6: 
          
delay (5);
          
WriteMMI(SETUP_ON, 8);  
        break;
        case 
7: 
          
delay (5);
          
WriteMMI(RADIO_ON, 8);  
        break;
        case 
8: 
          
delay (5);
          
WriteMMI(MEDIA_ON, 8);  
        break;
        case 
9: 
          
delay (5);
          
WriteMMI(NAME_ON, 8);  
        break;
        case 
10: 
          
delay (5);
          
WriteMMI(TEL_ON, 8);  
        break;
        case 
11: 
          
delay (5);
          
WriteMMI(LeftUP_ON, 8);  
        break;
        case 
12: 
          
delay (5);
          
WriteMMI(LeftDown_ON, 8);  
        break;
        case 
13: 
          
delay (5);
          
WriteMMI(RightUP_ON, 8);  
        break;
        case 
14: 
          
delay (5);
          
WriteMMI(RightDown_ON, 8);  
        break;
        case 
15: 
          
delay (5);
          
WriteMMI(SETUP_OFF, 8);  
        break;
        case 
16: 
          
delay (5);
          
WriteMMI(CAR_OFF, 8);  
        break;
        case 
17: 
          
delay (5);
          
WriteMMI(TEL_OFF, 8);  
        break;
        case 
18: 
          
delay (5);
          
WriteMMI(LeftUP_OFF, 8);  
        break;
        case 
19: 
          
delay (5);
          
WriteMMI(LeftDown_OFF, 8);  
        break;
        case 
20: 
          
delay (5);
          
WriteMMI(RightUP_OFF, 8);  
        break;
        case 
21: 
          
delay (5);
          
WriteMMI(RightDown_OFF, 8);  
        break;
        case 
22: 
          
delay (5);
          
WriteMMI(RADIO_OFF, 8);  
        break;
        case 
23: 
          
delay (5);
          
WriteMMI(NAVI_OFF, 8);  
        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; i <= 7; i++)
          {   
            
MMIbyte[i] = MMI.read();    //read  2,3,4,5,6,7 bytes of data   -  читаем следующие байты 
            
delay(Delay); 
          } 
            
        
ComID=100; // по умолчанию не опознаный код
       
        
if(memcmp(MMIbyte, START_12V, 8) == 0 ){ComID=1;} 
        if(
memcmp(MMIbyte, Pult_ON_Otvet, 8) == 0 ){ComID=2;} 
        if(
memcmp(MMIbyte, NAVI_DOWN, 8) == 0 ){ComID=3;} 
        if(
memcmp(MMIbyte, NAVI_1_DOWN, 8) == 0 ){ComID=4;}    
        if(
memcmp(MMIbyte, INFO_DOWN, 8) == 0 ){ComID=5;} 
        if(
memcmp(MMIbyte, INFO_1_DOWN, 8) == 0 ){ComID=6;}
        if(
memcmp(MMIbyte, CAR_DOWN, 8) == 0 ){ComID=7;} 
        if(
memcmp(MMIbyte, CAR_1_DOWN, 8) == 0 ){ComID=8;} 
        if(
memcmp(MMIbyte, SETUP_DOWN, 8) == 0 ){ComID=9;}  
        if(
memcmp(MMIbyte, SETUP_1_DOWN, 8) == 0 ){ComID=10;}  
        if(
memcmp(MMIbyte, RADIO_DOWN, 8) == 0 ){ComID=11;}
        if(
memcmp(MMIbyte, RADIO_1_DOWN, 8) == 0 ){ComID=12;}
        if(
memcmp(MMIbyte, MEDIA_DOWN, 8) == 0 ){ComID=13;}
        if(
memcmp(MMIbyte, MEDIA_1_DOWN, 8) == 0 ){ComID=14;}
        if(
memcmp(MMIbyte, NAME_DOWN, 8) == 0 ){ComID=15;}
        if(
memcmp(MMIbyte, NAME_1_DOWN, 8) == 0 ){ComID=16;}
        if(
memcmp(MMIbyte, TEL_DOWN, 8) == 0 ){ComID=17;}
        if(
memcmp(MMIbyte, TEL_1_DOWN, 8) == 0 ){ComID=18;}
        if(
memcmp(MMIbyte, LeftReturn_DOWN, 8) == 0 ){ComID=19;}
        if(
memcmp(MMIbyte, LeftReturn_1_DOWN, 8) == 0 ){ComID=20;}
        if(
memcmp(MMIbyte, Return_DOWN, 8) == 0 ){ComID=21;}
        if(
memcmp(MMIbyte, Return_1_DOWN, 8) == 0 ){ComID=22;}
        if(
memcmp(MMIbyte, RightReturn_DOWN, 8) == 0 ){ComID=23;}
        if(
memcmp(MMIbyte, RightReturn_1_DOWN, 8) == 0 ){ComID=24;}
        if(
memcmp(MMIbyte, Big_Left, 8) == 0 ){ComID=25;}
        if(
memcmp(MMIbyte, Big_DOWN, 8) == 0 ){ComID=26;}
        if(
memcmp(MMIbyte, Big_1_DOWN, 8) == 0 ){ComID=27;}
        if(
memcmp(MMIbyte, Big_Right, 8) == 0 ){ComID=28;}
        if(
memcmp(MMIbyte, Small_Left, 8) == 0 ){ComID=29;}
        if(
memcmp(MMIbyte, Small_Right, 8) == 0 ){ComID=30;}
        if(
memcmp(MMIbyte, Small_DOWN, 8) == 0 ){ComID=31;}
        if(
memcmp(MMIbyte, Small_1_DOWN, 8) == 0 ){ComID=32;}
        if(
memcmp(MMIbyte, LeftUP_DOWN, 8) == 0 ){ComID=33;}
        if(
memcmp(MMIbyte, LeftUP_1_DOWN, 8) == 0 ){ComID=34;}
        if(
memcmp(MMIbyte, LeftDown_DOWN, 8) == 0 ){ComID=35;}
        if(
memcmp(MMIbyte, LeftDown_1_DOWN, 8) == 0 ){ComID=36;}
        if(
memcmp(MMIbyte, RightUP_DOWN, 8) == 0 ){ComID=37;}
        if(
memcmp(MMIbyte, RightUP_1_DOWN, 8) == 0 ){ComID=38;}
        if(
memcmp(MMIbyte, RightDown_DOWN, 8) == 0 ){ComID=39;}
        if(
memcmp(MMIbyte, RightDown_1_DOWN, 8) == 0 ){ComID=40;}
      
        
MMIcom=1; 
      } 
      else 
      { 
        
MMIcom=0; 
      } 
      
MMI.flush(); 
} 

void SerialPrintKey()  //Вывод команды в сериал порт , тут можно привести ее к привычному для iCar виду
{ 
    for (
int x=1; x <= 7; x++){   
            
Serial.print(MMIbyte[x], HEX); 
            
Serial.print(" "); 
        } 
    
Serial.println(); 
} 

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

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


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

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

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



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


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