Library to control Dodge LX (83.3k) CAN devices

Dependencies:   DodgeRadioLib EthernetWrapperLib OBDIILib mbed

Revision:
0:4d16a55d0eec
Child:
1:90487a39d54e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ecu_reader.cpp	Sat Aug 20 14:20:13 2011 +0000
@@ -0,0 +1,85 @@
+#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_mMsgRx.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);
+    }
+}
+}
\ No newline at end of file