summaryrefslogtreecommitdiff
path: root/libraries/OBD/examples/obd_uart_test
diff options
context:
space:
mode:
authorStanley Huang <stanleyhuangyc@gmail.com>2015-11-12 19:42:43 +1100
committerStanley Huang <stanleyhuangyc@gmail.com>2015-11-12 19:42:43 +1100
commit26e353765bd0ecc419f79531a28a562466acf925 (patch)
treea3f4a90094dd8820080d071c1b91853426bac825 /libraries/OBD/examples/obd_uart_test
parent79ace6117e7a7b4822ac08bb7f167d4a64667ece (diff)
download2021-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.ino89
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);
+}