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;
}
}
}
}
}
Практически сам себе и ответил на свой вопрос. Зачем слать постоянно? Давным давно ведь ещё Майк Вольф писал "На запрос ХХХ" ответить "УУУ".