PDA

Просмотр полной версии : iCarDuino + MMI пульт AUDI


filinmd
14.03.2013, 12:47
Ну что ж, начну свой рассказ ...

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

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

Подключаюсь к пульту через терминал Extem. Настройки 9600,8,2.

#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) отправляется и пульт его прекрасно понимает.

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

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

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 // Отправляю на пульт код включения
5:
7E 00 // Ответ пульта что он принял код

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

Bersenev
14.03.2013, 14:36
2 filinmd (http://www.pccar.ru/member.php?u=19423)

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

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

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

Он это делает постоянно с каким-то временным интервалом или один раз и ждёт код подтверждения?

filinmd
14.03.2013, 14:56
Давай уточним такой момент. Когда пульт шлет это

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

Он это делает постоянно с каким-то временным интервалом или один раз и ждёт код подтверждения?

Мой косяк,что не уточнил в личке что данные идут не в формате плагина.


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



p.s. сейчас наткнулся на скетч для iBUS.... сижу разбираюсь, задачи похожи.

Bersenev
14.03.2013, 15:17
67 1A 04 FA 27 C5 00 он шлет до получения 06



с каким то временным интервалом (если да, то с каким примерно) или без остановки?

filinmd
14.03.2013, 15:23
с каким то временным интервалом (если да, то с каким примерно) или без остановки?

Вообщем так:

Даю 12В на пульт и он начинает посылать этот код раз в секунду ( может и быстрее но терминал выдает его примерно с таким интервалом ). Если не посылать ему ответ то он отправит 20 таких кодов и уйдет в режим ожидания. По этому я ему сразу даю "06" и его это полностью устраивает и с ним у меня проблем нет. Проблема в отправке коде на включение, который нужно отправить пульту.

Bersenev
14.03.2013, 15:42
ещё такой вопрос, все команды от пульта начинаются с байта 67, а заканчиваются байтом 00? Кроме кода подтверждения FE 00 разумеется

filinmd
14.03.2013, 16:51
ещё такой вопрос, все команды от пульта начинаются с байта 67, а заканчиваются байтом 00? Кроме кода подтверждения FE 00 разумеется

Ура, я разобрался. Пульт тепреь включает Ардуинка , и нажатие каждой кнопки я могу отправить в Serial в любом удобном виде.
Единственный нюанс что работает только на скорости 9600.


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

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


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

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




Сейчас скетч причешу и выложу...

pierrotm777
15.03.2013, 10:59
Sorry,
I don't speak russian,
How do you connect the arduino to your Aud MMI system (what electrical interface)

filinmd
15.03.2013, 12:07
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
И так отчитываюсь за проделанную работу.

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

Текущий скетч с демонстрацией возможностей.
#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

http://youtu.be/TGI83w3t2F8

crashmilan
15.03.2013, 13:29
И так отчитываюсь за проделанную работу.

Молодца. Вот только почему все огни горят? Ты не делал так чтобы при переключения с медиа на двд медиа погас а двд загорелся? Еще вопрос, как работают крытилки, успевает нормально обработать сигнал ардуино? Ты учел что крутилка при увеличения оборотов повышает сигнал на 1 байт? Очень хочется увидеть как будет работать именно крутилка в икаре к примеру, т.к это самое главное, кнопки подают два сигнала четко а вот с крутилками не так все однозначно. Что делает ардуино если приходит неизвестный сигнал, отправляет 06?

crashmilan
15.03.2013, 13:30
Еще одно, у тебя не верный код идет 67 FF 3A D2 BE F2 3D, нужно делать через ключ обязательно.

filinmd
15.03.2013, 13:54
Молодца. Вот только почему все огни горят? Ты не делал так чтобы при переключения с медиа на двд медиа погас а двд загорелся? Еще вопрос, как работают крытилки, успевает нормально обработать сигнал ардуино? Ты учел что крутилка при увеличения оборотов повышает сигнал на 1 байт? Очень хочется увидеть как будет работать именно крутилка в икаре к примеру, т.к это самое главное, кнопки подают два сигнала четко а вот с крутилками не так все однозначно. Что делает ардуино если приходит неизвестный сигнал, отправляет 06?

Все горят потому что это все таки демонстрационный вариант, а так конечно допишу этот момент.

С крутилками вроде справляется нормально , но 1 байт я не учел, попробую с этим тоже разобраться.

Если неизвестная то отправляет 06

filinmd
15.03.2013, 13:56
Еще одно, у тебя не верный код идет 67 FF 3A D2 BE F2 3D, нужно делать через ключ обязательно.

Только один неверный код? или вообще ?

И я так полагаю что не верный на фоне родных кодов?

pierrotm777
15.03.2013, 14:03
MMI ARDUINO

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


Sketch in the next Post
If i understand well, you use the originals MMI buttons through a serial connection , but you don't use the can bus !
So it's not possible to use this arduino hardware into a fonctionnal MMI system !

filinmd
15.03.2013, 14:10
If i understand well, you use the originals MMI buttons through a serial connection , but you don't use the can bus !

yes


So it's not possible to use this arduino hardware into a fonctionnal MMI system !

I want to use this connection in the other car , on this, the existing system of car Audi has no relation.

crashmilan
15.03.2013, 14:27
Все сигналы от пульта должны начинаться с 10. В твоем случае ардуино видит не тот сигнал, плохо это или нет не знаю, но у сделано через ключ.
По возможности запиши видео работы крутилки в икаре.
1 байт советую учесть, у меня сделано так 1= up 1+1=up+up 1+1+1=up+up+up.

filinmd
15.03.2013, 14:38
Все сигналы от пульта должны начинаться с 10. В твоем случае ардуино видит не тот сигнал, плохо это или нет не знаю, но у сделано через ключ.

А схему ключа можно ?


По возможности запиши видео работы крутилки в икаре.


ок


1 байт советую учесть, у меня сделано так 1= up 1+1=up+up 1+1+1=up+up+up.

Не очень понял что это значит

crashmilan
15.03.2013, 15:06
А схему ключа можно ?
Не очень понял что это значит

1. Схема уже была где-то на сайте, изначально где обсуждали, но только вместо макса ардуино или pl2303 (подобные)
2. Ну смотри
10025001100376 - up
+1бит
10025002100377 - up+up
+2бит
10025003100378 - up+up+up
Если это учесть а не отправлять тупо 06 на эти сигналы, то ты сможешь быстрее прокручивать список без задержек на неизвестный сигнал.
+1 байт идет на всех крутилках, максимум у меня получилось от начального когда + 7байт и на него я сделал тупо pgup ну или семь раз up.

pierrotm777
15.03.2013, 15:22
I want to use this connection in the other car , on this, the existing system of car Audi has no relation.
It will be possible to use this interface in same time than an existing Audi MMI system ?

filinmd
15.03.2013, 16:35
It will be possible to use this interface in same time than an existing Audi MMI system ?

I think that it will be possible , but later.

filinmd
15.03.2013, 16:48
1. Схема уже была где-то на сайте, изначально где обсуждали, но только вместо макса ардуино или pl2303 (подобные)
2. Ну смотри
10025001100376 - up
+1бит
10025002100377 - up+up
+2бит
10025003100378 - up+up+up
Если это учесть а не отправлять тупо 06 на эти сигналы, то ты сможешь быстрее прокручивать список без задержек на неизвестный сигнал.
+1 байт идет на всех крутилках, максимум у меня получилось от начального когда + 7байт и на него я сделал тупо pgup ну или семь раз up.

Теперь понял, попробую разобраться.



Вот этот ключ?

pierrotm777
15.03.2013, 17:11
I think that it will be possible , but later.

Coool, I can wait :tease:

crashmilan
15.03.2013, 22:15
Теперь понял, попробую разобраться.



Вот этот ключ?
да этот

crashmilan
15.03.2013, 22:24
I think that it will be possible , but later.
Нет, тут нужно будет подключать по другому, и использовать его можно будет только в значении NAVI если при условии что navi нет.
Подключается параллельно. Данный скетч не подойдет, нужно его будет переделывать немного. В пративном случаи mmi не будет работать, а сделать чтобы все кнопки (media, radio) управляли компом нельзя при подключенном mmi. Я рассматривал один вариант, фильтрация сигнал через комп и отправка нужных сигналов на блок, к сожаления не получается это сделать нормально, очень большие задержки.
При mmi возможен только такой вариант (http://video.mail.ru/mail/crashmilan/_myvideo/7.html) пульт только другой а смысл тот-же.

filinmd
15.03.2013, 23:12
Нет, тут нужно будет подключать по другому, и использовать его можно будет только в значении NAVI если при условии что navi нет.
Подключается параллельно. Данный скетч не подойдет, нужно его будет переделывать немного. В пративном случаи mmi не будет работать, а сделать чтобы все кнопки (media, radio) управляли компом нельзя при подключенном mmi. Я рассматривал один вариант, фильтрация сигнал через комп и отправка нужных сигналов на блок, к сожаления не получается это сделать нормально, очень большие задержки.
При mmi возможен только такой вариант (http://video.mail.ru/mail/crashmilan/_myvideo/7.html) пульт только другой а смысл тот-же.

Я не говорю что должно все работать с этим скетчем в машине. Для прямого подключения к компу этого достаточно. Позже разберусь с ключом и потом полезу в машину ловить данные ... . А там уж ,как говорится , поживем- увидим :)

awtoap
16.03.2013, 00:07
Тут я не скажу, нужно смотреть даташиты на МК ибо ардуинами не страдаю ))). Могу предложить только ПИК типа PIC18F26J50, PIC18F47J53 (2 UART+USB) да еще и кучка других. Или смотреть в сторону AVR xMega...там куча уартов.

crashmilan
16.03.2013, 22:34
Так возьми контроллер с двумя UART и USB и фильтруй все на нем...никаких трудностей не вижу. То есть подключай один уарт к MMI, а другой дальше в систему. Ну по USB прямиком в комп. Или реализовать софтово уарты, что немного сложнее, но так как скорость передачи низкая, вполне задача подъемная.
Поверьте не так все просто. К сожалению блок отправляет очень много сигналов которые программа иногда просто не может их отфильтровать.
Конечно если сильно захотеть можно ....
Но проще всего сделать параллельно.

awtoap
16.03.2013, 23:29
На скорости 9600 даже самый чахлый МК это сделает на раз...все зависит от ума программера. Скажем в моем DMX светодиодном димере на скорости 250000 AVR справляется без проблем.

Скажу одно...судя по скетчу прием байта с UART ведется в главном цикле...я предпочитаю делать по прерыванию, тем самым можно разгрузить МК для других задач.

crashmilan
17.03.2013, 21:56
На скорости 9600 даже самый чахлый МК это сделает на раз...все зависит от ума программера. Скажем в моем DMX светодиодном димере на скорости 250000 AVR справляется без проблем.

Скажу одно...судя по скетчу прием байта с UART ведется в главном цикле...я предпочитаю делать по прерыванию, тем самым можно разгрузить МК для других задач.
Подключитесь к блоку mmi и все поймете. Я спорить с вами не планировал. Если знаете решения и есть опыт буду рад выслушать, а спорить и утверждать Вам то, что вы даже не видели я не буду.
К сожалению скорость потока данных который идет от блока меняется, а если поднять скорость выше 9600 то данные получает комп не те.
Если просто даже подключиться к пульту и любой программой считать ком порт, то увидите, что иногда код идет склеиваемый либо разбитый на несколько частей. Сделать четкий фильтр без тормазов я считаю не так просто. Мы с программистом (а он не ламер) пробовали тупо сделать пропускания через комп не трогая код, у нас не вышло, к примеру крутилка очень сильно тормозила. Даже если просто считывать долго код с пульта то можно увидеть что код иногда разбивается.
К примеру код может идти 06 10 ..... а должен 06, 10...

filinmd
18.03.2013, 14:57
да этот

Спаял, подключил и получил результат который начинается на 10 02.

Скетч из-за этого переделывать пока не буду, так как не вижу смысла, при условии что пульт используется не в Ауди

P.S. 2Bersenev Надо было все таки создавать отдельную тему :)

Bersenev
18.03.2013, 16:38
перенёс в отдельную тему.

По передачи команд из икара в ардуино.

Для универсальности сделаю в плагине команду, которая позволяет передать в ардуино любую шестнадцатеричную последовательность, допустим

SendToDuino,1a_ff_ab_56_12

отправит в ардуино последовательность байтов

1A FF AB 56 12

а что с ними делать уже будешь решать сам.

А в скине сделаю возможность при переходе на основные экраны и экраны встроенных программ или при смене медиаисточников выдавать эту команду. Значение последовательностей для каждого случая можно будет задать в ini файле. Выносить их в настройки скина не вижу смысла, всё таки редко кому нужна обратная связь.

filinmd
18.03.2013, 16:54
перенёс в отдельную тему.

По передачи команд из икара в ардуино.

Для универсальности сделаю в плагине команду, которая позволяет передать в ардуино любую шестнадцатеричную последовательность, допустим

SendToDuino,1a_ff_ab_56_12

отправит в ардуино последовательность байтов

1A FF AB 56 12

а что с ними делать уже будешь решать сам.

А в скине сделаю возможность при переходе на основные экраны и экраны встроенных программ или при смене медиаисточников выдавать эту команду. Значение последовательностей для каждого случая можно будет задать в ini файле. Выносить их в настройки скина не вижу смысла, всё таки редко кому нужна обратная связь.


СПАСИБО!!!

Можно еще добавить возможность выдавать эту команду после выхода из сна?

Bersenev
18.03.2013, 17:37
Можно еще добавить возможность выдавать эту команду после выхода из сна?

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

filinmd
19.03.2013, 08:53
В принципе можно назначить на любое событие, в том числе на запуск скина, на изменение темы день-ночь, на уход в сон и выход из сна, на запуск основных экранов и экранов встроенных программ, на закрытие скина, на выключение компьютера.

Замечательно! Обновления плагина ждать вместе с официальным обновлением iCar? :)

Bersenev
19.03.2013, 12:10
Обновления плагина ждать вместе с официальным обновлением iCar? :)

Закончу плагин WiFi менеджера и сделаю

gukov
19.03.2013, 15:18
Спаял, подключил и получил результат который начинается на 10 02.

Скетч из-за этого переделывать пока не буду, так как не вижу смысла, при условии что пульт используется не в Ауди

Да в принципе без разницы где он будет использоваться, главное стабильность кода и читаемость.

Для начало надо подключить к компу по COM и посмотреть в терминальной программе настройки при которых пульт работает стабильно.

Первый признак неправильной настройки это энкодоры UP и DOWN будут считаться с одинаковым значением.

filinmd
19.03.2013, 15:43
Да в принципе без разницы где он будет использоваться, главное стабильность кода и читаемость.

Для начало надо подключить к компу по COM и посмотреть в терминальной программе настройки при которых пульт работает стабильно.

Первый признак неправильной настройки это энкодоры UP и DOWN будут считаться с одинаковым значением.

У меня вроде все значения разные.

Я чуть позже переделаю скетч с учетом ключа и попробую на выходных в машине по тестировать.

filinmd
21.03.2013, 14:23
Теперь мучаюсь с получение "правильных данных" через транзисторный ключ.


Результат как то не радует и не понятен....


Согласно найденной информации на одном немецком форуме ( Сидел читал его с помощью Google перевода, это конечно ппц :) ) пакет должен выглядеть таким образом : 10 02 <XX XX> 10 03 <XX> .

скетчем который я выкладывал выше получаю правильно из этого только первую половину, т.е. 10 02 <XX XX> а дальше не сходится ни разу.

Если читать скетчем, который представлен ниже то, первые несколько раз я получаю правильный код а потом опять только половину
uint8_t ETX_Pin=3; //// VRbot Пин ETX
uint8_t ERX_Pin=4; //// VRbot Пин ERX

void setup()
{
pinMode(0, INPUT);
pinMode(1, OUTPUT);

pinMode(ETX_Pin, INPUT);
pinMode(ERX_Pin, OUTPUT);
}

void loop()
{
int pc2vrbot = digitalRead(0);
digitalWrite(ERX_Pin, pc2vrbot);

int vrbot2pc = digitalRead(ETX_Pin);
digitalWrite(1, vrbot2pc);
}

Какие у кого есть мысли по этому поводу?

gukov
22.03.2013, 11:46
Результат как то не радует и не понятен...

Какие у кого есть мысли по этому поводу?

Я что то упустил или не допонял.

Допустим код не совпадает, но он (код) одинаковый при нажатие одной команды (допустим 10 раз подряд) или не стабилен?

filinmd
22.03.2013, 11:49
Я что то упустил или не допонял.

Допустим код не совпадает, но он (код) одинаковый при нажатие одной команды (допустим 10 раз подряд) или не стабилен?

Код стабильный и без "ключа".

Просто хочу добиться, так сказать, "стандарта".

gukov
22.03.2013, 11:54
Код стабильный и без "ключа".

Просто хочу добиться, так сказать, "стандарта".

А если подключить без контролера к COM порту.
Что показывает терминальная программа при разных настройках? (допустим в программе Terminal)

filinmd
22.03.2013, 13:04
А если подключить без контролера к COM порту.
Что показывает терминальная программа при разных настройках? (допустим в программе Terminal)

Никогда ничего не подключал напрямую к com порту да и нет у меня его на материнке.


Я пробовал только два варианта:

Это подключение напрямую к rx tx чипа ftdi
И через пины Atmegи, результат зависит от скетча...

gukov
22.03.2013, 13:19
Никогда ничего не подключал напрямую к com порту да и нет у меня его на материнке.
..., результат зависит от скетча...

Результат может зависит от чего угод, вплоть до питания чипа.

Организовать COM на компьютере вообще не проблема,
1) купи шнурок RS 232 - USB. (у меня шнурки на pl2303)
2) Про анализируй протокол и найди правильные настройки.

А уж потом можно приступать к программированию с полным пониманием, что делаешь правильно, будь то это работа в внутри операционной системы или с помощью стороннего контролера.

filinmd
22.03.2013, 15:12
Результат может зависит от чего угод, вплоть до питания чипа.

Организовать COM на компьютере вообще не проблема,
1) купи шнурок RS 232 - USB. (у меня шнурки на pl2303)
2) Про анализируй протокол и найди правильные настройки.

А уж потом можно приступать к программированию с полным пониманием, что делаешь правильно, будь то это работа в внутри операционной системы или с помощью стороннего контролера.

по настройкам все давно известно, 9600,8,2 на других не работает.
На подобных шнурках как раз все работает... и весь интерес проекта, так это заставить работать на Arduino....

gukov
22.03.2013, 15:39
по настройкам все давно известно, 9600,8,2 на других не работает.
Эти настройки прокатят только MMI 2G, что будем делать когда в руки попадет MMI 3G, где эти настройки не пройдут?;)

На подобных шнурках как раз все работает... и весь интерес проекта, так это заставить работать на Arduino....

Ну и что пишет терминал Arduinо? и совпадают ли значение с тем что давно работает (" на подобных шнурках"):)

filinmd
22.03.2013, 17:06
Эти настройки прокатят только MMI 2G, что будем делать когда в руки попадет MMI 3G, где эти настройки не пройдут?;)


3G я видел только на картинках :)))


Ну и что пишет терминал Arduinо? и совпадают ли значение с тем что давно работает (" на подобных шнурках"):)

Я уже говорил (http://www.pccar.ru/showpost.php?p=251808&postcount=39)

gukov
22.03.2013, 18:30
Я уже говорил (http://www.pccar.ru/showpost.php?p=251808&postcount=39)

Я думаю, надо сравнить в терминале код
Arduino c RS-232 c одинаковыми настройками на своем столе, если есть желание сделать универсальную стандартную программу.:)

crashmilan
24.03.2013, 23:47
На 3G скорость пульта ваше 19200. Большинства кодов совпадает с 2G.
Смотрите установку в С7. Универсальную программу можно создать без проблем (точнее она уже есть) просто настраивается каждая кнопка mmi под нужную комбинацию клавы. Подключить пульт можно и через Pl2303 или любой другой с подобным чипом, главное если через некоторые мобильные шнурки подключать то придется подпаивать к чипу напрямую. И я бы Вам gukov советовал почитать и поискать на форуме. Нельзя быть очень умным, это ошибочное ваше мнения. Нахрена ему сравнивать в терминале? Ты вообще понимаешь что пишешь??? Опять бред начинаешь нести? Оставь человека в покое, пусть делает, он на верном пути, не надо его путать дебильными вопросами и советами.

crashmilan
24.03.2013, 23:56
Ну и что пишет терминал Arduinо? и совпадают ли значение с тем что давно работает (" на подобных шнурках"):)
Что работает у тебя? Покажии??? Я реально в шоке от тебя.

filinmd
02.04.2013, 11:52
Все оказалось немного проще , пересобрал схему на другом транзисторе (bc 547) и все поехало как надо.

gukov
02.04.2013, 12:29
И я бы Вам gukov советовал почитать и поискать на форуме. Нельзя быть очень умным, это ошибочное ваше мнения. Нахрена ему сравнивать в терминале? Ты вообще понимаешь что пишешь??? Опять бред начинаешь нести? Оставь человека в покое, пусть делает, он на верном пути, не надо его путать дебильными вопросами и советами.

Это нужно для того что бы найти неисправность в собранной цепи.

filinmd
03.04.2013, 15:27
Нет, все равно какая-то хрень. Замена транзюка спасла от ошибок только для одного скетча.



//http://cyber-place.ru/showthread.php?t=582
#include <CyberLib.h>



void setup()
{
D0_In; //Ard RX
D10_Out; //BT RX
D1_Out; //Ard TX
D9_In; //BT TX
}

void loop()
{ Start
if(D0_Read==1)D10_High; else D10_Low;
if(D9_Read==1){
D1_High;

}
else
{
D1_Low;
}
End;
}

или этим
uint8_t ETX_Pin=3; //// VRbot Пин ETX
uint8_t ERX_Pin=4; //// VRbot Пин ERX

void setup()
{
pinMode(0, INPUT);
pinMode(1, OUTPUT);

pinMode(ETX_Pin, INPUT);
pinMode(ERX_Pin, OUTPUT);
}

void loop()
{
int pc2vrbot = digitalRead(0);
digitalWrite(ERX_Pin, pc2vrbot);

int vrbot2pc = digitalRead(ETX_Pin);
digitalWrite(1, vrbot2pc);
}

что по сути одно и тоже... то все команды читаются на ура и никаких проблем. Но как обрабатывать полученные таким образом сигналы я не могу разобраться :(((


а Если читать скетчем из шапки то значения приходят стабильные но не много другие



к примеру должно "10 02 79 FF 10 03 9D", а приходит "10 02 79 FF 20 D D4 FE"




Если получится, то сегодня постараюсь купить драйвер MAX 232 и соберу оригинальную схему...

crashmilan
04.04.2013, 16:19
Если получится, то сегодня постараюсь купить драйвер MAX 232 и соберу оригинальную схему...
ты же делаешь для себя? Какая тебе разница какой сигнал приходит, главное он разный и четкий. На max будет также я думаю. резисторы не могут повлиять?

filinmd
04.04.2013, 16:40
ты же делаешь для себя? Какая тебе разница какой сигнал приходит, главное он разный и четкий. На max будет также я думаю. резисторы не могут повлиять?

Для себя я оставлю скетч из шапки, сейчас жду пока плагин для iCar будет готов.


А так теперь просто интересно стало почему такая фигня....