Small project to display some OBD values from the Toyota GT86/ Subaru BRZ/ Scion FRS on an OLED display.

Dependencies:   Adafruit_GFX MODSERIAL mbed-rtos mbed

Revision:
1:ca506b88b1d6
Parent:
0:6b1f6139fb25
Child:
2:d3d61d9d323e
--- a/main.cpp	Tue Apr 22 14:51:04 2014 +0000
+++ b/main.cpp	Tue Apr 22 15:32:49 2014 +0000
@@ -1,7 +1,8 @@
 #include "mbed.h"
 #include "rtos.h"
 #include "IsoTpHandler.h"
- 
+
+Serial pc(USBTX, USBRX); // tx, rx 
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
 CAN can2(p30, p29);
@@ -42,8 +43,45 @@
         error("Putting can message into mailbox failed with code %d!", error);
     }
 }
+
+void serial_int_handler() {
+    if (!pc.readable()) {
+        return;
+    }
+    uint8_t character = pc.getc();
+    printf("Received '%c'\n", character);
+    
+    char can_msg[8] = {0};
+    can_msg[0] = 0x02;  
+    can_msg[1] = 0x01;
+    char pid = 0;
+    switch (character)
+    {
+        case '1':
+            pid = 0x0C; //engine rpm
+            break;
+        case '2':
+            pid = 0x11; //throttle
+            break;
+        case '3': //oil 1
+            can_msg[1] = 0x21; //endian
+            pid = 1;
+            break;
+        case '4': //oil 2
+            can_msg[1] = 1; //endian
+            pid = 0x21;
+            break;
+        default:
+            pid = 0x05; //engine coolant temp
+    }
+    can_msg[2] = pid;
+    
+    printf("Can write %d\n", can2.write(CANMessage(0x7DF, can_msg, 8)));
+ }
  
 int main() {
+    pc.baud(115200);
+    pc.attach(serial_int_handler);
     can2.frequency(500000);
     can2.attach(can_rx_int_handler);
     Thread thread(led2_thread);