2013-08-30 13 views
5

Ho scritto un codice che è successo in grado di trovare l'OBD associato e stabilire la connessione con ELM327 ma quando sto cercando di inviare il comando ATZ l'applicazione ottiene crash.Impossibile inviare il comando ATZ a 327 dopo aver stabilito il collegamento con ELM327 in Android

Ecco il frammento di codice, forse ho fatto male

public HashMap<String, String> startOBDCommunicator(
      BluetoothSocket btSocketConnected, String paramClassName, 
      String methodName) { 

     HashMap<String, String> dataRetriever = new HashMap<String, String>(); 
     sendDataToOBD(btSocketConnected, "ATZ\r"); 
     dataRetriever.put("Reset", readDataFromOBD(btSocketConnected)); 

     sendDataToOBD(btSocketConnected, "ATS0\r"); 
     dataRetriever.put("Space Control", readDataFromOBD(btSocketConnected)); 

     sendDataToOBD(btSocketConnected, "ATE0\r"); 
     dataRetriever.put("Echo control", readDataFromOBD(btSocketConnected)); 

     sendDataToOBD(btSocketConnected, "ATL0\r"); 
     dataRetriever.put("Line feed", readDataFromOBD(btSocketConnected)); 

     sendDataToOBD(btSocketConnected, "ATAT0\r"); 
     dataRetriever 
       .put("Adaptive Timing", readDataFromOBD(btSocketConnected)); 

     sendDataToOBD(btSocketConnected, "ATST10\r"); 
     dataRetriever.put("Time Out", readDataFromOBD(btSocketConnected)); 

     sendDataToOBD(btSocketConnected, "ATI\r"); 
     dataRetriever.put("Device Description", 
       readDataFromOBD(btSocketConnected)); 

     sendDataToOBD(btSocketConnected, "ATDP\r"); 
     dataRetriever.put("Protocol Information1", 
       readDataFromOBD(btSocketConnected)); 

     sendDataToOBD(btSocketConnected, "ATSPA0\r"); 
     dataRetriever 
       .put("Auto Protocol", 
         readBytesFromOBD(btSocketConnected, paramClassName, 
           methodName)); 

     sendDataToOBD(btSocketConnected, "010C\r"); 

     dataRetriever 
       .put("RPM param", 
         readBytesFromOBD(btSocketConnected, paramClassName, 
           methodName)); 

     sendDataToOBD(btSocketConnected, "010D\r"); 

     dataRetriever 
       .put("Speed parameters", 
         readBytesFromOBD(btSocketConnected, paramClassName, 
           methodName)); 

     sendDataToOBD(btSocketConnected, "0104\r"); 

     dataRetriever 
       .put("engine load value parameters", 
         readBytesFromOBD(btSocketConnected, paramClassName, 
           methodName)); 

     sendDataToOBD(btSocketConnected, "0105\r"); 

     dataRetriever 
       .put("Engine coolant temperature parameters", 
         readBytesFromOBD(btSocketConnected, paramClassName, 
           methodName)); 

     sendDataToOBD(btSocketConnected, "012F\r"); 

     dataRetriever 
       .put("Fuel Level Input", 
         readBytesFromOBD(btSocketConnected, paramClassName, 
           methodName)); 

     return dataRetriever; 

    } 

io non sono sicuro dove ho fatto errori, quindi im condividendo il flusso di tutto il codice come due Gist, https://gist.github.com/sankarganesh/6376031, questo succo detiene il Listino attività e un altro aspetto per Listener socket Bluetooth https://gist.github.com/sankarganesh/6376039

+0

Arresto anomalo dell'applicazione -> possiamo avere uno stacktrace? –

+0

@ Skaard-Solo: Anche se ho scritto il blocco catch try e provo a ripetere la traccia dello stack in un file che si trova nella cartella test nella scheda sd, non sono riuscito a catturare la traccia dello stack durante il test con la mia auto. –

+0

@ Skaard-Solo :: chiedo di passare attraverso il senso che ho condiviso in questione e mi trasmettere se ho torto utilizzato i comandi –

risposta

0

Il problema potrebbe essere che dopo il segnale di richiesta > nessun CR viene inviato dal dispositivo ELM al computer. Se il buffer di input seriale è configurato con la terminazione da un CR, si verificherà un timeout.

Problemi correlati