//CANBUS Library
#include "FlexCAN.h"
#include "kinetis_flexcan.h"
// Specify CAN baudrate
FlexCAN CANbus(500000);//1000000);//500000);
static CAN_message_t rxmsg;
#define PID_REQUEST 0x7DF
#define PID_REPLY 0x7E8
#define ENGINE_COOLANT_TEMP 0x05
void setup() {
//Initialize CAN
CANbus.begin();
Serial.begin(115200); //CANBUS Serial
(!Serial);
while (!Serial){
Serial.print("Waiting connection \n");
}
Serial.print("Start reading \n");
}
elapsedMillis DisplayTime; //Establish a timer to prevent unnecessary screen rewrite
void loop(void) {
///////////////Look for CAN broadcasts///////////////
CAN_message_t can_MsgTx;
can_MsgTx.buf[0] = 0x02;
can_MsgTx.buf[1] = 0x01;
can_MsgTx.buf[2] = ENGINE_COOLANT_TEMP;
can_MsgTx.buf[3] = 0;
can_MsgTx.buf[4] = 0;
can_MsgTx.buf[5] = 0;
can_MsgTx.buf[6] = 0;
can_MsgTx.buf[7] = 0;
can_MsgTx.len = 8;
//can_MsgTx.ext = 0;
can_MsgTx.flags.extended = 0;
can_MsgTx.flags.remote = 0;
can_MsgTx.id = PID_REQUEST;
//can_MsgTx.id = 0x222;
//can_MsgTx.id = 0x7E0;
// can_MsgTx.timeout = 500;
CANbus.write(can_MsgTx);
while ( CANbus.read(rxmsg) ) {
if ((rxmsg.id == PID_REPLY) or (rxmsg.buf[0] == ENGINE_COOLANT_TEMP) or (rxmsg.buf[1] == ENGINE_COOLANT_TEMP) or (rxmsg.buf[2] == ENGINE_COOLANT_TEMP)){
Serial.print("Answered \t");
Serial.print(rxmsg.buf[2]);
Serial.print("\t");
Serial.print(rxmsg.buf[3]);
Serial.print("\n");
if (rxmsg.buf[2] == 0x05){
Serial.print("Engine coolant temp: \t");
Serial.print(rxmsg.buf[3] - 40);
Serial.print("\n");
}
}
}
// if ( DisplayTime < 150 ) return;
// DisplayTime = 0;
}