imitator

Dependencies:   mbed

Committer:
stefan996
Date:
Mon Mar 25 17:58:32 2019 +0000
Revision:
0:8b199d53d010
Imitator

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stefan996 0:8b199d53d010 1 #include "mbed.h"
stefan996 0:8b199d53d010 2 #include "CAN_ID.h"
stefan996 0:8b199d53d010 3
stefan996 0:8b199d53d010 4 CAN can1(PB_8, PB_9, 100000); // PB_8 = CAN_1 RD, PB_9 = CAN_1 TD
stefan996 0:8b199d53d010 5 Serial pc(USBTX, USBRX);
stefan996 0:8b199d53d010 6
stefan996 0:8b199d53d010 7 class Simulator
stefan996 0:8b199d53d010 8 {
stefan996 0:8b199d53d010 9 private:
stefan996 0:8b199d53d010 10 char dta1[8];
stefan996 0:8b199d53d010 11 int Rpm, TPS, Water_Temp, Air_Temp; // br. obrtaja, pozicija gasa, temperatura vode, temperatura vazduha
stefan996 0:8b199d53d010 12 char dta2[8];
stefan996 0:8b199d53d010 13 int MAP, Lambda, Speed, Oil_p; // pritisak na usisu, , brzina km/h, pritisak ulja
stefan996 0:8b199d53d010 14 char dta3[8];
stefan996 0:8b199d53d010 15 int Oil_Temp, Volts; // temperatura ulja, napon akumulatora
stefan996 0:8b199d53d010 16 char dta4[8];
stefan996 0:8b199d53d010 17 int Gear; // prenosni odnos
stefan996 0:8b199d53d010 18 char dta6[8];
stefan996 0:8b199d53d010 19 int Crank_Error;
stefan996 0:8b199d53d010 20 char lvdtfront[8];
stefan996 0:8b199d53d010 21 int FL_LVDT, FR_LVDT; // prednji levi LVDT, prednji desni LVDT
stefan996 0:8b199d53d010 22 char lvdtrear[8];
stefan996 0:8b199d53d010 23 int RL_LVDT, RR_LVDT; // zadnji levi LVDT, zadnji desni LVDT
stefan996 0:8b199d53d010 24 char brakes[8];
stefan996 0:8b199d53d010 25 int Brakes; // kocnica
stefan996 0:8b199d53d010 26 char distance[8];
stefan996 0:8b199d53d010 27 int Distance; // kilometraza
stefan996 0:8b199d53d010 28
stefan996 0:8b199d53d010 29 int counter;
stefan996 0:8b199d53d010 30
stefan996 0:8b199d53d010 31 public:
stefan996 0:8b199d53d010 32 Simulator()
stefan996 0:8b199d53d010 33 {
stefan996 0:8b199d53d010 34 CANMessage msg;
stefan996 0:8b199d53d010 35 while(1)
stefan996 0:8b199d53d010 36 {
stefan996 0:8b199d53d010 37 pc.printf("\n\n1) Rpm, TPS, Water_temp, Air_temp\n");
stefan996 0:8b199d53d010 38 pc.printf("2) MAP, Lambda, Speed, Oil_p\n");
stefan996 0:8b199d53d010 39 pc.printf("3) Oil_temp, Volts\n");
stefan996 0:8b199d53d010 40 pc.printf("4) Gear\n");
stefan996 0:8b199d53d010 41 pc.printf("5) / \n");
stefan996 0:8b199d53d010 42 pc.printf("6) / \n");
stefan996 0:8b199d53d010 43 pc.printf("7) FL_LVDT, FR_LVDT\n");
stefan996 0:8b199d53d010 44 pc.printf("8) RL_LVDT, RR_LVDT\n");
stefan996 0:8b199d53d010 45 pc.printf("9) Brakes\n");
stefan996 0:8b199d53d010 46 pc.printf("10) DISTANCE_ID\n");
stefan996 0:8b199d53d010 47 pc.printf("0) Exit\n\n");
stefan996 0:8b199d53d010 48
stefan996 0:8b199d53d010 49 int x;
stefan996 0:8b199d53d010 50 pc.scanf("%d",&x);
stefan996 0:8b199d53d010 51
stefan996 0:8b199d53d010 52 if(x == 0)
stefan996 0:8b199d53d010 53 {
stefan996 0:8b199d53d010 54 pc.printf(" :( \n");
stefan996 0:8b199d53d010 55 break;
stefan996 0:8b199d53d010 56 }
stefan996 0:8b199d53d010 57
stefan996 0:8b199d53d010 58 switch(x)
stefan996 0:8b199d53d010 59 {
stefan996 0:8b199d53d010 60 case 1:
stefan996 0:8b199d53d010 61 EnterDTA_1();
stefan996 0:8b199d53d010 62 break;
stefan996 0:8b199d53d010 63 case 2:
stefan996 0:8b199d53d010 64 EnterDTA_2();
stefan996 0:8b199d53d010 65 break;
stefan996 0:8b199d53d010 66 case 3:
stefan996 0:8b199d53d010 67 EnterDTA_3();
stefan996 0:8b199d53d010 68 break;
stefan996 0:8b199d53d010 69 case 4:
stefan996 0:8b199d53d010 70 EnterDTA_4();
stefan996 0:8b199d53d010 71 break;
stefan996 0:8b199d53d010 72 case 5:
stefan996 0:8b199d53d010 73
stefan996 0:8b199d53d010 74 break;
stefan996 0:8b199d53d010 75 case 6:
stefan996 0:8b199d53d010 76
stefan996 0:8b199d53d010 77 break;
stefan996 0:8b199d53d010 78 case 7:
stefan996 0:8b199d53d010 79 EnterLVDT_FRONT();
stefan996 0:8b199d53d010 80 break;
stefan996 0:8b199d53d010 81 case 8:
stefan996 0:8b199d53d010 82 EnterLVDT_REAR();
stefan996 0:8b199d53d010 83 break;
stefan996 0:8b199d53d010 84 case 9:
stefan996 0:8b199d53d010 85 EnterBRAKES();
stefan996 0:8b199d53d010 86 break;
stefan996 0:8b199d53d010 87 case 10:
stefan996 0:8b199d53d010 88 EnterDISTANCE_ID();
stefan996 0:8b199d53d010 89 break;
stefan996 0:8b199d53d010 90 }
stefan996 0:8b199d53d010 91 }
stefan996 0:8b199d53d010 92 }
stefan996 0:8b199d53d010 93
stefan996 0:8b199d53d010 94 void send(uint16_t ID, char dta[8])
stefan996 0:8b199d53d010 95 {
stefan996 0:8b199d53d010 96 if(can1.write(CANMessage((uint16_t)ID,dta, 8)))
stefan996 0:8b199d53d010 97 {
stefan996 0:8b199d53d010 98 counter++;
stefan996 0:8b199d53d010 99 pc.printf("%x\n",ID);
stefan996 0:8b199d53d010 100 pc.printf("Message sent: counter=%d, info1=%x%x, info2=%x%x, info3=%x%x, info4=%x%x\n", counter,dta[1],dta[0],dta[3],dta[2],dta[5],dta[4],dta[7],dta[6]);
stefan996 0:8b199d53d010 101 }
stefan996 0:8b199d53d010 102 else
stefan996 0:8b199d53d010 103 pc.printf("Shit\n");
stefan996 0:8b199d53d010 104 }
stefan996 0:8b199d53d010 105
stefan996 0:8b199d53d010 106 void EnterDTA_1()
stefan996 0:8b199d53d010 107 {
stefan996 0:8b199d53d010 108 pc.printf("Enter Rpm from 0 to 13000 [o/min] : ");
stefan996 0:8b199d53d010 109 pc.scanf("%d", &Rpm);
stefan996 0:8b199d53d010 110 pc.printf("Enter TPS from 0 to 100 [%] : ");
stefan996 0:8b199d53d010 111 pc.scanf("%d", &TPS);
stefan996 0:8b199d53d010 112 pc.printf("Enter Water_Temp from 0 to 120 [stepenC] : ");
stefan996 0:8b199d53d010 113 pc.scanf("%d", &Water_Temp);
stefan996 0:8b199d53d010 114 pc.printf("Enter Air_Temp from 0 to 60 [stepenC] : ");
stefan996 0:8b199d53d010 115 pc.scanf("%d", &Air_Temp);
stefan996 0:8b199d53d010 116
stefan996 0:8b199d53d010 117 dta1[0]=(uint8_t)(Rpm & 0x00FF);
stefan996 0:8b199d53d010 118 dta1[1]=(uint8_t)(Rpm>>8);
stefan996 0:8b199d53d010 119 dta1[2]=(uint8_t)(TPS & 0x00FF);
stefan996 0:8b199d53d010 120 dta1[3]=(uint8_t)(TPS>>8);
stefan996 0:8b199d53d010 121 dta1[4]=(uint8_t)(Water_Temp & 0x00FF);
stefan996 0:8b199d53d010 122 dta1[5]=(uint8_t)(Water_Temp>>8);
stefan996 0:8b199d53d010 123 dta1[6]=(uint8_t)(Air_Temp & 0x00FF);
stefan996 0:8b199d53d010 124 dta1[7]=(uint8_t)(Air_Temp>>8);
stefan996 0:8b199d53d010 125
stefan996 0:8b199d53d010 126 send(DTA_1,dta1);
stefan996 0:8b199d53d010 127 }
stefan996 0:8b199d53d010 128
stefan996 0:8b199d53d010 129 void EnterDTA_2()
stefan996 0:8b199d53d010 130 {
stefan996 0:8b199d53d010 131 pc.printf("Enter MAP from 0 to 100 [kPa] : ");
stefan996 0:8b199d53d010 132 pc.scanf("%d", &MAP);
stefan996 0:8b199d53d010 133 pc.printf("Enter Lambda from 0 to 1.3 : ");
stefan996 0:8b199d53d010 134 pc.scanf("%d", &Lambda);
stefan996 0:8b199d53d010 135 Lambda *= 1000; // mnozimo kako bi izbegli razlomljen deo vrednosti
stefan996 0:8b199d53d010 136 pc.printf("Enter Speed from 0 to 140 [kmh] : ");
stefan996 0:8b199d53d010 137 pc.scanf("%d", &Speed);
stefan996 0:8b199d53d010 138 //pc.printf("Enter Oil_p form to [] : ");
stefan996 0:8b199d53d010 139 //pc.scanf("%d", &Oil_p);
stefan996 0:8b199d53d010 140
stefan996 0:8b199d53d010 141 dta2[0]=(uint8_t)(MAP & 0x00FF);
stefan996 0:8b199d53d010 142 dta2[1]=(uint8_t)(MAP>>8);
stefan996 0:8b199d53d010 143 dta2[2]=(uint8_t)(Lambda & 0x00FF);
stefan996 0:8b199d53d010 144 dta2[3]=(uint8_t)(Lambda>>8);
stefan996 0:8b199d53d010 145 dta2[4]=(uint8_t)(Speed & 0x00FF);
stefan996 0:8b199d53d010 146 dta2[5]=(uint8_t)(Speed>>8);
stefan996 0:8b199d53d010 147 dta2[6]=0;
stefan996 0:8b199d53d010 148 dta2[7]=0;
stefan996 0:8b199d53d010 149
stefan996 0:8b199d53d010 150 send(DTA_2,dta2);
stefan996 0:8b199d53d010 151 }
stefan996 0:8b199d53d010 152
stefan996 0:8b199d53d010 153 void EnterDTA_3()
stefan996 0:8b199d53d010 154 {
stefan996 0:8b199d53d010 155 pc.printf("Enter Oil_temp from 0 to 140 [stepenC] : ");
stefan996 0:8b199d53d010 156 pc.scanf("%d", &Oil_Temp);
stefan996 0:8b199d53d010 157 pc.printf("Enter Volts from 10 to 18 [V] : ");
stefan996 0:8b199d53d010 158 pc.scanf("%d", &Volts);
stefan996 0:8b199d53d010 159 Volts *= 10; // mnozimo kako bi izbegli razlomljen deo vrednosti
stefan996 0:8b199d53d010 160
stefan996 0:8b199d53d010 161 dta3[0]=0;
stefan996 0:8b199d53d010 162 dta3[1]=0;
stefan996 0:8b199d53d010 163 dta3[2]=(uint8_t)(Oil_Temp & 0x00FF);
stefan996 0:8b199d53d010 164 dta3[3]=(uint8_t)(Oil_Temp>>8);
stefan996 0:8b199d53d010 165 dta3[4]=(uint8_t)(Volts & 0x00FF);
stefan996 0:8b199d53d010 166 dta3[5]=(uint8_t)(Volts>>8);
stefan996 0:8b199d53d010 167 dta3[6]=0;
stefan996 0:8b199d53d010 168 dta3[7]=0;
stefan996 0:8b199d53d010 169
stefan996 0:8b199d53d010 170 send(DTA_3,dta3);
stefan996 0:8b199d53d010 171 }
stefan996 0:8b199d53d010 172
stefan996 0:8b199d53d010 173 void EnterDTA_4()
stefan996 0:8b199d53d010 174 {
stefan996 0:8b199d53d010 175 pc.printf("Enter Gear from 0 to 6 : ");
stefan996 0:8b199d53d010 176 pc.scanf("%d", &Gear);
stefan996 0:8b199d53d010 177
stefan996 0:8b199d53d010 178 dta4[0]=Gear;
stefan996 0:8b199d53d010 179 dta4[1]=0;
stefan996 0:8b199d53d010 180 dta4[2]=0;
stefan996 0:8b199d53d010 181 dta4[3]=0;
stefan996 0:8b199d53d010 182 dta4[4]=0;
stefan996 0:8b199d53d010 183 dta4[5]=0;
stefan996 0:8b199d53d010 184 dta4[6]=0;
stefan996 0:8b199d53d010 185 dta4[7]=0;
stefan996 0:8b199d53d010 186
stefan996 0:8b199d53d010 187 send(DTA_4,dta4);
stefan996 0:8b199d53d010 188 }
stefan996 0:8b199d53d010 189 void EnterDTA_5();
stefan996 0:8b199d53d010 190
stefan996 0:8b199d53d010 191 void EnterDTA_6();
stefan996 0:8b199d53d010 192
stefan996 0:8b199d53d010 193 void EnterLVDT_FRONT()
stefan996 0:8b199d53d010 194 {
stefan996 0:8b199d53d010 195 pc.printf("Enter FL_LVDT from 0 to 100 [%] : ");
stefan996 0:8b199d53d010 196 pc.scanf("%d", &FL_LVDT);
stefan996 0:8b199d53d010 197 FL_LVDT *= 10; // mnozimo kako bi izbegli razlomljen deo vrednosti
stefan996 0:8b199d53d010 198 pc.printf("Enter FR_LVDT from 0 to 100 [%] : ");
stefan996 0:8b199d53d010 199 pc.scanf("%d", &FR_LVDT);
stefan996 0:8b199d53d010 200 FR_LVDT *= 10; // mnozimo kako bi izbegli razlomljen deo vrednosti
stefan996 0:8b199d53d010 201
stefan996 0:8b199d53d010 202 lvdtfront[0]=(uint8_t)(FL_LVDT & 0x00FF);
stefan996 0:8b199d53d010 203 lvdtfront[1]=(uint8_t)(FL_LVDT>>8);
stefan996 0:8b199d53d010 204 lvdtfront[2]=(uint8_t)(FR_LVDT & 0x00FF);
stefan996 0:8b199d53d010 205 lvdtfront[3]=(uint8_t)(FR_LVDT>>8);
stefan996 0:8b199d53d010 206 lvdtfront[4]=0;
stefan996 0:8b199d53d010 207 lvdtfront[5]=0;
stefan996 0:8b199d53d010 208 lvdtfront[6]=0;
stefan996 0:8b199d53d010 209 lvdtfront[7]=0;
stefan996 0:8b199d53d010 210
stefan996 0:8b199d53d010 211 send(LVDT_FRONT,lvdtfront);
stefan996 0:8b199d53d010 212 }
stefan996 0:8b199d53d010 213
stefan996 0:8b199d53d010 214 void EnterLVDT_REAR()
stefan996 0:8b199d53d010 215 {
stefan996 0:8b199d53d010 216 pc.printf("Enter RL_LVDT from 0 to 100 [%] : ");
stefan996 0:8b199d53d010 217 pc.scanf("%d", &RL_LVDT);
stefan996 0:8b199d53d010 218 RL_LVDT *= 10; // mnozimo kako bi izbegli razlomljen deo vrednosti
stefan996 0:8b199d53d010 219 pc.printf("Enter RR_LVDT from 0 to 100 [%] : ");
stefan996 0:8b199d53d010 220 pc.scanf("%d", &RR_LVDT);
stefan996 0:8b199d53d010 221 RR_LVDT *= 10; // mnozimo kako bi izbegli razlomljen deo vrednosti
stefan996 0:8b199d53d010 222
stefan996 0:8b199d53d010 223 lvdtrear[0]=(uint8_t)(RL_LVDT & 0x00FF);
stefan996 0:8b199d53d010 224 lvdtrear[1]=(uint8_t)(RL_LVDT>>8);
stefan996 0:8b199d53d010 225 lvdtrear[2]=(uint8_t)(RR_LVDT & 0x00FF);
stefan996 0:8b199d53d010 226 lvdtrear[3]=(uint8_t)(RR_LVDT>>8);
stefan996 0:8b199d53d010 227 lvdtrear[4]=0;
stefan996 0:8b199d53d010 228 lvdtrear[5]=0;
stefan996 0:8b199d53d010 229 lvdtrear[6]=0;
stefan996 0:8b199d53d010 230 lvdtrear[7]=0;
stefan996 0:8b199d53d010 231
stefan996 0:8b199d53d010 232 send(LVDT_REAR,lvdtrear);
stefan996 0:8b199d53d010 233 }
stefan996 0:8b199d53d010 234
stefan996 0:8b199d53d010 235 void EnterBRAKES()
stefan996 0:8b199d53d010 236 {
stefan996 0:8b199d53d010 237 pc.printf("Enter Brakes from 0 to 100 [%] : ");
stefan996 0:8b199d53d010 238 pc.scanf("%d", &Brakes);
stefan996 0:8b199d53d010 239
stefan996 0:8b199d53d010 240 if((Brakes/10)%2)
stefan996 0:8b199d53d010 241 {
stefan996 0:8b199d53d010 242 brakes[0]=0xFF;
stefan996 0:8b199d53d010 243 brakes[1]=0xFF;
stefan996 0:8b199d53d010 244 brakes[2]=0;
stefan996 0:8b199d53d010 245 brakes[3]=0;
stefan996 0:8b199d53d010 246 brakes[4]=0;
stefan996 0:8b199d53d010 247 brakes[5]=0;
stefan996 0:8b199d53d010 248 brakes[6]=0;
stefan996 0:8b199d53d010 249 brakes[7]=0;
stefan996 0:8b199d53d010 250 }
stefan996 0:8b199d53d010 251 else
stefan996 0:8b199d53d010 252 {
stefan996 0:8b199d53d010 253 brakes[0]=0;
stefan996 0:8b199d53d010 254 brakes[1]=0;
stefan996 0:8b199d53d010 255 brakes[2]=0;
stefan996 0:8b199d53d010 256 brakes[3]=0;
stefan996 0:8b199d53d010 257 brakes[4]=0;
stefan996 0:8b199d53d010 258 brakes[5]=0;
stefan996 0:8b199d53d010 259 brakes[6]=0;
stefan996 0:8b199d53d010 260 brakes[7]=0;
stefan996 0:8b199d53d010 261 };
stefan996 0:8b199d53d010 262
stefan996 0:8b199d53d010 263 send(BRAKES,brakes);
stefan996 0:8b199d53d010 264 }
stefan996 0:8b199d53d010 265
stefan996 0:8b199d53d010 266 void EnterDISTANCE_ID()
stefan996 0:8b199d53d010 267 {
stefan996 0:8b199d53d010 268 pc.printf("Enter distance from 0 to 100000 [km] : ");
stefan996 0:8b199d53d010 269 pc.scanf("%d", &Distance);
stefan996 0:8b199d53d010 270
stefan996 0:8b199d53d010 271 distance[0]=(uint8_t) (Distance & 0x000000FF);
stefan996 0:8b199d53d010 272 distance[1]=(uint8_t)((Distance & 0x0000FF00)>>8);
stefan996 0:8b199d53d010 273 distance[2]=(uint8_t)((Distance & 0x00FF0000)>>16);
stefan996 0:8b199d53d010 274 distance[3]=(uint8_t)((Distance & 0xFF000000)>>24);
stefan996 0:8b199d53d010 275 distance[4]=0;
stefan996 0:8b199d53d010 276 distance[5]=0;
stefan996 0:8b199d53d010 277 distance[6]=0;
stefan996 0:8b199d53d010 278 distance[7]=0;
stefan996 0:8b199d53d010 279
stefan996 0:8b199d53d010 280 send(DISTANCE_ID,distance);
stefan996 0:8b199d53d010 281 }
stefan996 0:8b199d53d010 282 };
stefan996 0:8b199d53d010 283