gg

Fork of IntegrationCAN-novo by Nenad Djalovic

Committer:
Tafkal
Date:
Sun Jun 17 11:58:03 2018 +0000
Revision:
3:c9a444d3fe1b
Parent:
2:884c10989f0d
Child:
4:c648a8c57106
Lol;

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;
Tafkal 3:c9a444d3fe1b 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;
formulas 0:38c3afd99aeb 9 extern uint16_t Rpm0, Speed0, Gear0, Water_Temp0, Oil_Temp0, TPS0, Brakes0, Oil_P0, MAP0, Air_Temp0, Lambda0, Volts0, Crank0;
formulas 0:38c3afd99aeb 10 extern uint16_t Rpm, Speed, Gear, Water_Temp, Oil_Temp, TPS, Brakes, Oil_P, MAP, Air_Temp, Lambda, Volts, Crank;
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 0:38c3afd99aeb 13 int LVDT_Max=150;
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 0:38c3afd99aeb 18 //pc.printf("%x\n",tmpMsg.id);
formulas 0:38c3afd99aeb 19 switch(tmpMsg.id){ //Find which DTA message is received
formulas 0:38c3afd99aeb 20 case(0):
formulas 0:38c3afd99aeb 21 rx_flag|=(1<<0);
formulas 0:38c3afd99aeb 22 msgDTA1=tmpMsg;
formulas 0:38c3afd99aeb 23 break;
formulas 0:38c3afd99aeb 24 case(1):
formulas 0:38c3afd99aeb 25 rx_flag|=(1<<1);
formulas 0:38c3afd99aeb 26 msgDTA2=tmpMsg;
formulas 0:38c3afd99aeb 27 //pc.printf("rx_flag=%x\n",rx_flag);
formulas 0:38c3afd99aeb 28 break;
formulas 0:38c3afd99aeb 29 case(2):
formulas 0:38c3afd99aeb 30 rx_flag|=(1<<2);
formulas 0:38c3afd99aeb 31 msgDTA3=tmpMsg;
formulas 0:38c3afd99aeb 32 break;
formulas 0:38c3afd99aeb 33 case(3):
formulas 0:38c3afd99aeb 34 rx_flag|=(1<<3);
formulas 0:38c3afd99aeb 35 msgDTA4=tmpMsg;
formulas 0:38c3afd99aeb 36 break;
formulas 0:38c3afd99aeb 37 case(4):
formulas 0:38c3afd99aeb 38 rx_flag|=(1<<4);
formulas 0:38c3afd99aeb 39 msgDTA5=tmpMsg;
formulas 0:38c3afd99aeb 40 break;
formulas 0:38c3afd99aeb 41 case(5):
formulas 0:38c3afd99aeb 42 rx_flag|=(1<<5);
formulas 0:38c3afd99aeb 43 msgDTA6=tmpMsg;
formulas 0:38c3afd99aeb 44 break;
formulas 0:38c3afd99aeb 45 case(6):
formulas 0:38c3afd99aeb 46 rx_flag|=(1<<6);
formulas 0:38c3afd99aeb 47 msgLVDTFront=tmpMsg;
formulas 0:38c3afd99aeb 48 break;
formulas 0:38c3afd99aeb 49 case(7):
formulas 0:38c3afd99aeb 50 rx_flag|=(1<<7);
formulas 0:38c3afd99aeb 51 msgLVDTRear=tmpMsg;
formulas 0:38c3afd99aeb 52 break;
formulas 0:38c3afd99aeb 53 case(8):
formulas 0:38c3afd99aeb 54 rx_flag|=(1<<8);
formulas 0:38c3afd99aeb 55 msgBrakes=tmpMsg;
formulas 0:38c3afd99aeb 56 break;
Tafkal 3:c9a444d3fe1b 57 case(9):
Tafkal 3:c9a444d3fe1b 58 rx_flag|=(1<<9);
Tafkal 3:c9a444d3fe1b 59 msgKm=tmpMsg;
Tafkal 3:c9a444d3fe1b 60 break;
formulas 0:38c3afd99aeb 61 };
formulas 0:38c3afd99aeb 62 //pc.printf("rx_flag=%d\n",rx_flag);
formulas 0:38c3afd99aeb 63 };
formulas 0:38c3afd99aeb 64 };
formulas 0:38c3afd99aeb 65
formulas 0:38c3afd99aeb 66 void UpdateInfo(){ // Update info for DTA values
formulas 0:38c3afd99aeb 67 int noID=9;
formulas 0:38c3afd99aeb 68 uint16_t *newData;
formulas 0:38c3afd99aeb 69 for (int i=0;i<noID;i++){ //For loop goes trough Message IDs
formulas 0:38c3afd99aeb 70 uint16_t flagBit;
formulas 0:38c3afd99aeb 71 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 72 if (flagBit) { // =/=0, there is a message, =0, there is no message
formulas 0:38c3afd99aeb 73 switch(i){
formulas 0:38c3afd99aeb 74 case(0):
formulas 0:38c3afd99aeb 75 newData=AllocData(msgDTA1); //Allocate message to a receiver
formulas 0:38c3afd99aeb 76 UpdateInfoDTA1(newData); //Update variables
formulas 0:38c3afd99aeb 77 rx_flag = rx_flag ^ (1<<0); //Set flag of adequate bit to 0
formulas 0:38c3afd99aeb 78 break;
formulas 0:38c3afd99aeb 79 case(1):
formulas 0:38c3afd99aeb 80 newData=AllocData(msgDTA2);
formulas 0:38c3afd99aeb 81 UpdateInfoDTA2(newData);
formulas 0:38c3afd99aeb 82 rx_flag = rx_flag ^ (1<<1);
formulas 0:38c3afd99aeb 83 break;
formulas 0:38c3afd99aeb 84 case(2):
formulas 0:38c3afd99aeb 85 newData=AllocData(msgDTA3);
formulas 0:38c3afd99aeb 86 UpdateInfoDTA3(newData);
formulas 0:38c3afd99aeb 87 rx_flag = rx_flag ^ (1<<2);
formulas 0:38c3afd99aeb 88 break;
formulas 0:38c3afd99aeb 89 case(3):
formulas 0:38c3afd99aeb 90 newData=AllocData(msgDTA4);
formulas 0:38c3afd99aeb 91 UpdateInfoDTA4(newData);
formulas 0:38c3afd99aeb 92 rx_flag = rx_flag ^ (1<<3);
formulas 0:38c3afd99aeb 93 break;
formulas 0:38c3afd99aeb 94 case(4):
formulas 0:38c3afd99aeb 95 newData=AllocData(msgDTA5);
formulas 0:38c3afd99aeb 96 UpdateInfoDTA5(newData);
formulas 0:38c3afd99aeb 97 rx_flag = rx_flag ^ (1<<4);
formulas 0:38c3afd99aeb 98 break;
formulas 0:38c3afd99aeb 99 case(5):
formulas 0:38c3afd99aeb 100 newData=AllocData(msgDTA6);
formulas 0:38c3afd99aeb 101 UpdateInfoDTA6(newData);
formulas 0:38c3afd99aeb 102 rx_flag = rx_flag ^ (1<<5);
formulas 0:38c3afd99aeb 103 break;
formulas 0:38c3afd99aeb 104 case(6):
formulas 0:38c3afd99aeb 105 newData=AllocData(msgLVDTFront);
formulas 0:38c3afd99aeb 106 UpdateInfoLVDTFront(newData);
formulas 0:38c3afd99aeb 107 rx_flag = rx_flag ^ (1<<6);
formulas 0:38c3afd99aeb 108 break;
formulas 0:38c3afd99aeb 109 case(7):
formulas 0:38c3afd99aeb 110 newData=AllocData(msgLVDTRear);
formulas 0:38c3afd99aeb 111 UpdateInfoLVDTRear(newData);
formulas 0:38c3afd99aeb 112 rx_flag = rx_flag ^ (1<<7);
formulas 0:38c3afd99aeb 113 break;
formulas 0:38c3afd99aeb 114 case(8):
formulas 0:38c3afd99aeb 115 newData=AllocData(msgBrakes);
formulas 0:38c3afd99aeb 116 UpdateInfoBrakes(newData);
formulas 0:38c3afd99aeb 117 rx_flag = rx_flag ^ (1<<8);
formulas 0:38c3afd99aeb 118 break;
Tafkal 3:c9a444d3fe1b 119 //TODO: Resiti primanje KM
formulas 0:38c3afd99aeb 120 // for each new id add new case statement
formulas 0:38c3afd99aeb 121 };
formulas 0:38c3afd99aeb 122 };
formulas 0:38c3afd99aeb 123 };
formulas 0:38c3afd99aeb 124 };
formulas 0:38c3afd99aeb 125
formulas 0:38c3afd99aeb 126 uint16_t * AllocData(CANMessage msg){ //Unpack CAN message
formulas 0:38c3afd99aeb 127 uint16_t newData[4];
formulas 0:38c3afd99aeb 128 newData[0]=(msg.data[1]<<8) | msg.data[0];
formulas 0:38c3afd99aeb 129 newData[1]=(msg.data[3]<<8) | msg.data[2];
formulas 0:38c3afd99aeb 130 newData[2]=(msg.data[5]<<8) | msg.data[4];
formulas 0:38c3afd99aeb 131 newData[3]=(msg.data[7]<<8) | msg.data[6];
formulas 0:38c3afd99aeb 132 return newData;
formulas 0:38c3afd99aeb 133 };
formulas 0:38c3afd99aeb 134
formulas 0:38c3afd99aeb 135 void UpdateInfoDTA1(uint16_t newData[4]){ //Update values for DTA1 message
formulas 0:38c3afd99aeb 136 Rpm0=Rpm;
formulas 0:38c3afd99aeb 137 Rpm=newData[0];
formulas 0:38c3afd99aeb 138 TPS0=TPS;
formulas 0:38c3afd99aeb 139 TPS=newData[1];
formulas 0:38c3afd99aeb 140 Water_Temp0=Water_Temp;
formulas 0:38c3afd99aeb 141 Water_Temp=newData[2];
formulas 0:38c3afd99aeb 142 Air_Temp0=Air_Temp;
formulas 0:38c3afd99aeb 143 Air_Temp=newData[3];
formulas 0:38c3afd99aeb 144 };
formulas 0:38c3afd99aeb 145
formulas 0:38c3afd99aeb 146 void UpdateInfoDTA2(uint16_t newData[4]){ //Update values for DTA2 message
formulas 0:38c3afd99aeb 147 MAP0=MAP;
formulas 0:38c3afd99aeb 148 MAP=newData[0];
formulas 0:38c3afd99aeb 149 Lambda0=Lambda;
formulas 0:38c3afd99aeb 150 Lambda=newData[1];
formulas 0:38c3afd99aeb 151 Speed0=Speed;
formulas 0:38c3afd99aeb 152 Speed=newData[2];
formulas 0:38c3afd99aeb 153 Oil_P0=Oil_P;
formulas 0:38c3afd99aeb 154 Oil_P=newData[3];
formulas 0:38c3afd99aeb 155 //pc.printf("MAP=%d, Lambda=%d, Speed=%d, Oil_P=%d\n",MAP,Lambda,Speed,Oil_P);
formulas 0:38c3afd99aeb 156 };
formulas 0:38c3afd99aeb 157
formulas 0:38c3afd99aeb 158 void UpdateInfoDTA3(uint16_t newData[4]){ //Update values for DTA3 message
formulas 0:38c3afd99aeb 159 Oil_Temp0=Oil_Temp;
formulas 0:38c3afd99aeb 160 Oil_Temp=newData[1];
formulas 0:38c3afd99aeb 161 Volts0=Volts;
formulas 0:38c3afd99aeb 162 Volts=newData[2];
formulas 0:38c3afd99aeb 163 };
formulas 0:38c3afd99aeb 164
formulas 0:38c3afd99aeb 165 void UpdateInfoDTA4(uint16_t newData[4]){ //Update values for DTA4 message
formulas 0:38c3afd99aeb 166 Gear0=Gear;
formulas 0:38c3afd99aeb 167 Gear=newData[0];
formulas 0:38c3afd99aeb 168 };
formulas 0:38c3afd99aeb 169
formulas 0:38c3afd99aeb 170 void UpdateInfoDTA5(uint16_t newData[4]){ //Update values for DTA5 message
formulas 0:38c3afd99aeb 171 };
formulas 0:38c3afd99aeb 172
formulas 0:38c3afd99aeb 173 void UpdateInfoDTA6(uint16_t newData[4]){ //Update values for DTA6 message
formulas 0:38c3afd99aeb 174 Crank0=Crank;
formulas 0:38c3afd99aeb 175 Crank=newData[2];
formulas 0:38c3afd99aeb 176 };
formulas 0:38c3afd99aeb 177
formulas 0:38c3afd99aeb 178 void UpdateInfoLVDTFront(uint16_t newData[4]){ //Update values for LVDTFront message
formulas 0:38c3afd99aeb 179 FL_LVDT0=FL_LVDT; //LVDTs are firstly written their voltage value, then overwritten by calculated pertentage value.
formulas 0:38c3afd99aeb 180 FL_LVDT=newData[0];
formulas 0:38c3afd99aeb 181 FR_LVDT0=FR_LVDT;
formulas 0:38c3afd99aeb 182 FR_LVDT=newData[1];
formulas 0:38c3afd99aeb 183 if(!(lvdtref & (1<<3))){ //Check if its the first time LVDT value is received. If yes than store it as Referrent value.
formulas 0:38c3afd99aeb 184 if (FL_LVDT>FL_LVDT_Ref){
formulas 0:38c3afd99aeb 185 FL_LVDT=(FL_LVDT-FL_LVDT_Ref)*100/(LVDT_Max-FL_LVDT_Ref);
formulas 0:38c3afd99aeb 186 }else{
formulas 0:38c3afd99aeb 187 FL_LVDT=(FL_LVDT-FL_LVDT_Ref)*100/FL_LVDT_Ref;
formulas 0:38c3afd99aeb 188 };
Tafkal 3:c9a444d3fe1b 189 //pc.printf("Im in 1\n");
formulas 0:38c3afd99aeb 190 }else{
formulas 0:38c3afd99aeb 191 FL_LVDT_Ref=FL_LVDT;
formulas 0:38c3afd99aeb 192 FL_LVDT=0;
formulas 0:38c3afd99aeb 193 lvdtref=lvdtref^(1<<3);
Tafkal 3:c9a444d3fe1b 194 //pc.printf("Ref=%d\n",FL_LVDT_Ref);
formulas 0:38c3afd99aeb 195 };
Tafkal 3:c9a444d3fe1b 196 //pc.printf("FL_LVDT=%d, FL_LVDT0=%d\n",abs(FL_LVDT),abs(FL_LVDT0));
Tafkal 3:c9a444d3fe1b 197 //pc.printf("FR_LVDT=%d, FR_LVDT0=%d\n",abs(FR_LVDT),abs(FR_LVDT0));
formulas 0:38c3afd99aeb 198
formulas 0:38c3afd99aeb 199 if(!(lvdtref & (1<<2))){
formulas 0:38c3afd99aeb 200 if (FR_LVDT>FR_LVDT_Ref){
formulas 0:38c3afd99aeb 201 FR_LVDT=(FR_LVDT-FR_LVDT_Ref)*100/(LVDT_Max-FR_LVDT_Ref);
formulas 0:38c3afd99aeb 202 }else{
formulas 0:38c3afd99aeb 203 FR_LVDT=(FR_LVDT-FR_LVDT_Ref)*100/FR_LVDT_Ref;
formulas 0:38c3afd99aeb 204 };
formulas 0:38c3afd99aeb 205 }else{
formulas 0:38c3afd99aeb 206 FR_LVDT_Ref=FR_LVDT;
formulas 0:38c3afd99aeb 207 FR_LVDT=0;
formulas 0:38c3afd99aeb 208 lvdtref=lvdtref^(1<<2);
formulas 0:38c3afd99aeb 209 };
formulas 0:38c3afd99aeb 210 //printf("FL_Ref=%d, FR_Ref=%d, RL_Ref=%d, RR_Ref=%d\n",FL_LVDT_Dpos,FR_LVDT_Dpos,RL_LVDT_Dpos,RR_LVDT_Dpos);
formulas 0:38c3afd99aeb 211 };
formulas 0:38c3afd99aeb 212
formulas 0:38c3afd99aeb 213 void UpdateInfoLVDTRear(uint16_t newData[4]){ //Update values for LVDTRear message
formulas 0:38c3afd99aeb 214 RL_LVDT0=RL_LVDT;
formulas 0:38c3afd99aeb 215 RL_LVDT=newData[0];
formulas 0:38c3afd99aeb 216 RR_LVDT0=RR_LVDT;
formulas 0:38c3afd99aeb 217 RR_LVDT=newData[1];
formulas 0:38c3afd99aeb 218 if(!(lvdtref & (1<<1))){
formulas 0:38c3afd99aeb 219 if (RL_LVDT>RL_LVDT_Ref){
formulas 0:38c3afd99aeb 220 RL_LVDT=(RL_LVDT-RL_LVDT_Ref)*100/(LVDT_Max-RL_LVDT_Ref);
formulas 0:38c3afd99aeb 221 }else{
formulas 0:38c3afd99aeb 222 RL_LVDT=(RL_LVDT-RL_LVDT_Ref)*100/RL_LVDT_Ref;
formulas 0:38c3afd99aeb 223 };
formulas 0:38c3afd99aeb 224 }else{
formulas 0:38c3afd99aeb 225 RL_LVDT_Ref=RL_LVDT;
formulas 0:38c3afd99aeb 226 RL_LVDT=0;
formulas 0:38c3afd99aeb 227 lvdtref=lvdtref^(1<<1);
formulas 0:38c3afd99aeb 228 };
formulas 0:38c3afd99aeb 229
formulas 0:38c3afd99aeb 230 if(!(lvdtref & (1<<0))){
formulas 0:38c3afd99aeb 231 if (RR_LVDT>RR_LVDT_Ref){
formulas 0:38c3afd99aeb 232 RR_LVDT=(RR_LVDT-RR_LVDT_Ref)*100/(LVDT_Max-RR_LVDT_Ref);
formulas 0:38c3afd99aeb 233 }else{
formulas 0:38c3afd99aeb 234 RR_LVDT=(RR_LVDT-RR_LVDT_Ref)*100/RR_LVDT_Ref;
formulas 0:38c3afd99aeb 235 };
formulas 0:38c3afd99aeb 236 }else{
formulas 0:38c3afd99aeb 237 RR_LVDT_Ref=RR_LVDT;
formulas 0:38c3afd99aeb 238 RR_LVDT=0;
formulas 0:38c3afd99aeb 239 lvdtref=lvdtref^(1<<0);
formulas 0:38c3afd99aeb 240 };
Tafkal 3:c9a444d3fe1b 241 //pc.printf("RL_LVDT=%d, RL_LVDT0=%d\n",abs(RL_LVDT),abs(RL_LVDT0));
Tafkal 3:c9a444d3fe1b 242 //pc.printf("RR_LVDT=%d, RR_LVDT0=%d\n",abs(RR_LVDT),abs(RR_LVDT0));
formulas 0:38c3afd99aeb 243
formulas 0:38c3afd99aeb 244 };
formulas 0:38c3afd99aeb 245
formulas 0:38c3afd99aeb 246 void UpdateInfoBrakes(uint16_t newData[4]){ //Update values for Brakes message
formulas 0:38c3afd99aeb 247 Brakes0=Brakes;
formulas 0:38c3afd99aeb 248 Brakes=newData[0];
formulas 0:38c3afd99aeb 249 };