diff options
author | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2021-06-13 13:01:31 +0200 |
---|---|---|
committer | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2021-06-13 13:01:31 +0200 |
commit | 0282f200a3e0236f5baca9d3fd9db2fb2b66c5e6 (patch) | |
tree | 157fc41c58b0abb58c7bda24a14e09588c238441 | |
parent | 8bf6263cbf36c27533c1d24dbbd183dc2ad91533 (diff) | |
download | 2021-arduino-obd-0282f200a3e0236f5baca9d3fd9db2fb2b66c5e6.tar.gz 2021-arduino-obd-0282f200a3e0236f5baca9d3fd9db2fb2b66c5e6.tar.bz2 2021-arduino-obd-0282f200a3e0236f5baca9d3fd9db2fb2b66c5e6.zip |
MyOBD: Trace every read and write to OBD adapter, lpo.ino: adapt for tracing
Extra for future : cap readDTC() call frequency to not struggle the CAN bus
-rw-r--r-- | lpo/MyOBD.h | 12 | ||||
-rw-r--r-- | lpo/lpo.ino | 26 |
2 files changed, 28 insertions, 10 deletions
diff --git a/lpo/MyOBD.h b/lpo/MyOBD.h index ea143be..f2124c3 100644 --- a/lpo/MyOBD.h +++ b/lpo/MyOBD.h @@ -1,8 +1,20 @@ #ifndef __MYOBD_H #define __MYOBD_H #include <OBD.h> + +#include <MyLCD.h> +extern MyLCD lcd; + class MyOBD : public COBDI2C { public: + void write(const char* s) { + lcd.print("<<<"); lcd.println(s); + COBDI2C::write(s); + } + byte receive(char* buffer, byte bufsize, int timeout) { + byte res = COBDI2C::receive(buffer,bufsize, timeout); + lcd.print(">>>"); lcd.println(buffer); + } /* Fake OBD for testing int i; MyOBD() { diff --git a/lpo/lpo.ino b/lpo/lpo.ino index 85a595b..b85de2b 100644 --- a/lpo/lpo.ino +++ b/lpo/lpo.ino @@ -2,38 +2,36 @@ * Inpired from simple_obd_display.ino by Stanley Huang <stanley@freematics.com.au> * (Simple OBD Data Display for Freematics OBD-II Adapter) *************************************************************************/ -#include "MyLCD.h" +#include <MyLCD.h> #include "MyOBD.h" - MyLCD lcd; MyOBD obd; void setup() { lcd.begin(); - lcd.print("obd.begin()"); + lcd.println("obd.begin()"); obd.begin(); - lcd.println(" done"); reconnect(); showDTC(); + while(1); // Freeze exec here for now initScreen(); } void reconnect() { - lcd.setCursor(1,2); - lcd.print("obd.init() "); - lcd.setCursor(11,2); + lcd.println("obd.init()"); while (!obd.init()) { - lcd.print("."); + lcd.println("obd.init() failed"); } - lcd.println(" done"); } void showDTC() { static char buf[10]; static uint16_t codes[16]; - byte c, count = obd.readDTC(codes, 16); + byte c, count; + lcd.println("obd.readDTC()"); + count = obd.readDTC(codes, 16); lcd.print("DTC: "); if ( count==0 ) { lcd.println("none"); @@ -50,8 +48,16 @@ void loop() { static byte pids[]= {PID_RPM, PID_SPEED, PID_ENGINE_LOAD, PID_THROTTLE}; static byte index = 0, prev_err=obd.errors; + static long prevRead = 0; + long wait; byte pid = pids[index]; int value; + + // Don't read on CAN bus to fast, it struggle and reset main car dashboard + wait = millis() - prevRead + 25; // 40 Hz, 10 FPS for 4 pids + if ( wait > 0 ) delay(wait); + prevRead = millis(); + // send a query to OBD adapter for specified OBD-II pid if (obd.readPID(pid, value)) { showData(pid, value); |