2013-08-30 9 views
5

Napisałem kod, który z powodzeniem może znaleźć sparowany OBD i nawiązać połączenie z ELM327, ale kiedy próbuję wysłać polecenie ATZ, aplikacja otrzymuje wypadek.Nie można wysłać polecenia ATZ do ELM 327 po nawiązaniu połączenia z ELM327 w Androidzie

Oto fragment kodu, może zrobiłem źle

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; 

    } 

ja nie jestem pewien, gdzie zrobiłem błędy, więc im dzielenie przepływ całego kodu jako dwa GIST https://gist.github.com/sankarganesh/6376031 ta istota trzyma Plik aktywności i jeszcze jeden sens dla odbiornika Bluetooth Listener https://gist.github.com/sankarganesh/6376039

+0

Awaria aplikacji -> czy możemy mieć stacktrace? –

+0

@ Skaard-Solo: Mimo, że napisałem próbę catch catch i próbuję ponownie zapisać ślad stosu w pliku, który znajduje się w folderze testowym na karcie SD, nie byłem w stanie przechwycić śladu stosu podczas testowania z moim samochodem. –

+0

@ Skaard-Solo :: Proszę, abyś przeszedł przez sedno, który podzieliłem w pytaniu i przekazał mi, czy błędnie użyłem poleceń –

Odpowiedz

0

Problem może polegać na tym, że po znaku zachęty > nie jest wysyłany CR z urządzenia ELM do komputera. Jeśli twój szeregowy bufor wejściowy jest skonfigurowany z zakończeniem przez CR, nastąpi przekroczenie limitu czasu.

Powiązane problemy