ELM 327+ Arduino Mini_ CD emulator

vairkz
Offline
Зарегистрирован: 26.05.2015

подскажите как правильно получить и обработать 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;
        }
      }
    }
  
  }
  }

 

fm-nafing
Offline
Зарегистрирован: 20.11.2015

Практически сам себе и ответил на свой вопрос. Зачем слать постоянно? Давным давно ведь ещё Майк Вольф писал "На запрос ХХХ" ответить "УУУ".