Final Report

Dependencies:   mbed

Fork of ecu_reader by Sukkin Pang

Committer:
LAvtec818
Date:
Mon Oct 27 02:46:55 2014 +0000
Revision:
6:dae9630af6e3
Parent:
3:05bb8f0bd7a4
report

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pangsk 0:908be729d27c 1 #include "mbed.h"
pangsk 0:908be729d27c 2 #include "ecu_reader.h"
pangsk 0:908be729d27c 3 #include "globals.h"
pangsk 0:908be729d27c 4
pangsk 0:908be729d27c 5
pangsk 0:908be729d27c 6 Timer CANTimer;
pangsk 0:908be729d27c 7 namespace mbed {
pangsk 0:908be729d27c 8
pangsk 0:908be729d27c 9
pangsk 0:908be729d27c 10 ecu_reader::ecu_reader(int can_speed)
pangsk 0:908be729d27c 11 {
pangsk 0:908be729d27c 12 can2.frequency(can_speed);
pangsk 0:908be729d27c 13 }
pangsk 0:908be729d27c 14
pangsk 3:05bb8f0bd7a4 15
pangsk 0:908be729d27c 16 #define TIMEOUT 200
pangsk 0:908be729d27c 17 unsigned char ecu_reader::request(unsigned char pid, char *buffer)
pangsk 0:908be729d27c 18 {
pangsk 0:908be729d27c 19 char can_msg[8];
pangsk 0:908be729d27c 20 float engine_data;
pangsk 0:908be729d27c 21
pangsk 0:908be729d27c 22 led1 = 1;
pangsk 0:908be729d27c 23
pangsk 0:908be729d27c 24 can_msg[0] = 0x02;
pangsk 0:908be729d27c 25 can_msg[1] = 0x01;
pangsk 0:908be729d27c 26 can_msg[2] = pid;
pangsk 0:908be729d27c 27 can_msg[3] = 0;
pangsk 0:908be729d27c 28 can_msg[4] = 0;
pangsk 0:908be729d27c 29 can_msg[5] = 0;
pangsk 0:908be729d27c 30 can_msg[6] = 0;
pangsk 0:908be729d27c 31 can_msg[7] = 0;
pangsk 0:908be729d27c 32
pangsk 0:908be729d27c 33 if (can2.write(CANMessage(PID_REQUEST, can_msg, 8))) {
pangsk 0:908be729d27c 34
pangsk 0:908be729d27c 35 }
pangsk 0:908be729d27c 36
pangsk 0:908be729d27c 37 led1 = 0;
pangsk 0:908be729d27c 38 CANTimer.reset();
pangsk 0:908be729d27c 39 CANTimer.start();
pangsk 0:908be729d27c 40
pangsk 0:908be729d27c 41 while(CANTimer.read_ms() < TIMEOUT) {
pangsk 0:908be729d27c 42
pangsk 0:908be729d27c 43 if (can2.read(can_MsgRx)) {
pangsk 0:908be729d27c 44
pangsk 0:908be729d27c 45 if((can_MsgRx.id == PID_REPLY) && (can_MsgRx.data[2] == pid))
pangsk 0:908be729d27c 46 {
pangsk 0:908be729d27c 47 switch(can_MsgRx.data[2])
LAvtec818 6:dae9630af6e3 48 {
pangsk 0:908be729d27c 49 case ENGINE_RPM: // ((A*256)+B)/4 [RPM]
pangsk 0:908be729d27c 50 engine_data = ((can_MsgRx.data[3]*256) + can_MsgRx.data[4])/4;
pangsk 0:908be729d27c 51 sprintf(buffer,"%d rpm ",(int) engine_data);
pangsk 0:908be729d27c 52 break;
pangsk 0:908be729d27c 53
pangsk 0:908be729d27c 54 case ENGINE_COOLANT_TEMP: // A-40 [degree C]
pangsk 0:908be729d27c 55 engine_data = can_MsgRx.data[3] - 40;
LAvtec818 6:dae9630af6e3 56 sprintf(buffer,"%d degC: ",(int) engine_data);
pangsk 0:908be729d27c 57
pangsk 0:908be729d27c 58 break;
pangsk 0:908be729d27c 59
pangsk 0:908be729d27c 60 case VEHICLE_SPEED: // A [km]
LAvtec818 6:dae9630af6e3 61 engine_data = can_MsgRx.data[3]* 0.6;
LAvtec818 6:dae9630af6e3 62 sprintf(buffer,"%d MPH: ",(int) engine_data);
pangsk 0:908be729d27c 63
pangsk 0:908be729d27c 64 break;
pangsk 0:908be729d27c 65
pangsk 0:908be729d27c 66 case MAF_SENSOR: // ((256*A)+B) / 100 [g/s]
pangsk 0:908be729d27c 67 engine_data = ((can_MsgRx.data[3]*256) + can_MsgRx.data[4])/100;
LAvtec818 6:dae9630af6e3 68 sprintf(buffer,"%d g/s: ",(int) engine_data);
pangsk 0:908be729d27c 69
pangsk 0:908be729d27c 70 break;
pangsk 0:908be729d27c 71
pangsk 0:908be729d27c 72 case O2_VOLTAGE: // A * 0.005 (B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
pangsk 0:908be729d27c 73 engine_data = can_MsgRx.data[3]*0.005;
LAvtec818 6:dae9630af6e3 74 sprintf(buffer,"%d v: ",(int) engine_data);
LAvtec818 6:dae9630af6e3 75 break;
pangsk 0:908be729d27c 76
pangsk 0:908be729d27c 77 case THROTTLE: //
pangsk 0:908be729d27c 78 engine_data = (can_MsgRx.data[3]*100)/255;
LAvtec818 6:dae9630af6e3 79 sprintf(buffer,"%d Pos: ",(int) engine_data);
LAvtec818 6:dae9630af6e3 80
LAvtec818 6:dae9630af6e3 81 break;
LAvtec818 6:dae9630af6e3 82
LAvtec818 6:dae9630af6e3 83 case AIR_INTAKE_TEMP: // ((256*A)+B) / 100 [g/s]
LAvtec818 6:dae9630af6e3 84 engine_data = can_MsgRx.data[3] - 40;
LAvtec818 6:dae9630af6e3 85 sprintf(buffer,"%d degC: ",(int) engine_data);
LAvtec818 6:dae9630af6e3 86
LAvtec818 6:dae9630af6e3 87 break;
LAvtec818 6:dae9630af6e3 88
LAvtec818 6:dae9630af6e3 89 case FUEL_PRESSURE: // ((256*A)+B) / 100 [g/s]
LAvtec818 6:dae9630af6e3 90 engine_data = (can_MsgRx.data[3] * 3) * 0.1450;
LAvtec818 6:dae9630af6e3 91 sprintf(buffer,"%d Fuel PSI: ",(int) engine_data);
pangsk 0:908be729d27c 92
pangsk 0:908be729d27c 93 break;
pangsk 0:908be729d27c 94 }
pangsk 0:908be729d27c 95
pangsk 0:908be729d27c 96 return 1;
pangsk 0:908be729d27c 97
pangsk 0:908be729d27c 98 }
pangsk 0:908be729d27c 99
pangsk 0:908be729d27c 100 }
pangsk 0:908be729d27c 101 }
pangsk 0:908be729d27c 102
pangsk 0:908be729d27c 103 return 0;
pangsk 0:908be729d27c 104
pangsk 0:908be729d27c 105
pangsk 0:908be729d27c 106
pangsk 0:908be729d27c 107
pangsk 0:908be729d27c 108 }
LAvtec818 6:dae9630af6e3 109 }
LAvtec818 6:dae9630af6e3 110