Są 2 prawdopodobne przyczyny takiego stanu rzeczy:
- interfejs OBD w twoim samochodzie nie jest przystosowany, aby rejestrować wszystkie zmiany (opis niżej)
- interfejs OBDII ELM327 jest za wolny w komunikacji i przetwarzaniu (mniej prawdopodobne)
Z tego co czytałem, to OBD w założeniach miał służyć do diagnostyki ogólnej, czyli podpinasz się do niego i wiesz z czym masz problem (na przykład masz jakieś problemy z pompą paliwa, to dostajesz kod błędu, że coś nie tak z pompą paliwa itp.).
https://en.wikipedia.org/wiki/OBD-II_PIDs
Tutaj masz opis jak działa odczyt PID-a (domyślam się, że z niego korzystasz).
Prawdopodobnie ramka CAN która jest wysyłana przez interfejs OBD ma niski priorytet (priorytetowanie ramek w sieci CAN; chyba, że Twój samochód używa czegoś innego, choć wątpię) i długo musi czekać na wolną magistralę, przez co czas odczytu tej informacji jest tak długi.
Sprawdź szybkość działania w już gotowym programie a najlepiej w kilku. Wtedy będziesz miał pewność, czy to wina interfejsu, czy może odpytujesz interfejs w nieoptymalny sposób.
Możesz spróbować się podpiąć bezpośrednio do magistrali komunikacyjnej swojego samochodu, a wtedy będziesz miał na bieżąco podgląd co jest wysyłane przez każde z urządzeń. Minusem takiego rozwiązania jest posiadanie wiedzy co czym jest w samochodzie, bo bez tego to możesz rok spędzić na rozkodowywaniu poszczególnych ramek.
To co napisałem oparte jest na wiedzy głównie z wikipedii i nie musi mieć odzwierciedlenia w rzeczywistości, tak więc głowy za to nie dam.