Stefan Sofijanić / Mbed 2 deprecated CANRX_LCD

Dependencies:   mbed LCD_DISCO_F469NI BSP_DISCO_F469NI

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "LCD_DISCO_F469NI.h"
00003 
00004 // define all CAN IDs in the vehicle
00005 // DTA ID are fixed and cannot be changed
00006 #define DTA_1   0x2000
00007 #define DTA_2   0x2001
00008 #define DTA_3   0x2002
00009 #define DTA_4   0x2003
00010 #define DTA_5   0x2004
00011 #define DTA_6   0x2006
00012 // This IDs can be changed as they are our own IDs
00013 #define LVDT_FRONT  0x1000
00014 #define LVDT_REAR   0x1001
00015 #define BRAKES  0x1002
00016 // If we add some other IDs in the vehicle add them here
00017 
00018 // Receive Flag
00019 uint32_t rx_flag=0x00000000;
00020 Serial pc(USBTX, USBRX);
00021 
00022 // CAN Message variables, one variable for each ID
00023 // If new IDs are added, add variables for them
00024 CANMessage msgDTA1; // RPM, TPS %, Water temp C, Air temp C
00025 uint8_t msgDTA2[8]; // MAP Kpa, Lambda x1000, KPH x10, Oil P Kpa
00026 uint8_t msgDTA3[8]; // Fuel P Kpa, Oil temp C, Volts x10, Fuel Con. L/Hr x10
00027 uint8_t msgDTA4[8]; // Gear, Advance Deg x10, Injection ms x100, Fuel Con L/100km x10
00028 uint8_t msgDTA5[8]; // Ana1 mV, Ana2 mV, Ana3 mV, Cam Advance x10
00029 uint8_t msgDTA6[8]; // Cam Targ x10, Cam PWM x10, Crank Errors, Cam Errors
00030 uint8_t msgLVDTFront[8]; // Left, Right, Steering Wheel 
00031 uint8_t msgLVDTRear[8]; // Left, Right
00032 uint8_t msgBrakes[8]; // Brake system preassure, Braking On/Off
00033 
00034 // CAN Variables
00035 uint16_t rpm,tps,waterTemp, airTemp, map, Lambda, Volts, oilTemp, KPH, oilPress, Gear, lvdtFL, lvdtFR, lvdtRL, lvdtRR, steeringWheel, brakePress, BrakeOn;
00036 
00037 // number of different IDs
00038 int noID=9;
00039 
00040 // initialize LCD
00041 LCD_DISCO_F469NI lcd;
00042 // initialize internal LEDs
00043 DigitalOut led1(LED1);
00044 DigitalOut led2(LED2);
00045 // initialize CAN object
00046 CAN can1(PB_8, PB_9);
00047 
00048 // CAN RX Interrupt Function
00049 void CAN_Msg_Receive(){
00050     CANMessage tmpMsg;
00051     if (can1.read(tmpMsg)) { 
00052     pc.printf("%x\n",tmpMsg.id);      
00053         switch(tmpMsg.id){
00054             case(0):
00055                 rx_flag|=(1<<0);
00056                 //for(int k=0;k<8;k++){
00057                     msgDTA1=tmpMsg;
00058                 //};
00059                 break;
00060             case(DTA_2):
00061                 rx_flag|=(1<<1);
00062                 for(int k=0;k<8;k++){
00063                     msgDTA2[k]=tmpMsg.data[k];
00064                 };
00065                 break;
00066             case(DTA_3):
00067                 rx_flag|=(1<<2);
00068                 for(int k=0;k<8;k++){
00069                     msgDTA3[k]=tmpMsg.data[k];
00070                 };
00071                 break;
00072             case(DTA_4):
00073                 rx_flag|=(1<<3);
00074                 for(int k=0;k<8;k++){
00075                     msgDTA4[k]=tmpMsg.data[k];
00076                 };
00077                 break;
00078             case(DTA_5):
00079                 rx_flag|=(1<<4);
00080                 for(int k=0;k<8;k++){
00081                     msgDTA5[k]=tmpMsg.data[k];
00082                 };
00083                 break;
00084             case(DTA_6):
00085                 rx_flag|=(1<<5);
00086                 for(int k=0;k<8;k++){
00087                     msgDTA6[k]=tmpMsg.data[k];
00088                 };
00089                 break;
00090             case(LVDT_FRONT):
00091                 rx_flag|=(1<<6);
00092                 for(int k=0;k<8;k++){
00093                     msgLVDTFront[k]=tmpMsg.data[k];
00094                 };
00095                 break;
00096             case(LVDT_REAR):
00097                 rx_flag|=(1<<7);
00098                 for(int k=0;k<8;k++){
00099                     msgLVDTRear[k]=tmpMsg.data[k];
00100                 };
00101                 break;
00102             case(BRAKES):
00103                 rx_flag|=(1<<8);
00104                 for(int k=0;k<8;k++){
00105                     msgBrakes[k]=tmpMsg.data[k];
00106                 };
00107                 break;
00108         };
00109         printf("%x\n",rx_flag);
00110     };
00111 };
00112 
00113 void parse_DTA1();
00114 void parse_DTA2();
00115 void parse_DTA3();
00116 void parse_DTA4();
00117 void parse_DTA5();
00118 void parse_DTA6();
00119 void parse_LVDTFRONT();
00120 void parse_LVDTREAR();
00121 void parse_BRAKES();
00122 
00123 int main(){
00124     // attach interrupt function to CAN RX
00125     can1.attach(&CAN_Msg_Receive,CAN::RxIrq);
00126     lcd.DisplayStringAt(0,50,(uint8_t*)"Initialised",LEFT_MODE);
00127     while(1){
00128         // the code which checks the CAN RX Flags, and call appropriate data handler function
00129         for (int i=0;i<noID;i++){
00130             uint8_t flagBit;
00131             flagBit = rx_flag & (1<<i);
00132             //printf("i=%d\n",i);
00133             if (flagBit==1) {
00134                 
00135                 switch(i){
00136                     case(0):
00137                         parse_DTA1();
00138                         rx_flag = rx_flag ^ (1<<0);
00139                         break;
00140                     case(1):
00141                         parse_DTA2();
00142                         rx_flag = rx_flag ^ (1<<1);
00143                         break;
00144                     case(2):
00145                         parse_DTA3();
00146                         rx_flag = rx_flag ^ (1<<2);
00147                         break;
00148                     case(3):
00149                         parse_DTA4();
00150                         rx_flag = rx_flag ^ (1<<3);
00151                         break;
00152                     case(4):
00153                         parse_DTA5();
00154                         rx_flag = rx_flag ^ (1<<4);
00155                         break;
00156                     case(5):
00157                         parse_DTA6();
00158                         rx_flag = rx_flag ^ (1<<5);
00159                         break;
00160                     case(6):
00161                         parse_LVDTFRONT();
00162                         rx_flag = rx_flag ^ (1<<6);
00163                         break;
00164                     case(7):
00165                         parse_LVDTREAR();
00166                         rx_flag = rx_flag ^ (1<<7);
00167                         break;
00168                     case(8):
00169                         parse_BRAKES();
00170                         rx_flag = rx_flag ^ (1<<8);
00171                         break;
00172                     // for each new id add new case statement
00173                     
00174                 }
00175             }
00176         }
00177 
00178     }
00179 };
00180 
00181 void parse_DTA1(){
00182     rpm=(msgDTA1.data[1]<<8) | msgDTA1.data[0];
00183     tps=(msgDTA1.data[3]<<8) | msgDTA1.data[2];
00184     waterTemp=(msgDTA1.data[5]<<8) | msgDTA1.data[4];
00185     airTemp=(msgDTA1.data[7]<<8) | msgDTA1.data[6];
00186     lcd.DisplayStringAt(0,0,(uint8_t*)"DTA1",LEFT_MODE);
00187     printf("rpm=%x%x, tps=%x%x, waterTemp=%x%x, airTemp=%x%x\n",msgDTA1.data[1],msgDTA1.data[0],msgDTA1.data[3],msgDTA1.data[2],msgDTA1.data[5],msgDTA1.data[4],msgDTA1.data[7],msgDTA1.data[6]);
00188 };
00189 
00190 void parse_DTA2(){
00191     printf("DTA2\n");
00192 };
00193 
00194 void parse_DTA3(){
00195     oilTemp=(msgDTA3[3]<<8) | msgDTA3[2];
00196     Volts=(msgDTA3[5]<<8) | msgDTA3[4];
00197     lcd.DisplayStringAt(0,0,(uint8_t*)"DTA3",LEFT_MODE);
00198     printf("oilTemp=%d, Volts=%d\n",oilTemp,Volts);
00199 };
00200 
00201 void parse_DTA4(){
00202     printf("DTA4\n");
00203 };
00204 
00205 void parse_DTA5(){
00206     printf("DTA5\n");
00207 };
00208 
00209 void parse_DTA6(){
00210     printf("DTA6\n");
00211 };
00212 
00213 void parse_LVDTFRONT(){
00214     // add function which parses the received data
00215 };
00216 
00217 void parse_LVDTREAR(){
00218     // add function which parses the received data
00219 };
00220 
00221 void parse_BRAKES(){
00222     // add function which parses the received data
00223 };
00224 
00225 
00226