diff options
author | Stanley Huang <stanleyhuangyc@gmail.com> | 2015-11-12 19:42:43 +1100 |
---|---|---|
committer | Stanley Huang <stanleyhuangyc@gmail.com> | 2015-11-12 19:42:43 +1100 |
commit | 26e353765bd0ecc419f79531a28a562466acf925 (patch) | |
tree | a3f4a90094dd8820080d071c1b91853426bac825 /libraries/OBD/examples/obd_uart_test | |
parent | 79ace6117e7a7b4822ac08bb7f167d4a64667ece (diff) | |
download | 2021-arduino-obd-26e353765bd0ecc419f79531a28a562466acf925.tar.gz 2021-arduino-obd-26e353765bd0ecc419f79531a28a562466acf925.tar.bz2 2021-arduino-obd-26e353765bd0ecc419f79531a28a562466acf925.zip |
Update OBD library and examples
Diffstat (limited to 'libraries/OBD/examples/obd_uart_test')
-rw-r--r-- | libraries/OBD/examples/obd_uart_test/obd_uart_test.ino | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/libraries/OBD/examples/obd_uart_test/obd_uart_test.ino b/libraries/OBD/examples/obd_uart_test/obd_uart_test.ino new file mode 100644 index 0000000..b746cdd --- /dev/null +++ b/libraries/OBD/examples/obd_uart_test/obd_uart_test.ino @@ -0,0 +1,89 @@ +/************************************************************************* +* Sample sketch for Freematics OBD-II UART Adapter +* Reads and prints several OBD-II PIDs value and MEMS sensor data +* Distributed under GPL v2.0 +* Visit http://freematics.com for more information +* (C)2012-2015 Stanley Huang <stanleyhuangyc@gmail.com> +*************************************************************************/ + +#include <Arduino.h> +#include <Wire.h> +#include <SoftwareSerial.h> +#include <OBD.h> + +SoftwareSerial mySerial(A2, A3); +COBD obd; + +void testOut() +{ + static const char PROGMEM cmds[][6] = {"ATZ\r", "ATL1\r", "ATH0\r", "ATRV\r", "0100\r", "010C\r", "0902\r"}; + char buf[OBD_RECV_BUF_SIZE]; + + for (byte i = 0; i < sizeof(cmds) / sizeof(cmds[0]); i++) { + char cmd[6]; + memcpy_P(cmd, cmds[i], sizeof(cmd)); + mySerial.print("Sending "); + mySerial.println(cmd); + if (obd.sendCommand(cmd, buf)) { + char *p = strstr(buf, cmd); + if (p) + p += strlen(cmd); + else + p = buf; + while (*p == '\r') p++; + while (*p) { + mySerial.write(*p); + if (*p == '\r' && *(p + 1) != '\r') + mySerial.write('\n'); + p++; + } + } else { + mySerial.println("Timeout"); + } + delay(1000); + } + mySerial.println(); +} + +void readPID() +{ + static const byte PROGMEM pidlist[] = {PID_ENGINE_LOAD, PID_COOLANT_TEMP, PID_RPM, PID_SPEED, PID_TIMING_ADVANCE, PID_INTAKE_TEMP, PID_THROTTLE, PID_FUEL_LEVEL}; + for (byte i = 0; i < sizeof(pidlist) / sizeof(pidlist[0]); i++) { + byte pid = pgm_read_byte(pidlist + i); + bool valid = obd.isValidPID(pid); + mySerial.print('0'); + mySerial.print((int)pid | 0x100, HEX); + mySerial.print('='); + if (valid) { + int value; + if (obd.read(pid, value)) { + byte n = mySerial.println(value); + } + } else { + mySerial.println('X'); + } + } +} + +void setup() { + delay(500); + mySerial.begin(9600); + obd.begin(); + + do { + testOut(); + mySerial.println("Init..."); + } while (!obd.init()); + + char buf[OBD_RECV_BUF_SIZE]; + if (obd.getVIN(buf)) { + mySerial.print("VIN:"); + mySerial.println(buf); + } + delay(1000); +} + +void loop() { + readPID(); + delay(500); +} |