sdf

Fork of IntegrationCANajnovije by Nenad Djalovic

Committer:
nemanja1994
Date:
Sun Jun 24 15:50:52 2018 +0000
Revision:
6:f646d685b613
Parent:
5:53d7dbb8503c
Novo;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
formulas 0:38c3afd99aeb 1 #include "CAN_library.h"
formulas 0:38c3afd99aeb 2
formulas 0:38c3afd99aeb 3 extern CAN can;
formulas 4:c648a8c57106 4 extern Serial pc;
Tafkal 3:c9a444d3fe1b 5 extern CANMessage msgDTA1, msgDTA2, msgDTA3, msgDTA4, msgDTA5, msgDTA6, msgLVDTFront, msgLVDTRear, msgBrakes, msgKm;
formulas 0:38c3afd99aeb 6 extern uint16_t rx_flag;
formulas 0:38c3afd99aeb 7 extern uint8_t lvdtref;
Tafkal 2:884c10989f0d 8 extern Serial tRF;
nemanja1994 6:f646d685b613 9 extern uint16_t Steer0, Rpm0, Speed0, Gear0, Water_Temp0, Oil_Temp0, TPS0, Brakes0, Oil_P0, MAP0, Air_Temp0, Lambda0, Volts0, Crank0, BF_Oil_P0, BR_Oil_P0;
nemanja1994 6:f646d685b613 10 extern uint16_t Steer, Rpm, Speed, Gear, Water_Temp, Oil_Temp, TPS, Brakes, Oil_P, MAP, Air_Temp, Lambda, Volts, Crank, BF_Oil_P, BR_Oil_P;
formulas 0:38c3afd99aeb 11 extern int FL_LVDT0, FR_LVDT0, RL_LVDT0, RR_LVDT0, FL_LVDT, FR_LVDT, RL_LVDT, RR_LVDT;
formulas 0:38c3afd99aeb 12 extern int FL_LVDT_Ref,FR_LVDT_Ref,RL_LVDT_Ref,RR_LVDT_Ref;
formulas 5:53d7dbb8503c 13 int LVDT_Max=1024;
formulas 0:38c3afd99aeb 14
formulas 0:38c3afd99aeb 15 void CANMsgReceive(){ // CAN RX Interrupt Function
formulas 0:38c3afd99aeb 16 CANMessage tmpMsg;
formulas 0:38c3afd99aeb 17 if (can.read(tmpMsg)) { //Detect message
formulas 5:53d7dbb8503c 18 //pc.printf("%x\n",tmpMsg.id);
formulas 5:53d7dbb8503c 19 //tRF.printf("S%x%x\n",tmpMsg.id,tmpMsg.data);
formulas 0:38c3afd99aeb 20 switch(tmpMsg.id){ //Find which DTA message is received
formulas 4:c648a8c57106 21 case(0x2000):
formulas 0:38c3afd99aeb 22 rx_flag|=(1<<0);
formulas 0:38c3afd99aeb 23 msgDTA1=tmpMsg;
formulas 5:53d7dbb8503c 24 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
formulas 0:38c3afd99aeb 25 break;
formulas 4:c648a8c57106 26 case(0x2001):
formulas 0:38c3afd99aeb 27 rx_flag|=(1<<1);
formulas 0:38c3afd99aeb 28 msgDTA2=tmpMsg;
formulas 5:53d7dbb8503c 29 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
formulas 0:38c3afd99aeb 30 //pc.printf("rx_flag=%x\n",rx_flag);
formulas 0:38c3afd99aeb 31 break;
formulas 4:c648a8c57106 32 case(0x2002):
formulas 0:38c3afd99aeb 33 rx_flag|=(1<<2);
formulas 0:38c3afd99aeb 34 msgDTA3=tmpMsg;
formulas 5:53d7dbb8503c 35 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
formulas 0:38c3afd99aeb 36 break;
formulas 4:c648a8c57106 37 case(0x2003):
formulas 0:38c3afd99aeb 38 rx_flag|=(1<<3);
formulas 0:38c3afd99aeb 39 msgDTA4=tmpMsg;
formulas 5:53d7dbb8503c 40 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
formulas 0:38c3afd99aeb 41 break;
formulas 4:c648a8c57106 42 case(0x2004):
formulas 0:38c3afd99aeb 43 rx_flag|=(1<<4);
formulas 0:38c3afd99aeb 44 msgDTA5=tmpMsg;
formulas 5:53d7dbb8503c 45 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
formulas 0:38c3afd99aeb 46 break;
formulas 4:c648a8c57106 47 case(0x2005):
formulas 0:38c3afd99aeb 48 rx_flag|=(1<<5);
formulas 0:38c3afd99aeb 49 msgDTA6=tmpMsg;
formulas 5:53d7dbb8503c 50 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
formulas 0:38c3afd99aeb 51 break;
formulas 5:53d7dbb8503c 52 case(0x1006):
formulas 0:38c3afd99aeb 53 rx_flag|=(1<<6);
formulas 0:38c3afd99aeb 54 msgLVDTFront=tmpMsg;
formulas 5:53d7dbb8503c 55 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
formulas 0:38c3afd99aeb 56 break;
formulas 5:53d7dbb8503c 57 case(0x1007):
formulas 0:38c3afd99aeb 58 rx_flag|=(1<<7);
formulas 0:38c3afd99aeb 59 msgLVDTRear=tmpMsg;
formulas 5:53d7dbb8503c 60 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
formulas 0:38c3afd99aeb 61 break;
formulas 5:53d7dbb8503c 62 case(0x1008):
formulas 0:38c3afd99aeb 63 rx_flag|=(1<<8);
formulas 0:38c3afd99aeb 64 msgBrakes=tmpMsg;
formulas 5:53d7dbb8503c 65 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
formulas 0:38c3afd99aeb 66 break;
formulas 5:53d7dbb8503c 67 case(0x1009):
Tafkal 3:c9a444d3fe1b 68 rx_flag|=(1<<9);
Tafkal 3:c9a444d3fe1b 69 msgKm=tmpMsg;
formulas 5:53d7dbb8503c 70 //tRF.printf("S%x%x\n", tmpMsg.id, tmpMsg.data);
Tafkal 3:c9a444d3fe1b 71 break;
formulas 0:38c3afd99aeb 72 };
formulas 0:38c3afd99aeb 73 //pc.printf("rx_flag=%d\n",rx_flag);
formulas 0:38c3afd99aeb 74 };
formulas 0:38c3afd99aeb 75 };
formulas 0:38c3afd99aeb 76
formulas 0:38c3afd99aeb 77 void UpdateInfo(){ // Update info for DTA values
nemanja1994 6:f646d685b613 78 //pc.printf("Im in UpdateInfo\n");
formulas 0:38c3afd99aeb 79 int noID=9;
formulas 0:38c3afd99aeb 80 uint16_t *newData;
formulas 0:38c3afd99aeb 81 for (int i=0;i<noID;i++){ //For loop goes trough Message IDs
formulas 0:38c3afd99aeb 82 uint16_t flagBit;
formulas 0:38c3afd99aeb 83 flagBit = rx_flag & (1<<i); //Set flag bit for adequate message. If there is a message waiting to be stored, flagBit will be different than 0.
formulas 0:38c3afd99aeb 84 if (flagBit) { // =/=0, there is a message, =0, there is no message
formulas 0:38c3afd99aeb 85 switch(i){
formulas 0:38c3afd99aeb 86 case(0):
formulas 0:38c3afd99aeb 87 newData=AllocData(msgDTA1); //Allocate message to a receiver
formulas 0:38c3afd99aeb 88 UpdateInfoDTA1(newData); //Update variables
formulas 0:38c3afd99aeb 89 rx_flag = rx_flag ^ (1<<0); //Set flag of adequate bit to 0
formulas 0:38c3afd99aeb 90 break;
formulas 0:38c3afd99aeb 91 case(1):
formulas 0:38c3afd99aeb 92 newData=AllocData(msgDTA2);
formulas 0:38c3afd99aeb 93 UpdateInfoDTA2(newData);
formulas 0:38c3afd99aeb 94 rx_flag = rx_flag ^ (1<<1);
formulas 0:38c3afd99aeb 95 break;
formulas 0:38c3afd99aeb 96 case(2):
formulas 0:38c3afd99aeb 97 newData=AllocData(msgDTA3);
formulas 0:38c3afd99aeb 98 UpdateInfoDTA3(newData);
formulas 0:38c3afd99aeb 99 rx_flag = rx_flag ^ (1<<2);
formulas 0:38c3afd99aeb 100 break;
formulas 0:38c3afd99aeb 101 case(3):
formulas 0:38c3afd99aeb 102 newData=AllocData(msgDTA4);
formulas 0:38c3afd99aeb 103 UpdateInfoDTA4(newData);
formulas 0:38c3afd99aeb 104 rx_flag = rx_flag ^ (1<<3);
formulas 0:38c3afd99aeb 105 break;
formulas 0:38c3afd99aeb 106 case(4):
formulas 0:38c3afd99aeb 107 newData=AllocData(msgDTA5);
formulas 0:38c3afd99aeb 108 UpdateInfoDTA5(newData);
formulas 0:38c3afd99aeb 109 rx_flag = rx_flag ^ (1<<4);
formulas 0:38c3afd99aeb 110 break;
formulas 0:38c3afd99aeb 111 case(5):
formulas 0:38c3afd99aeb 112 newData=AllocData(msgDTA6);
formulas 0:38c3afd99aeb 113 UpdateInfoDTA6(newData);
formulas 0:38c3afd99aeb 114 rx_flag = rx_flag ^ (1<<5);
formulas 0:38c3afd99aeb 115 break;
formulas 0:38c3afd99aeb 116 case(6):
formulas 0:38c3afd99aeb 117 newData=AllocData(msgLVDTFront);
formulas 0:38c3afd99aeb 118 UpdateInfoLVDTFront(newData);
formulas 0:38c3afd99aeb 119 rx_flag = rx_flag ^ (1<<6);
formulas 0:38c3afd99aeb 120 break;
formulas 0:38c3afd99aeb 121 case(7):
formulas 0:38c3afd99aeb 122 newData=AllocData(msgLVDTRear);
formulas 0:38c3afd99aeb 123 UpdateInfoLVDTRear(newData);
formulas 0:38c3afd99aeb 124 rx_flag = rx_flag ^ (1<<7);
formulas 0:38c3afd99aeb 125 break;
formulas 0:38c3afd99aeb 126 case(8):
formulas 0:38c3afd99aeb 127 newData=AllocData(msgBrakes);
formulas 0:38c3afd99aeb 128 UpdateInfoBrakes(newData);
formulas 0:38c3afd99aeb 129 rx_flag = rx_flag ^ (1<<8);
formulas 0:38c3afd99aeb 130 break;
Tafkal 3:c9a444d3fe1b 131 //TODO: Resiti primanje KM
formulas 0:38c3afd99aeb 132 // for each new id add new case statement
formulas 0:38c3afd99aeb 133 };
formulas 0:38c3afd99aeb 134 };
formulas 0:38c3afd99aeb 135 };
formulas 0:38c3afd99aeb 136 };
formulas 0:38c3afd99aeb 137
formulas 0:38c3afd99aeb 138 uint16_t * AllocData(CANMessage msg){ //Unpack CAN message
formulas 0:38c3afd99aeb 139 uint16_t newData[4];
formulas 0:38c3afd99aeb 140 newData[0]=(msg.data[1]<<8) | msg.data[0];
formulas 0:38c3afd99aeb 141 newData[1]=(msg.data[3]<<8) | msg.data[2];
formulas 0:38c3afd99aeb 142 newData[2]=(msg.data[5]<<8) | msg.data[4];
formulas 0:38c3afd99aeb 143 newData[3]=(msg.data[7]<<8) | msg.data[6];
formulas 0:38c3afd99aeb 144 return newData;
formulas 0:38c3afd99aeb 145 };
formulas 0:38c3afd99aeb 146
formulas 0:38c3afd99aeb 147 void UpdateInfoDTA1(uint16_t newData[4]){ //Update values for DTA1 message
formulas 0:38c3afd99aeb 148 Rpm0=Rpm;
formulas 0:38c3afd99aeb 149 Rpm=newData[0];
formulas 0:38c3afd99aeb 150 TPS0=TPS;
formulas 0:38c3afd99aeb 151 TPS=newData[1];
formulas 0:38c3afd99aeb 152 Water_Temp0=Water_Temp;
formulas 0:38c3afd99aeb 153 Water_Temp=newData[2];
formulas 0:38c3afd99aeb 154 Air_Temp0=Air_Temp;
formulas 0:38c3afd99aeb 155 Air_Temp=newData[3];
nemanja1994 6:f646d685b613 156 //pc.printf("id=2000, Rpm= %d, TPS= %d, Water_temp= %d, Air_Temp= %d\n",Rpm,TPS,Water_Temp,Air_Temp);
formulas 0:38c3afd99aeb 157 };
formulas 0:38c3afd99aeb 158
formulas 0:38c3afd99aeb 159 void UpdateInfoDTA2(uint16_t newData[4]){ //Update values for DTA2 message
formulas 0:38c3afd99aeb 160 MAP0=MAP;
formulas 0:38c3afd99aeb 161 MAP=newData[0];
formulas 0:38c3afd99aeb 162 Lambda0=Lambda;
formulas 0:38c3afd99aeb 163 Lambda=newData[1];
formulas 0:38c3afd99aeb 164 Speed0=Speed;
formulas 0:38c3afd99aeb 165 Speed=newData[2];
formulas 0:38c3afd99aeb 166 Oil_P0=Oil_P;
formulas 0:38c3afd99aeb 167 Oil_P=newData[3];
nemanja1994 6:f646d685b613 168 //pc.printf("id=2001, MAP= %d, Lambda= %d, Speed= %d, Oil_P= %d\n",MAP,Lambda,Speed,Oil_P);
formulas 0:38c3afd99aeb 169 //pc.printf("MAP=%d, Lambda=%d, Speed=%d, Oil_P=%d\n",MAP,Lambda,Speed,Oil_P);
formulas 0:38c3afd99aeb 170 };
formulas 0:38c3afd99aeb 171
formulas 0:38c3afd99aeb 172 void UpdateInfoDTA3(uint16_t newData[4]){ //Update values for DTA3 message
formulas 0:38c3afd99aeb 173 Oil_Temp0=Oil_Temp;
formulas 0:38c3afd99aeb 174 Oil_Temp=newData[1];
formulas 0:38c3afd99aeb 175 Volts0=Volts;
formulas 0:38c3afd99aeb 176 Volts=newData[2];
nemanja1994 6:f646d685b613 177 //pc.printf("id=2002, Oil_Temp= %d, Volts= %d\n",Oil_Temp,Volts);
formulas 0:38c3afd99aeb 178 };
formulas 0:38c3afd99aeb 179
formulas 0:38c3afd99aeb 180 void UpdateInfoDTA4(uint16_t newData[4]){ //Update values for DTA4 message
formulas 0:38c3afd99aeb 181 Gear0=Gear;
formulas 0:38c3afd99aeb 182 Gear=newData[0];
nemanja1994 6:f646d685b613 183 //pc.printf("id=2003, Gear= %d\n",Gear);
formulas 0:38c3afd99aeb 184 };
formulas 0:38c3afd99aeb 185
formulas 0:38c3afd99aeb 186 void UpdateInfoDTA5(uint16_t newData[4]){ //Update values for DTA5 message
formulas 0:38c3afd99aeb 187 };
formulas 0:38c3afd99aeb 188
formulas 0:38c3afd99aeb 189 void UpdateInfoDTA6(uint16_t newData[4]){ //Update values for DTA6 message
formulas 0:38c3afd99aeb 190 Crank0=Crank;
formulas 0:38c3afd99aeb 191 Crank=newData[2];
nemanja1994 6:f646d685b613 192 // pc.printf("id=2005, Crank\n",Crank);
formulas 0:38c3afd99aeb 193 };
formulas 0:38c3afd99aeb 194
formulas 0:38c3afd99aeb 195 void UpdateInfoLVDTFront(uint16_t newData[4]){ //Update values for LVDTFront message
formulas 0:38c3afd99aeb 196 FL_LVDT0=FL_LVDT; //LVDTs are firstly written their voltage value, then overwritten by calculated pertentage value.
formulas 0:38c3afd99aeb 197 FL_LVDT=newData[0];
formulas 0:38c3afd99aeb 198 FR_LVDT0=FR_LVDT;
formulas 0:38c3afd99aeb 199 FR_LVDT=newData[1];
nemanja1994 6:f646d685b613 200 Steer0=Steer;
nemanja1994 6:f646d685b613 201 Steer=newData[2];
nemanja1994 6:f646d685b613 202 pc.printf("FL_LVDT=%d, FR_LVDT=%d, Steer=%d\n",FL_LVDT,FR_LVDT,Steer);
formulas 0:38c3afd99aeb 203 };
formulas 0:38c3afd99aeb 204
formulas 0:38c3afd99aeb 205 void UpdateInfoLVDTRear(uint16_t newData[4]){ //Update values for LVDTRear message
formulas 0:38c3afd99aeb 206 RL_LVDT0=RL_LVDT;
formulas 0:38c3afd99aeb 207 RL_LVDT=newData[0];
formulas 0:38c3afd99aeb 208 RR_LVDT0=RR_LVDT;
formulas 0:38c3afd99aeb 209 RR_LVDT=newData[1];
nemanja1994 6:f646d685b613 210 //pc.printf("RL_LVDT=%d, RL_LVDT0=%d\n",RL_LVDT,RR_LVDT);
Tafkal 3:c9a444d3fe1b 211 //pc.printf("RR_LVDT=%d, RR_LVDT0=%d\n",abs(RR_LVDT),abs(RR_LVDT0));
formulas 0:38c3afd99aeb 212
formulas 0:38c3afd99aeb 213 };
formulas 0:38c3afd99aeb 214
formulas 0:38c3afd99aeb 215 void UpdateInfoBrakes(uint16_t newData[4]){ //Update values for Brakes message
formulas 5:53d7dbb8503c 216 BF_Oil_P0=BF_Oil_P;
formulas 5:53d7dbb8503c 217 BF_Oil_P=newData[0];
formulas 5:53d7dbb8503c 218 BR_Oil_P0=BR_Oil_P;
formulas 5:53d7dbb8503c 219 BR_Oil_P=newData[1];
formulas 0:38c3afd99aeb 220 Brakes0=Brakes;
formulas 5:53d7dbb8503c 221 Brakes=newData[2];
nemanja1994 6:f646d685b613 222 //pc.printf("BROILPF=%d, BROILPR=%d\n, BRAKING=%d",BF_Oil_P,BR_Oil_P,Brakes);
formulas 0:38c3afd99aeb 223 };