Официальный сайт компании Arduino по адресу arduino.cc
ELM 327+ Arduino Mini_ CD emulator
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 26/05/2015 - 22:05
подскажите как правильно получить и обработать UART сигнал с ELM устроиства.
что нужно: при получении сигнала с Rx "8D 0F XX XX XX" etc ответить "8D 94 01" и затем "8D 93 01"
вот код.
пока сделал условие " if ((strtol(&rxData[0],0,16)>0" так магнитола видит эмуллятор и активирует AUX вход.
Однако при таких условиях эмулятор оттравляет 8D 93 01 практическии все время без перерыва. от такой "дос атаки" не работает громкость и вообще система не стабилтна. (может проработать 1 минуту, а может и час)
вот код
схема такая (Car Stereo to J1850 to ELM to Arduino 7,8)
вот мой кривой пока код.
#include <SoftwareSerial.h> SoftwareSerial BTSerial(7, 8); // TX | RX //char character; //char DATAFROMMAFON=0; char rxData[20]; char rxIndex=0; int led = 13; void setup() { Serial.begin(38400); BTSerial.begin(38400); if (BTSerial.available()) Serial.write(BTSerial.read()); if (Serial.available()) //BTSerial.flush(); BTSerial.write(Serial.read()); BTSerial.write("ATL1"); BTSerial.println(); delay (500); BTSerial.write("ATH1"); BTSerial.println(); delay (500); BTSerial.write("ATS1"); BTSerial.println(); delay (500); BTSerial.write("ATAL"); BTSerial.println(); delay (500); BTSerial.write("ATE0"); BTSerial.println(); delay (500); Serial.println("ATMA"); //J1850 BTSerial.println(); delay (500); if (BTSerial.available() > 0) { BTSerial.println("ATSH8D9301");// говорим есть СД чеинжер BTSerial.println(); delay(50); BTSerial.println("0000"); BTSerial.println(); delay(200);\ if (BTSerial.available() > 0) { BTSerial.println("ATSH8D9310");// говорим еще раз BTSerial.println(); delay(50); BTSerial.println("0000"); BTSerial.println(); delay(100); } } } void loop() {// run over and over BTSerial.flush(); // Serial.print("[2J"); getResponse(); getResponse();// if ((strtol(&rxData[0],0,16)==141) and (strtol(&rxData[3],0,16)==15)) { digitalWrite(13, HIGH); BTSerial.println("ATSH8D9301");// говорим мафону что СД чеинжер поет BTSerial.println(); delay(20); BTSerial.println("0000"); //показываем мафону время и трек BTSerial.println(); delay(150); } } void getResponse(void){ char inChar=0; { while(inChar != '\r'){ if(BTSerial.available() > 0){ if(BTSerial.peek() == '\r'){ inChar=BTSerial.read(); rxData[rxIndex]='\0'; rxIndex=0; } else { inChar = BTSerial.read(); rxData[rxIndex++]=inChar; } } } } }
Практически сам себе и ответил на свой вопрос. Зачем слать постоянно? Давным давно ведь ещё Майк Вольф писал "На запрос ХХХ" ответить "УУУ".