sdf
Fork of IntegrationCANajnovije by
CAN_library.cpp@6:f646d685b613, 2018-06-24 (annotated)
- Committer:
- nemanja1994
- Date:
- Sun Jun 24 15:50:52 2018 +0000
- Revision:
- 6:f646d685b613
- Parent:
- 5:53d7dbb8503c
Novo;
Who changed what in which revision?
User | Revision | Line number | New 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 | }; |