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
Diff: main.cpp
- 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);