
15.02.2019. revision
Dependencies: mbed LCD_DISCO_F469NIa SD_DISCO_F469NI BSP_DISCO_F469NIa EEPROM_DISCO_F469NI
CAN_library.cpp@3:a06e417a5a2c, 2018-07-05 (annotated)
- Committer:
- nemanja1994
- Date:
- Thu Jul 05 20:18:32 2018 +0000
- Revision:
- 3:a06e417a5a2c
- Parent:
- 2:f54f01527ebb
- Child:
- 4:0e8413277df8
fhgj;
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 | 0:38c3afd99aeb | 4 | extern Serial pc; |
formulas | 2:f54f01527ebb | 5 | extern SD_DISCO_F469NI sd; |
formulas | 2:f54f01527ebb | 6 | //extern EEPROM_DISCO_F469NI eep; |
formulas | 2:f54f01527ebb | 7 | extern Timer t_int,t_store; |
formulas | 2:f54f01527ebb | 8 | extern CANMessage msgDTA1, msgDTA2, msgDTA3, msgDTA4, msgDTA5, msgDTA6, msgLVDTFront, msgLVDTRear, msgBrakes, msgDistance; |
formulas | 0:38c3afd99aeb | 9 | extern uint16_t rx_flag; |
formulas | 2:f54f01527ebb | 10 | extern uint8_t distance_flag; |
formulas | 0:38c3afd99aeb | 11 | extern uint8_t lvdtref; |
formulas | 0:38c3afd99aeb | 12 | |
formulas | 0:38c3afd99aeb | 13 | extern uint16_t Rpm0, Speed0, Gear0, Water_Temp0, Oil_Temp0, TPS0, Brakes0, Oil_P0, MAP0, Air_Temp0, Lambda0, Volts0, Crank0; |
formulas | 0:38c3afd99aeb | 14 | extern uint16_t Rpm, Speed, Gear, Water_Temp, Oil_Temp, TPS, Brakes, Oil_P, MAP, Air_Temp, Lambda, Volts, Crank; |
formulas | 0:38c3afd99aeb | 15 | extern int FL_LVDT0, FR_LVDT0, RL_LVDT0, RR_LVDT0, FL_LVDT, FR_LVDT, RL_LVDT, RR_LVDT; |
formulas | 0:38c3afd99aeb | 16 | extern int FL_LVDT_Ref,FR_LVDT_Ref,RL_LVDT_Ref,RR_LVDT_Ref; |
formulas | 0:38c3afd99aeb | 17 | int LVDT_Max=150; |
formulas | 2:f54f01527ebb | 18 | extern float Meter_counter,Meter_counter0; |
nemanja1994 | 3:a06e417a5a2c | 19 | extern char cmd[3]; |
nemanja1994 | 3:a06e417a5a2c | 20 | extern int addr; |
nemanja1994 | 3:a06e417a5a2c | 21 | extern I2C i2c; |
nemanja1994 | 3:a06e417a5a2c | 22 | |
nemanja1994 | 3:a06e417a5a2c | 23 | extern void showLedRpm(int rpm); |
nemanja1994 | 3:a06e417a5a2c | 24 | |
formulas | 0:38c3afd99aeb | 25 | |
formulas | 0:38c3afd99aeb | 26 | void CANMsgReceive(){ // CAN RX Interrupt Function |
formulas | 0:38c3afd99aeb | 27 | CANMessage tmpMsg; |
formulas | 0:38c3afd99aeb | 28 | if (can.read(tmpMsg)) { //Detect message |
formulas | 0:38c3afd99aeb | 29 | //pc.printf("%x\n",tmpMsg.id); |
formulas | 0:38c3afd99aeb | 30 | switch(tmpMsg.id){ //Find which DTA message is received |
nemanja1994 | 3:a06e417a5a2c | 31 | case(0x2000): |
formulas | 0:38c3afd99aeb | 32 | rx_flag|=(1<<0); |
formulas | 0:38c3afd99aeb | 33 | msgDTA1=tmpMsg; |
nemanja1994 | 3:a06e417a5a2c | 34 | //pc.printf("%x\n", tmpMsg.id); |
formulas | 0:38c3afd99aeb | 35 | break; |
nemanja1994 | 3:a06e417a5a2c | 36 | case(0x2001): |
formulas | 0:38c3afd99aeb | 37 | rx_flag|=(1<<1); |
formulas | 0:38c3afd99aeb | 38 | msgDTA2=tmpMsg; |
formulas | 0:38c3afd99aeb | 39 | //pc.printf("rx_flag=%x\n",rx_flag); |
formulas | 0:38c3afd99aeb | 40 | break; |
nemanja1994 | 3:a06e417a5a2c | 41 | case(0x2002): |
formulas | 0:38c3afd99aeb | 42 | rx_flag|=(1<<2); |
formulas | 0:38c3afd99aeb | 43 | msgDTA3=tmpMsg; |
formulas | 0:38c3afd99aeb | 44 | break; |
nemanja1994 | 3:a06e417a5a2c | 45 | case(0x2003): |
formulas | 0:38c3afd99aeb | 46 | rx_flag|=(1<<3); |
formulas | 0:38c3afd99aeb | 47 | msgDTA4=tmpMsg; |
formulas | 0:38c3afd99aeb | 48 | break; |
nemanja1994 | 3:a06e417a5a2c | 49 | case(0x2004): |
formulas | 0:38c3afd99aeb | 50 | rx_flag|=(1<<4); |
formulas | 0:38c3afd99aeb | 51 | msgDTA5=tmpMsg; |
formulas | 0:38c3afd99aeb | 52 | break; |
nemanja1994 | 3:a06e417a5a2c | 53 | case(0x2005): |
formulas | 0:38c3afd99aeb | 54 | rx_flag|=(1<<5); |
formulas | 0:38c3afd99aeb | 55 | msgDTA6=tmpMsg; |
formulas | 0:38c3afd99aeb | 56 | break; |
nemanja1994 | 3:a06e417a5a2c | 57 | case(0x1006): |
formulas | 0:38c3afd99aeb | 58 | rx_flag|=(1<<6); |
formulas | 0:38c3afd99aeb | 59 | msgLVDTFront=tmpMsg; |
formulas | 0:38c3afd99aeb | 60 | break; |
nemanja1994 | 3:a06e417a5a2c | 61 | case(0x1007): |
formulas | 0:38c3afd99aeb | 62 | rx_flag|=(1<<7); |
formulas | 0:38c3afd99aeb | 63 | msgLVDTRear=tmpMsg; |
formulas | 0:38c3afd99aeb | 64 | break; |
nemanja1994 | 3:a06e417a5a2c | 65 | case(0x1008): |
formulas | 0:38c3afd99aeb | 66 | rx_flag|=(1<<8); |
formulas | 0:38c3afd99aeb | 67 | msgBrakes=tmpMsg; |
formulas | 0:38c3afd99aeb | 68 | break; |
nemanja1994 | 3:a06e417a5a2c | 69 | case(0x1009): |
formulas | 2:f54f01527ebb | 70 | rx_flag|=(1<<9); |
formulas | 2:f54f01527ebb | 71 | msgDistance=tmpMsg; |
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 | 2:f54f01527ebb | 77 | void UpdateInfo(){ // Update info for received values |
formulas | 2:f54f01527ebb | 78 | int noID=10; |
formulas | 0:38c3afd99aeb | 79 | uint16_t *newData; |
formulas | 0:38c3afd99aeb | 80 | for (int i=0;i<noID;i++){ //For loop goes trough Message IDs |
formulas | 0:38c3afd99aeb | 81 | uint16_t flagBit; |
formulas | 0:38c3afd99aeb | 82 | 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 | 83 | if (flagBit) { // =/=0, there is a message, =0, there is no message |
formulas | 0:38c3afd99aeb | 84 | switch(i){ |
formulas | 0:38c3afd99aeb | 85 | case(0): |
formulas | 0:38c3afd99aeb | 86 | newData=AllocData(msgDTA1); //Allocate message to a receiver |
formulas | 0:38c3afd99aeb | 87 | UpdateInfoDTA1(newData); //Update variables |
formulas | 0:38c3afd99aeb | 88 | rx_flag = rx_flag ^ (1<<0); //Set flag of adequate bit to 0 |
formulas | 0:38c3afd99aeb | 89 | break; |
formulas | 0:38c3afd99aeb | 90 | case(1): |
formulas | 0:38c3afd99aeb | 91 | newData=AllocData(msgDTA2); |
formulas | 0:38c3afd99aeb | 92 | UpdateInfoDTA2(newData); |
formulas | 0:38c3afd99aeb | 93 | rx_flag = rx_flag ^ (1<<1); |
formulas | 0:38c3afd99aeb | 94 | break; |
formulas | 0:38c3afd99aeb | 95 | case(2): |
formulas | 0:38c3afd99aeb | 96 | newData=AllocData(msgDTA3); |
formulas | 0:38c3afd99aeb | 97 | UpdateInfoDTA3(newData); |
formulas | 0:38c3afd99aeb | 98 | rx_flag = rx_flag ^ (1<<2); |
formulas | 0:38c3afd99aeb | 99 | break; |
formulas | 0:38c3afd99aeb | 100 | case(3): |
formulas | 0:38c3afd99aeb | 101 | newData=AllocData(msgDTA4); |
formulas | 0:38c3afd99aeb | 102 | UpdateInfoDTA4(newData); |
formulas | 0:38c3afd99aeb | 103 | rx_flag = rx_flag ^ (1<<3); |
formulas | 0:38c3afd99aeb | 104 | break; |
formulas | 0:38c3afd99aeb | 105 | case(4): |
formulas | 0:38c3afd99aeb | 106 | newData=AllocData(msgDTA5); |
formulas | 0:38c3afd99aeb | 107 | UpdateInfoDTA5(newData); |
formulas | 0:38c3afd99aeb | 108 | rx_flag = rx_flag ^ (1<<4); |
formulas | 0:38c3afd99aeb | 109 | break; |
formulas | 0:38c3afd99aeb | 110 | case(5): |
formulas | 0:38c3afd99aeb | 111 | newData=AllocData(msgDTA6); |
formulas | 0:38c3afd99aeb | 112 | UpdateInfoDTA6(newData); |
formulas | 0:38c3afd99aeb | 113 | rx_flag = rx_flag ^ (1<<5); |
formulas | 0:38c3afd99aeb | 114 | break; |
formulas | 0:38c3afd99aeb | 115 | case(6): |
formulas | 0:38c3afd99aeb | 116 | newData=AllocData(msgLVDTFront); |
formulas | 0:38c3afd99aeb | 117 | UpdateInfoLVDTFront(newData); |
formulas | 0:38c3afd99aeb | 118 | rx_flag = rx_flag ^ (1<<6); |
formulas | 0:38c3afd99aeb | 119 | break; |
formulas | 0:38c3afd99aeb | 120 | case(7): |
formulas | 0:38c3afd99aeb | 121 | newData=AllocData(msgLVDTRear); |
formulas | 0:38c3afd99aeb | 122 | UpdateInfoLVDTRear(newData); |
formulas | 0:38c3afd99aeb | 123 | rx_flag = rx_flag ^ (1<<7); |
formulas | 0:38c3afd99aeb | 124 | break; |
formulas | 0:38c3afd99aeb | 125 | case(8): |
formulas | 0:38c3afd99aeb | 126 | newData=AllocData(msgBrakes); |
formulas | 0:38c3afd99aeb | 127 | UpdateInfoBrakes(newData); |
formulas | 0:38c3afd99aeb | 128 | rx_flag = rx_flag ^ (1<<8); |
formulas | 0:38c3afd99aeb | 129 | break; |
formulas | 2:f54f01527ebb | 130 | case(9): |
formulas | 2:f54f01527ebb | 131 | newData=AllocData(msgDistance); |
formulas | 2:f54f01527ebb | 132 | if(distance_flag==0){ |
formulas | 2:f54f01527ebb | 133 | InitDistanceMeter(newData); |
formulas | 2:f54f01527ebb | 134 | distance_flag=1; |
formulas | 2:f54f01527ebb | 135 | }; |
formulas | 2:f54f01527ebb | 136 | rx_flag = rx_flag ^ (1<<9); |
formulas | 0:38c3afd99aeb | 137 | // for each new id add new case statement |
formulas | 0:38c3afd99aeb | 138 | }; |
formulas | 0:38c3afd99aeb | 139 | }; |
formulas | 0:38c3afd99aeb | 140 | }; |
formulas | 2:f54f01527ebb | 141 | UpdateMeterCounter(); |
formulas | 0:38c3afd99aeb | 142 | }; |
formulas | 0:38c3afd99aeb | 143 | |
formulas | 0:38c3afd99aeb | 144 | uint16_t * AllocData(CANMessage msg){ //Unpack CAN message |
formulas | 0:38c3afd99aeb | 145 | uint16_t newData[4]; |
formulas | 0:38c3afd99aeb | 146 | newData[0]=(msg.data[1]<<8) | msg.data[0]; |
formulas | 0:38c3afd99aeb | 147 | newData[1]=(msg.data[3]<<8) | msg.data[2]; |
formulas | 0:38c3afd99aeb | 148 | newData[2]=(msg.data[5]<<8) | msg.data[4]; |
formulas | 0:38c3afd99aeb | 149 | newData[3]=(msg.data[7]<<8) | msg.data[6]; |
formulas | 0:38c3afd99aeb | 150 | return newData; |
formulas | 0:38c3afd99aeb | 151 | }; |
formulas | 0:38c3afd99aeb | 152 | |
formulas | 2:f54f01527ebb | 153 | void InitDistanceMeter(uint16_t newData[4]){ |
formulas | 2:f54f01527ebb | 154 | uint32_t DistanceBuffer; |
formulas | 2:f54f01527ebb | 155 | DistanceBuffer=(uint32_t)((newData[1]<<16) | (newData[0])); |
formulas | 2:f54f01527ebb | 156 | Meter_counter=float(DistanceBuffer)*10; |
formulas | 2:f54f01527ebb | 157 | pc.printf("Init success, start km=%d,%f\n",DistanceBuffer,Meter_counter); |
formulas | 2:f54f01527ebb | 158 | t_int.start(); |
formulas | 2:f54f01527ebb | 159 | t_store.start(); |
formulas | 2:f54f01527ebb | 160 | }; |
formulas | 2:f54f01527ebb | 161 | /*void InitDistanceMeter(){ |
formulas | 2:f54f01527ebb | 162 | uint32_t distance_buffer; |
formulas | 2:f54f01527ebb | 163 | if(sd.ReadBlocks((uint32_t*)distance_buffer,DISTANCE_MEMORY_ADDR ,1,SD_DATATIMEOUT)){ |
formulas | 2:f54f01527ebb | 164 | Meter_counter=(float(distance_buffer))/100; |
formulas | 2:f54f01527ebb | 165 | |
formulas | 2:f54f01527ebb | 166 | |
formulas | 2:f54f01527ebb | 167 | };*/ |
formulas | 2:f54f01527ebb | 168 | /*void InitDistanceMeter(){ |
formulas | 2:f54f01527ebb | 169 | |
formulas | 2:f54f01527ebb | 170 | uint8_t DistanceBuffer8[4]; |
formulas | 2:f54f01527ebb | 171 | uint32_t DistanceBuffer32; |
formulas | 2:f54f01527ebb | 172 | if(eep.ReadBuffer(DistanceBuffer8, 0, (uint16_t*)4)){ |
formulas | 2:f54f01527ebb | 173 | pc.printf("Read success\n"); |
formulas | 2:f54f01527ebb | 174 | } |
formulas | 2:f54f01527ebb | 175 | DistanceBuffer32=(DistanceBuffer8[0]<<24) | (DistanceBuffer8[1]<<16) | (DistanceBuffer8[2]<<8) | DistanceBuffer8[3]; |
formulas | 2:f54f01527ebb | 176 | Meter_counter=(float(DistanceBuffer32))/100; |
formulas | 2:f54f01527ebb | 177 | pc.printf("Meter_counter=%f\n",Meter_counter); |
formulas | 2:f54f01527ebb | 178 | };*/ |
formulas | 2:f54f01527ebb | 179 | |
formulas | 0:38c3afd99aeb | 180 | void UpdateInfoDTA1(uint16_t newData[4]){ //Update values for DTA1 message |
formulas | 0:38c3afd99aeb | 181 | Rpm0=Rpm; |
formulas | 0:38c3afd99aeb | 182 | Rpm=newData[0]; |
nemanja1994 | 3:a06e417a5a2c | 183 | showLedRpm(Rpm); |
formulas | 0:38c3afd99aeb | 184 | TPS0=TPS; |
formulas | 0:38c3afd99aeb | 185 | TPS=newData[1]; |
formulas | 0:38c3afd99aeb | 186 | Water_Temp0=Water_Temp; |
formulas | 0:38c3afd99aeb | 187 | Water_Temp=newData[2]; |
formulas | 0:38c3afd99aeb | 188 | Air_Temp0=Air_Temp; |
formulas | 0:38c3afd99aeb | 189 | Air_Temp=newData[3]; |
nemanja1994 | 3:a06e417a5a2c | 190 | //pc.printf("%d %d %d %d", Rpm, TPS,Water_Temp,Air_Temp); |
formulas | 0:38c3afd99aeb | 191 | }; |
formulas | 0:38c3afd99aeb | 192 | |
formulas | 0:38c3afd99aeb | 193 | void UpdateInfoDTA2(uint16_t newData[4]){ //Update values for DTA2 message |
formulas | 0:38c3afd99aeb | 194 | MAP0=MAP; |
formulas | 0:38c3afd99aeb | 195 | MAP=newData[0]; |
formulas | 0:38c3afd99aeb | 196 | Lambda0=Lambda; |
formulas | 0:38c3afd99aeb | 197 | Lambda=newData[1]; |
formulas | 0:38c3afd99aeb | 198 | Speed0=Speed; |
formulas | 0:38c3afd99aeb | 199 | Speed=newData[2]; |
formulas | 0:38c3afd99aeb | 200 | Oil_P0=Oil_P; |
formulas | 0:38c3afd99aeb | 201 | Oil_P=newData[3]; |
formulas | 0:38c3afd99aeb | 202 | //pc.printf("MAP=%d, Lambda=%d, Speed=%d, Oil_P=%d\n",MAP,Lambda,Speed,Oil_P); |
formulas | 0:38c3afd99aeb | 203 | }; |
formulas | 0:38c3afd99aeb | 204 | |
formulas | 0:38c3afd99aeb | 205 | void UpdateInfoDTA3(uint16_t newData[4]){ //Update values for DTA3 message |
formulas | 0:38c3afd99aeb | 206 | Oil_Temp0=Oil_Temp; |
formulas | 0:38c3afd99aeb | 207 | Oil_Temp=newData[1]; |
formulas | 0:38c3afd99aeb | 208 | Volts0=Volts; |
formulas | 0:38c3afd99aeb | 209 | Volts=newData[2]; |
formulas | 0:38c3afd99aeb | 210 | }; |
formulas | 0:38c3afd99aeb | 211 | |
formulas | 0:38c3afd99aeb | 212 | void UpdateInfoDTA4(uint16_t newData[4]){ //Update values for DTA4 message |
formulas | 0:38c3afd99aeb | 213 | Gear0=Gear; |
formulas | 0:38c3afd99aeb | 214 | Gear=newData[0]; |
formulas | 0:38c3afd99aeb | 215 | }; |
formulas | 0:38c3afd99aeb | 216 | |
formulas | 0:38c3afd99aeb | 217 | void UpdateInfoDTA5(uint16_t newData[4]){ //Update values for DTA5 message |
formulas | 0:38c3afd99aeb | 218 | }; |
formulas | 0:38c3afd99aeb | 219 | |
formulas | 0:38c3afd99aeb | 220 | void UpdateInfoDTA6(uint16_t newData[4]){ //Update values for DTA6 message |
formulas | 0:38c3afd99aeb | 221 | Crank0=Crank; |
formulas | 0:38c3afd99aeb | 222 | Crank=newData[2]; |
formulas | 0:38c3afd99aeb | 223 | }; |
formulas | 0:38c3afd99aeb | 224 | |
formulas | 2:f54f01527ebb | 225 | void UpdateMeterCounter(){ |
formulas | 2:f54f01527ebb | 226 | float ti=t_int.read(); |
formulas | 2:f54f01527ebb | 227 | if(ti>0.1){ |
formulas | 2:f54f01527ebb | 228 | Meter_counter0=Meter_counter; |
formulas | 2:f54f01527ebb | 229 | Meter_counter=Meter_counter+(float)(Speed*0.0277778); // 0.1*1000/3600 |
formulas | 2:f54f01527ebb | 230 | t_int.reset(); |
formulas | 2:f54f01527ebb | 231 | }; |
formulas | 2:f54f01527ebb | 232 | if(t_store>2){ |
formulas | 2:f54f01527ebb | 233 | char DistanceBuffer8[8]; |
formulas | 2:f54f01527ebb | 234 | uint32_t DistanceBuffer32=uint32_t(Meter_counter); |
formulas | 2:f54f01527ebb | 235 | DistanceBuffer32=uint32_t(Meter_counter); |
formulas | 2:f54f01527ebb | 236 | DistanceBuffer8[0]=uint8_t(DistanceBuffer32>>24); |
formulas | 2:f54f01527ebb | 237 | DistanceBuffer8[1]=uint8_t((DistanceBuffer32 & (uint32_t)0x00FF0000)>>16); |
formulas | 2:f54f01527ebb | 238 | DistanceBuffer8[2]=uint8_t((DistanceBuffer32 & (uint32_t)0x0000FF00)>>8); |
formulas | 2:f54f01527ebb | 239 | DistanceBuffer8[3]=uint8_t((DistanceBuffer32 & (uint32_t)0x000000FF)); |
formulas | 2:f54f01527ebb | 240 | CANMessage msg; |
formulas | 2:f54f01527ebb | 241 | if(can.write(CANMessage((uint16_t)DISTANCE,DistanceBuffer8, 8))) { |
formulas | 2:f54f01527ebb | 242 | pc.printf("%d\n",DistanceBuffer32); |
formulas | 2:f54f01527ebb | 243 | }; |
formulas | 2:f54f01527ebb | 244 | t_store.reset(); |
formulas | 2:f54f01527ebb | 245 | |
formulas | 2:f54f01527ebb | 246 | /*uint32_t distance_buffer; |
formulas | 2:f54f01527ebb | 247 | //distance_buffer=uint32_t(Meter_counter) ; |
formulas | 2:f54f01527ebb | 248 | pc.printf("distance=%d\n",distance_buffer); |
formulas | 2:f54f01527ebb | 249 | distance_buffer=0xFF000000; |
formulas | 2:f54f01527ebb | 250 | if(sd.WriteBlocks((uint32_t*)distance_buffer,DISTANCE_MEMORY_ADDR,1,SD_DATATIMEOUT)){ |
formulas | 2:f54f01527ebb | 251 | pc.printf("Storage success\n"); |
formulas | 2:f54f01527ebb | 252 | }else{ |
formulas | 2:f54f01527ebb | 253 | pc.printf("Storage failed\n"); |
formulas | 2:f54f01527ebb | 254 | };*/ |
formulas | 2:f54f01527ebb | 255 | |
formulas | 2:f54f01527ebb | 256 | /*uint32_t DistanceBuffer32; |
formulas | 2:f54f01527ebb | 257 | uint8_t DistanceBuffer8[4]; |
formulas | 2:f54f01527ebb | 258 | DistanceBuffer32=uint32_t(Meter_counter); |
formulas | 2:f54f01527ebb | 259 | DistanceBuffer8[0]=DistanceBuffer32>>24; |
formulas | 2:f54f01527ebb | 260 | DistanceBuffer8[1]=(DistanceBuffer32 & (uint32_t)0x00FF0000)>>16; |
formulas | 2:f54f01527ebb | 261 | DistanceBuffer8[2]=(DistanceBuffer32 & (uint32_t)0x0000FF00)>>8; |
formulas | 2:f54f01527ebb | 262 | DistanceBuffer8[3]=(DistanceBuffer32 & (uint32_t)0x000000FF); |
formulas | 2:f54f01527ebb | 263 | if(eep.WriteBuffer(DistanceBuffer8,0,4)){ |
formulas | 2:f54f01527ebb | 264 | pc.printf("Write success,Distance=%d\n",DistanceBuffer32); |
formulas | 2:f54f01527ebb | 265 | };*/ |
formulas | 2:f54f01527ebb | 266 | }; |
formulas | 2:f54f01527ebb | 267 | }; |
formulas | 2:f54f01527ebb | 268 | |
formulas | 2:f54f01527ebb | 269 | void send(uint16_t ID, char dta[8]) { |
formulas | 2:f54f01527ebb | 270 | if(can.write(CANMessage((uint16_t)ID,dta, 8))) { |
formulas | 2:f54f01527ebb | 271 | printf("%x\n",ID); |
formulas | 2:f54f01527ebb | 272 | printf("Message sent: info1=%x%x, info2=%x%x, info3=%x%x, info4=%x%x\n", dta[1],dta[0],dta[3],dta[2],dta[5],dta[4],dta[7],dta[6]); |
formulas | 2:f54f01527ebb | 273 | }else{ |
formulas | 2:f54f01527ebb | 274 | printf("Shit\n"); |
formulas | 2:f54f01527ebb | 275 | } |
formulas | 2:f54f01527ebb | 276 | }; |
formulas | 2:f54f01527ebb | 277 | |
formulas | 0:38c3afd99aeb | 278 | void UpdateInfoLVDTFront(uint16_t newData[4]){ //Update values for LVDTFront message |
formulas | 0:38c3afd99aeb | 279 | FL_LVDT0=FL_LVDT; //LVDTs are firstly written their voltage value, then overwritten by calculated pertentage value. |
formulas | 0:38c3afd99aeb | 280 | FL_LVDT=newData[0]; |
formulas | 0:38c3afd99aeb | 281 | FR_LVDT0=FR_LVDT; |
formulas | 0:38c3afd99aeb | 282 | FR_LVDT=newData[1]; |
formulas | 0:38c3afd99aeb | 283 | 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 | 284 | if (FL_LVDT>FL_LVDT_Ref){ |
formulas | 0:38c3afd99aeb | 285 | FL_LVDT=(FL_LVDT-FL_LVDT_Ref)*100/(LVDT_Max-FL_LVDT_Ref); |
formulas | 0:38c3afd99aeb | 286 | }else{ |
formulas | 0:38c3afd99aeb | 287 | FL_LVDT=(FL_LVDT-FL_LVDT_Ref)*100/FL_LVDT_Ref; |
formulas | 0:38c3afd99aeb | 288 | }; |
formulas | 2:f54f01527ebb | 289 | //pc.printf("Im in 1\n"); |
formulas | 0:38c3afd99aeb | 290 | }else{ |
formulas | 0:38c3afd99aeb | 291 | FL_LVDT_Ref=FL_LVDT; |
formulas | 0:38c3afd99aeb | 292 | FL_LVDT=0; |
formulas | 0:38c3afd99aeb | 293 | lvdtref=lvdtref^(1<<3); |
formulas | 2:f54f01527ebb | 294 | //pc.printf("Ref=%d\n",FL_LVDT_Ref); |
formulas | 0:38c3afd99aeb | 295 | }; |
formulas | 2:f54f01527ebb | 296 | //pc.printf("FL_LVDT=%d, FL_LVDT0=%d\n",abs(FL_LVDT),abs(FL_LVDT0)); |
formulas | 2:f54f01527ebb | 297 | //pc.printf("FR_LVDT=%d, FR_LVDT0=%d\n",abs(FR_LVDT),abs(FR_LVDT0)); |
formulas | 0:38c3afd99aeb | 298 | |
formulas | 0:38c3afd99aeb | 299 | if(!(lvdtref & (1<<2))){ |
formulas | 0:38c3afd99aeb | 300 | if (FR_LVDT>FR_LVDT_Ref){ |
formulas | 0:38c3afd99aeb | 301 | FR_LVDT=(FR_LVDT-FR_LVDT_Ref)*100/(LVDT_Max-FR_LVDT_Ref); |
formulas | 0:38c3afd99aeb | 302 | }else{ |
formulas | 0:38c3afd99aeb | 303 | FR_LVDT=(FR_LVDT-FR_LVDT_Ref)*100/FR_LVDT_Ref; |
formulas | 0:38c3afd99aeb | 304 | }; |
formulas | 0:38c3afd99aeb | 305 | }else{ |
formulas | 0:38c3afd99aeb | 306 | FR_LVDT_Ref=FR_LVDT; |
formulas | 0:38c3afd99aeb | 307 | FR_LVDT=0; |
formulas | 0:38c3afd99aeb | 308 | lvdtref=lvdtref^(1<<2); |
formulas | 0:38c3afd99aeb | 309 | }; |
formulas | 0:38c3afd99aeb | 310 | //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 | 311 | }; |
formulas | 0:38c3afd99aeb | 312 | |
formulas | 0:38c3afd99aeb | 313 | void UpdateInfoLVDTRear(uint16_t newData[4]){ //Update values for LVDTRear message |
formulas | 0:38c3afd99aeb | 314 | RL_LVDT0=RL_LVDT; |
formulas | 0:38c3afd99aeb | 315 | RL_LVDT=newData[0]; |
formulas | 0:38c3afd99aeb | 316 | RR_LVDT0=RR_LVDT; |
formulas | 0:38c3afd99aeb | 317 | RR_LVDT=newData[1]; |
formulas | 0:38c3afd99aeb | 318 | if(!(lvdtref & (1<<1))){ |
formulas | 0:38c3afd99aeb | 319 | if (RL_LVDT>RL_LVDT_Ref){ |
formulas | 0:38c3afd99aeb | 320 | RL_LVDT=(RL_LVDT-RL_LVDT_Ref)*100/(LVDT_Max-RL_LVDT_Ref); |
formulas | 0:38c3afd99aeb | 321 | }else{ |
formulas | 0:38c3afd99aeb | 322 | RL_LVDT=(RL_LVDT-RL_LVDT_Ref)*100/RL_LVDT_Ref; |
formulas | 0:38c3afd99aeb | 323 | }; |
formulas | 0:38c3afd99aeb | 324 | }else{ |
formulas | 0:38c3afd99aeb | 325 | RL_LVDT_Ref=RL_LVDT; |
formulas | 0:38c3afd99aeb | 326 | RL_LVDT=0; |
formulas | 0:38c3afd99aeb | 327 | lvdtref=lvdtref^(1<<1); |
formulas | 0:38c3afd99aeb | 328 | }; |
formulas | 0:38c3afd99aeb | 329 | |
formulas | 0:38c3afd99aeb | 330 | if(!(lvdtref & (1<<0))){ |
formulas | 0:38c3afd99aeb | 331 | if (RR_LVDT>RR_LVDT_Ref){ |
formulas | 0:38c3afd99aeb | 332 | RR_LVDT=(RR_LVDT-RR_LVDT_Ref)*100/(LVDT_Max-RR_LVDT_Ref); |
formulas | 0:38c3afd99aeb | 333 | }else{ |
formulas | 0:38c3afd99aeb | 334 | RR_LVDT=(RR_LVDT-RR_LVDT_Ref)*100/RR_LVDT_Ref; |
formulas | 0:38c3afd99aeb | 335 | }; |
formulas | 0:38c3afd99aeb | 336 | }else{ |
formulas | 0:38c3afd99aeb | 337 | RR_LVDT_Ref=RR_LVDT; |
formulas | 0:38c3afd99aeb | 338 | RR_LVDT=0; |
formulas | 0:38c3afd99aeb | 339 | lvdtref=lvdtref^(1<<0); |
formulas | 0:38c3afd99aeb | 340 | }; |
formulas | 2:f54f01527ebb | 341 | //pc.printf("RL_LVDT=%d, RL_LVDT0=%d\n",abs(RL_LVDT),abs(RL_LVDT0)); |
formulas | 2:f54f01527ebb | 342 | //pc.printf("RR_LVDT=%d, RR_LVDT0=%d\n",abs(RR_LVDT),abs(RR_LVDT0)); |
formulas | 0:38c3afd99aeb | 343 | |
formulas | 0:38c3afd99aeb | 344 | }; |
formulas | 0:38c3afd99aeb | 345 | |
formulas | 0:38c3afd99aeb | 346 | void UpdateInfoBrakes(uint16_t newData[4]){ //Update values for Brakes message |
formulas | 0:38c3afd99aeb | 347 | Brakes0=Brakes; |
formulas | 0:38c3afd99aeb | 348 | Brakes=newData[0]; |
formulas | 0:38c3afd99aeb | 349 | }; |