Library to control Dodge LX (83.3k) CAN devices
Dependencies: DodgeRadioLib EthernetWrapperLib OBDIILib mbed
ecu_reader.cpp
- Committer:
- rtgree01
- Date:
- 2011-12-30
- Revision:
- 1:90487a39d54e
- Parent:
- 0:4d16a55d0eec
- Child:
- 2:e8b13ea2881b
File content as of revision 1:90487a39d54e:
#include "mbed.h" #include "ecu_reader.h" // Use a timer to see if things take too long Timer CANTimer; namespace mbed { ecu_reader::ecu_reader(CAN *c, int can_speed) { can = c; can->frequency(can_speed); data.mafSensor = -1; data.speed = -1; } void ecu_reader::request(unsigned char pid) { char can_msg[8]; can_msg[0] = 0x02; can_msg[1] = 0x01; can_msg[2] = pid; can_msg[3] = 0; can_msg[4] = 0; can_msg[5] = 0; can_msg[6] = 0; can_msg[7] = 0; if (can->write(CANMessage(PID_REQUEST, can_msg, 8))) { } } void ecu_reader::readCAN() { CANMessage can_MsgRx; while (can->read(can_MsgRx)) { if (can_MsgRx.id == PID_REPLY) { switch (can_MsgRx.data[2]) { case ENGINE_RPM: data.rpm = (int)(((can_MsgRx.data[3]*256) + can_MsgRx.data[4])/4); break; case ENGINE_COOLANT_TEMP: data.coolantTemp = (int)(can_MsgRx.data[3] * 0.621371192); break; case MAF_SENSOR: data.mafSensor = (int)(((can_MsgRx.data[3]*256) + can_MsgRx.data[4])/100); break; case O2_VOLTAGE: data.o2Voltage = (int)(can_MsgRx.data[3]*0.005); break; case THROTTLE: // data.throttle = (int) ((can_MsgRx.data[3]*100)/255); break; case VEHICLE_SPEED: data.speed = (int)can_MsgRx.data[3]; break; case FUEL_LEVEL: data.fuel = 100 * can_MsgRx.data[3] / 255; break; } } } if ((data.mafSensor != -1) && (data.speed != -1)) { float mph = 0.621371192 * data.speed; data.mpg = mph / (data.mafSensor * 0.0804988); printf("Current MPG = %f\n\r", data.mpg); } } }