2013-08-30 1 views
5

J'ai écrit un code qui réussit à trouver l'OBD apparié et établir la connexion avec ELM327 mais quand j'essaye d'envoyer la commande ATZ l'application obtient crash.Impossible d'envoyer la commande ATZ à ELM 327 après avoir établi la connexion avec ELM327 dans android

est ici l'extrait de code, je l'ai fait mal

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; 

    } 

Je ne suis pas sûr où je l'ai fait des erreurs, donc im partager le flux du code entier comme deux point essentiel, https://gist.github.com/sankarganesh/6376031, cet essentiel tient le Fichier d'activité et un autre élément pour l'écouteur de sockets Bluetooth https://gist.github.com/sankarganesh/6376039

+0

Crash d'application -> pouvons-nous avoir un stacktrace? –

+0

@ Skaard-Solo: Même si j'ai écrit le bloc try catch et essayé de recopier la trace de la pile dans un fichier sous test dans la carte SD, je n'ai pas pu capturer la trace de la pile. –

+0

@ Skaard-Solo :: Je vous demande de passer par l'essentiel que j'ai partagé dans la Question et de me dire si j'ai mal utilisé les commandes –

Répondre

0

Le problème peut être qu'après le signe d'invite >, aucun message CR n'est envoyé de l'appareil ELM à l'ordinateur. Si votre tampon d'entrée série est configuré avec une terminaison par un CR, un délai d'attente se produira.

Questions connexes