Preliminary code for Baja car

Committer:
G02_KAT
Date:
Mon Feb 13 20:14:22 2012 +0000
Revision:
0:c51909c85f04
REV_100

Who changed what in which revision?

UserRevisionLine numberNew contents of line
G02_KAT 0:c51909c85f04 1 #include "mbed.h"
G02_KAT 0:c51909c85f04 2 #include "MSCFileSystem.h"
G02_KAT 0:c51909c85f04 3
G02_KAT 0:c51909c85f04 4 //Declare interrupt pin
G02_KAT 0:c51909c85f04 5 //InterruptIn killSwitch(p21);
G02_KAT 0:c51909c85f04 6
G02_KAT 0:c51909c85f04 7 //USB Setup
G02_KAT 0:c51909c85f04 8 DigitalOut USBSelect(p24);
G02_KAT 0:c51909c85f04 9 MSCFileSystem fs("fs");
G02_KAT 0:c51909c85f04 10
G02_KAT 0:c51909c85f04 11 //Stopwatch timer
G02_KAT 0:c51909c85f04 12 Timer speedTime;
G02_KAT 0:c51909c85f04 13 Timer motorTime;
G02_KAT 0:c51909c85f04 14 Timer loopTime;
G02_KAT 0:c51909c85f04 15
G02_KAT 0:c51909c85f04 16 //Battery Level Input
G02_KAT 0:c51909c85f04 17 AnalogIn battery(p20);
G02_KAT 0:c51909c85f04 18
G02_KAT 0:c51909c85f04 19 //Indicator Lights
G02_KAT 0:c51909c85f04 20 DigitalOut led1(LED1);
G02_KAT 0:c51909c85f04 21 DigitalOut led2(LED2);
G02_KAT 0:c51909c85f04 22 DigitalOut led3(LED3);
G02_KAT 0:c51909c85f04 23
G02_KAT 0:c51909c85f04 24 CANMessage msg;
G02_KAT 0:c51909c85f04 25
G02_KAT 0:c51909c85f04 26 //Analog Mux
G02_KAT 0:c51909c85f04 27 AnalogIn analogIn(p15);
G02_KAT 0:c51909c85f04 28 //AnalogOut analogOut (p18);
G02_KAT 0:c51909c85f04 29
G02_KAT 0:c51909c85f04 30 DigitalOut enA (p10);
G02_KAT 0:c51909c85f04 31 BusOut selectAnalog (p11,p12,p13,p14);
G02_KAT 0:c51909c85f04 32
G02_KAT 0:c51909c85f04 33 //Digital Mux
G02_KAT 0:c51909c85f04 34 AnalogIn digitalIn (p16);
G02_KAT 0:c51909c85f04 35 //DigitalOut digitalOut (p17);
G02_KAT 0:c51909c85f04 36
G02_KAT 0:c51909c85f04 37 DigitalOut enD (p5);
G02_KAT 0:c51909c85f04 38 BusOut selectDigital (p6,p7,p8,p9);
G02_KAT 0:c51909c85f04 39
G02_KAT 0:c51909c85f04 40 //CAN communication
G02_KAT 0:c51909c85f04 41 CAN can1 (p30,p29);
G02_KAT 0:c51909c85f04 42 DigitalOut canEn (p26);
G02_KAT 0:c51909c85f04 43
G02_KAT 0:c51909c85f04 44 //Variables
G02_KAT 0:c51909c85f04 45 int count;
G02_KAT 0:c51909c85f04 46 int gearH, gearL, gearR;
G02_KAT 0:c51909c85f04 47 char gearPos;
G02_KAT 0:c51909c85f04 48 int fuel1, fuel2, fuel3, fuel4, fuel5, fuelLev;
G02_KAT 0:c51909c85f04 49 int speed1, speed1a, speed2, speed3, speed4, rpm;
G02_KAT 0:c51909c85f04 50 double x1, y1, z1, x2, y2, z2;
G02_KAT 0:c51909c85f04 51 double temp, clutch,vBatt;
G02_KAT 0:c51909c85f04 52 int vBattery;
G02_KAT 0:c51909c85f04 53 double susp1, susp2, susp3, susp4;
G02_KAT 0:c51909c85f04 54 int speedB, teethB, dataCollectTime;
G02_KAT 0:c51909c85f04 55 int motor, rpm1, teethMotor;
G02_KAT 0:c51909c85f04 56 double timeMotor, motorRPM, rpmMotor;
G02_KAT 0:c51909c85f04 57 double timeB, circumfB, backSpeed, frontSpeed;
G02_KAT 0:c51909c85f04 58 int i,j,k;
G02_KAT 0:c51909c85f04 59 char filename[64];
G02_KAT 0:c51909c85f04 60 int variable=0;
G02_KAT 0:c51909c85f04 61 double timeLoop;
G02_KAT 0:c51909c85f04 62 int timeCAN = 0;
G02_KAT 0:c51909c85f04 63 int TIME_CAN_MAX = 1000;
G02_KAT 0:c51909c85f04 64
G02_KAT 0:c51909c85f04 65 /*
G02_KAT 0:c51909c85f04 66 //Interrupt Routine
G02_KAT 0:c51909c85f04 67 void trigger() {
G02_KAT 0:c51909c85f04 68 printf("Interrupt Routine triggered \n\r");
G02_KAT 0:c51909c85f04 69 //FILE *fp = fopen(filename, "a+"); //open file and add to it
G02_KAT 0:c51909c85f04 70 //store data onto USB
G02_KAT 0:c51909c85f04 71 x2 = 10;
G02_KAT 0:c51909c85f04 72 y2 = 10;
G02_KAT 0:c51909c85f04 73 z2 = 10;
G02_KAT 0:c51909c85f04 74 fprintf(fp,"%s,%d,%d, %d,%d,%d,%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f \n",NULL, gearR,gearL,gearH,fuel1,fuel2,fuel3,fuel4,fuel5,backSpeed,frontSpeed,motorRPM,x1,y1,z1,x2,y2,z2,temp,clutch,vBatt);
G02_KAT 0:c51909c85f04 75 fclose(fp);
G02_KAT 0:c51909c85f04 76 //send CAN message possibly to say shutting down
G02_KAT 0:c51909c85f04 77 led2=!led2; //indicator LED turns on when finished writing to USB
G02_KAT 0:c51909c85f04 78 wait(1); //wait for power to turn off
G02_KAT 0:c51909c85f04 79 }
G02_KAT 0:c51909c85f04 80 */
G02_KAT 0:c51909c85f04 81
G02_KAT 0:c51909c85f04 82 void Polling(){
G02_KAT 0:c51909c85f04 83 enA = 1;
G02_KAT 0:c51909c85f04 84 enD = 1;
G02_KAT 0:c51909c85f04 85
G02_KAT 0:c51909c85f04 86 //Speed 1 - back wheel
G02_KAT 0:c51909c85f04 87 count = 10;
G02_KAT 0:c51909c85f04 88 speedB = 0;
G02_KAT 0:c51909c85f04 89 circumfB = 0.58; //in meters
G02_KAT 0:c51909c85f04 90 teethB = 20;
G02_KAT 0:c51909c85f04 91 selectDigital = 12;
G02_KAT 0:c51909c85f04 92 wait_us(0.05);
G02_KAT 0:c51909c85f04 93
G02_KAT 0:c51909c85f04 94 speedTime.start();
G02_KAT 0:c51909c85f04 95 while (count > 0){
G02_KAT 0:c51909c85f04 96 speed1 = digitalIn.read();
G02_KAT 0:c51909c85f04 97 // digitalOut = speed1;
G02_KAT 0:c51909c85f04 98 if (speed1 < 1 & speed1a == !speed1){
G02_KAT 0:c51909c85f04 99 speedB = speedB + 1;
G02_KAT 0:c51909c85f04 100 }
G02_KAT 0:c51909c85f04 101 speed1a = speed1;
G02_KAT 0:c51909c85f04 102 count = count - 1;
G02_KAT 0:c51909c85f04 103 }
G02_KAT 0:c51909c85f04 104 timeB = speedTime.read_ms(); //may change to nano seconds
G02_KAT 0:c51909c85f04 105 timeB = timeB/1000; //convert mili sec to sec
G02_KAT 0:c51909c85f04 106 backSpeed = speedB/timeB * circumfB / teethB; //speed in m/sec
G02_KAT 0:c51909c85f04 107 backSpeed = backSpeed * 3.6; //speed in km/hr
G02_KAT 0:c51909c85f04 108 speedTime.reset();
G02_KAT 0:c51909c85f04 109
G02_KAT 0:c51909c85f04 110 // printf("Back speed: %f\n", backSpeed);
G02_KAT 0:c51909c85f04 111 /*
G02_KAT 0:c51909c85f04 112 //Speed 2 - front wheel
G02_KAT 0:c51909c85f04 113 count = 1;
G02_KAT 0:c51909c85f04 114 selectDigital = 13;
G02_KAT 0:c51909c85f04 115 wait_us(0.05);
G02_KAT 0:c51909c85f04 116
G02_KAT 0:c51909c85f04 117 while (count > 0){
G02_KAT 0:c51909c85f04 118 speed2 = digitalIn.read();
G02_KAT 0:c51909c85f04 119 digitalOut = speed2;
G02_KAT 0:c51909c85f04 120 count = count - 1;
G02_KAT 0:c51909c85f04 121 }*/
G02_KAT 0:c51909c85f04 122
G02_KAT 0:c51909c85f04 123 //Reverse Gear
G02_KAT 0:c51909c85f04 124 // count = 1;
G02_KAT 0:c51909c85f04 125 selectDigital = 0;
G02_KAT 0:c51909c85f04 126 wait_us(0.05);
G02_KAT 0:c51909c85f04 127
G02_KAT 0:c51909c85f04 128 // while (count > 0){
G02_KAT 0:c51909c85f04 129 gearR = digitalIn.read();
G02_KAT 0:c51909c85f04 130 // digitalOut = gearR;
G02_KAT 0:c51909c85f04 131 // count = count - 1;
G02_KAT 0:c51909c85f04 132 //}
G02_KAT 0:c51909c85f04 133
G02_KAT 0:c51909c85f04 134 // printf("Reverse Gear: %d\n", gearR);
G02_KAT 0:c51909c85f04 135
G02_KAT 0:c51909c85f04 136 //Low Gear
G02_KAT 0:c51909c85f04 137 // count = 1;
G02_KAT 0:c51909c85f04 138 selectDigital = 1;
G02_KAT 0:c51909c85f04 139 wait_us(0.05);
G02_KAT 0:c51909c85f04 140
G02_KAT 0:c51909c85f04 141 // while (count > 0){
G02_KAT 0:c51909c85f04 142 gearL = digitalIn.read();
G02_KAT 0:c51909c85f04 143 // digitalOut = gearL;
G02_KAT 0:c51909c85f04 144 // count = count - 1;
G02_KAT 0:c51909c85f04 145 // }
G02_KAT 0:c51909c85f04 146
G02_KAT 0:c51909c85f04 147 // printf("Low Gear: %d\n", gearL);
G02_KAT 0:c51909c85f04 148
G02_KAT 0:c51909c85f04 149 //High Gear
G02_KAT 0:c51909c85f04 150 // count = 1;
G02_KAT 0:c51909c85f04 151 selectDigital = 2;
G02_KAT 0:c51909c85f04 152 wait_us(0.05);
G02_KAT 0:c51909c85f04 153
G02_KAT 0:c51909c85f04 154 // while (count > 0){
G02_KAT 0:c51909c85f04 155 gearH = digitalIn.read();
G02_KAT 0:c51909c85f04 156 // digitalOut = gearH;
G02_KAT 0:c51909c85f04 157 // count = count - 1;
G02_KAT 0:c51909c85f04 158 // }
G02_KAT 0:c51909c85f04 159 // printf("High Gear: %d\n", gearH);
G02_KAT 0:c51909c85f04 160
G02_KAT 0:c51909c85f04 161 //Fuel 5
G02_KAT 0:c51909c85f04 162 // count = 1;
G02_KAT 0:c51909c85f04 163 selectDigital = 3;
G02_KAT 0:c51909c85f04 164 wait_us(0.05);
G02_KAT 0:c51909c85f04 165
G02_KAT 0:c51909c85f04 166 // while (count > 0){
G02_KAT 0:c51909c85f04 167 fuel5 = digitalIn.read();
G02_KAT 0:c51909c85f04 168 // digitalOut = fuel5;
G02_KAT 0:c51909c85f04 169 // count = count - 1;
G02_KAT 0:c51909c85f04 170 // }
G02_KAT 0:c51909c85f04 171
G02_KAT 0:c51909c85f04 172 // printf("Fuel five (empty): %d\n", fuel5);
G02_KAT 0:c51909c85f04 173
G02_KAT 0:c51909c85f04 174 //Fuel 4
G02_KAT 0:c51909c85f04 175 // count = 1;
G02_KAT 0:c51909c85f04 176 selectDigital = 4;
G02_KAT 0:c51909c85f04 177 wait_us(0.05);
G02_KAT 0:c51909c85f04 178
G02_KAT 0:c51909c85f04 179 // while (count > 0){
G02_KAT 0:c51909c85f04 180 fuel4 = digitalIn.read();
G02_KAT 0:c51909c85f04 181 // digitalOut = fuel4;
G02_KAT 0:c51909c85f04 182 // count = count - 1;
G02_KAT 0:c51909c85f04 183 // }
G02_KAT 0:c51909c85f04 184 // printf("Fuel four: %d\n", fuel4);
G02_KAT 0:c51909c85f04 185
G02_KAT 0:c51909c85f04 186
G02_KAT 0:c51909c85f04 187 //Fuel 3
G02_KAT 0:c51909c85f04 188 //count = 1;
G02_KAT 0:c51909c85f04 189 selectDigital = 5;
G02_KAT 0:c51909c85f04 190 wait_us(0.05);
G02_KAT 0:c51909c85f04 191
G02_KAT 0:c51909c85f04 192
G02_KAT 0:c51909c85f04 193 // while (count > 0){
G02_KAT 0:c51909c85f04 194 fuel3 = digitalIn.read();
G02_KAT 0:c51909c85f04 195 // digitalOut = fuel3;
G02_KAT 0:c51909c85f04 196 // count = count - 1;
G02_KAT 0:c51909c85f04 197 // }
G02_KAT 0:c51909c85f04 198
G02_KAT 0:c51909c85f04 199 // printf("Fuel three: %d\n", fuel3);
G02_KAT 0:c51909c85f04 200
G02_KAT 0:c51909c85f04 201
G02_KAT 0:c51909c85f04 202
G02_KAT 0:c51909c85f04 203 //Fuel 2
G02_KAT 0:c51909c85f04 204 // count = 1;
G02_KAT 0:c51909c85f04 205 selectDigital = 6;
G02_KAT 0:c51909c85f04 206 wait_us(0.05);
G02_KAT 0:c51909c85f04 207
G02_KAT 0:c51909c85f04 208 // while (count > 0){
G02_KAT 0:c51909c85f04 209 fuel2 = digitalIn.read();
G02_KAT 0:c51909c85f04 210 // digitalOut = fuel2;
G02_KAT 0:c51909c85f04 211 // count = count - 1;
G02_KAT 0:c51909c85f04 212 // }
G02_KAT 0:c51909c85f04 213 // printf("Fuel two: %d\n", fuel2);
G02_KAT 0:c51909c85f04 214
G02_KAT 0:c51909c85f04 215
G02_KAT 0:c51909c85f04 216 //Fuel 1
G02_KAT 0:c51909c85f04 217 //count = 1;
G02_KAT 0:c51909c85f04 218 selectDigital = 7;
G02_KAT 0:c51909c85f04 219 wait_us(0.05);
G02_KAT 0:c51909c85f04 220
G02_KAT 0:c51909c85f04 221 // while (count > 0){
G02_KAT 0:c51909c85f04 222 fuel1 = digitalIn.read();
G02_KAT 0:c51909c85f04 223 // digitalOut = fuel1;
G02_KAT 0:c51909c85f04 224 // count = count - 1;
G02_KAT 0:c51909c85f04 225 // }
G02_KAT 0:c51909c85f04 226 // printf("Fuel one (full): %d\n", fuel1);
G02_KAT 0:c51909c85f04 227
G02_KAT 0:c51909c85f04 228
G02_KAT 0:c51909c85f04 229 //Motor rpm
G02_KAT 0:c51909c85f04 230 count = 10;
G02_KAT 0:c51909c85f04 231 motor = 0;
G02_KAT 0:c51909c85f04 232 teethMotor = 12; //check this number
G02_KAT 0:c51909c85f04 233 selectDigital = 11;
G02_KAT 0:c51909c85f04 234 rpm1 = 1;
G02_KAT 0:c51909c85f04 235
G02_KAT 0:c51909c85f04 236 wait_us(0.05);
G02_KAT 0:c51909c85f04 237
G02_KAT 0:c51909c85f04 238 motorTime.start();
G02_KAT 0:c51909c85f04 239 while (count > 0){
G02_KAT 0:c51909c85f04 240 rpm = digitalIn.read();
G02_KAT 0:c51909c85f04 241
G02_KAT 0:c51909c85f04 242 //digitalOut = rpm;
G02_KAT 0:c51909c85f04 243 if (rpm < 1 & rpm1 == !rpm){
G02_KAT 0:c51909c85f04 244 motor = motor + 1;
G02_KAT 0:c51909c85f04 245 }
G02_KAT 0:c51909c85f04 246 rpm1 = rpm;
G02_KAT 0:c51909c85f04 247 count = count - 1;
G02_KAT 0:c51909c85f04 248 }
G02_KAT 0:c51909c85f04 249
G02_KAT 0:c51909c85f04 250 timeMotor = motorTime.read_ms(); //may change to nano seconds
G02_KAT 0:c51909c85f04 251 // printf("Time Motor (ms): %f\n", timeMotor);
G02_KAT 0:c51909c85f04 252 timeMotor = timeMotor/1000; //change time to seconds
G02_KAT 0:c51909c85f04 253 // printf("Time Motor (sec): %f\n", timeMotor);
G02_KAT 0:c51909c85f04 254 motor = motor/timeMotor; //teeth per second
G02_KAT 0:c51909c85f04 255 // printf("motor: %d\n", motor);
G02_KAT 0:c51909c85f04 256 motorRPM = motor*60/teethMotor; //revolutions per minute
G02_KAT 0:c51909c85f04 257 // printf("RPM: %f\n", motorRPM);
G02_KAT 0:c51909c85f04 258 motorTime.reset();
G02_KAT 0:c51909c85f04 259 rpmMotor = motorRPM/1000; //should be a value between 0-40 thousand rpm
G02_KAT 0:c51909c85f04 260
G02_KAT 0:c51909c85f04 261 // printf("Send to CAN: %f\n", rpmMotor);
G02_KAT 0:c51909c85f04 262
G02_KAT 0:c51909c85f04 263 //Clutch
G02_KAT 0:c51909c85f04 264 // count = 1;
G02_KAT 0:c51909c85f04 265 selectAnalog = 15;
G02_KAT 0:c51909c85f04 266 wait_us(0.05);
G02_KAT 0:c51909c85f04 267
G02_KAT 0:c51909c85f04 268 // while (count > 0){
G02_KAT 0:c51909c85f04 269 clutch = analogIn.read();
G02_KAT 0:c51909c85f04 270 // analogOut = clutch;
G02_KAT 0:c51909c85f04 271 // count = count - 1;
G02_KAT 0:c51909c85f04 272 // }
G02_KAT 0:c51909c85f04 273
G02_KAT 0:c51909c85f04 274 // printf("Clutch: %f\n", clutch);
G02_KAT 0:c51909c85f04 275 //Accelerometer x1
G02_KAT 0:c51909c85f04 276 //count = 1;
G02_KAT 0:c51909c85f04 277 selectAnalog = 0;
G02_KAT 0:c51909c85f04 278 wait_us(0.05);
G02_KAT 0:c51909c85f04 279
G02_KAT 0:c51909c85f04 280 //while (count > 0){
G02_KAT 0:c51909c85f04 281 x1 = analogIn.read();
G02_KAT 0:c51909c85f04 282 //analogOut = x1;
G02_KAT 0:c51909c85f04 283 //count = count - 1;
G02_KAT 0:c51909c85f04 284 //}
G02_KAT 0:c51909c85f04 285
G02_KAT 0:c51909c85f04 286 // printf("X: %f\n", x1);
G02_KAT 0:c51909c85f04 287
G02_KAT 0:c51909c85f04 288 //Accelerometer y1
G02_KAT 0:c51909c85f04 289 //count = 1;
G02_KAT 0:c51909c85f04 290 selectAnalog = 1;
G02_KAT 0:c51909c85f04 291 wait_us(0.05);
G02_KAT 0:c51909c85f04 292
G02_KAT 0:c51909c85f04 293 //while (count > 0){
G02_KAT 0:c51909c85f04 294 y1 = analogIn.read();
G02_KAT 0:c51909c85f04 295 // analogOut = y1;
G02_KAT 0:c51909c85f04 296 // count = count - 1;
G02_KAT 0:c51909c85f04 297 // }
G02_KAT 0:c51909c85f04 298
G02_KAT 0:c51909c85f04 299 // printf("Y: %f\n", y1);
G02_KAT 0:c51909c85f04 300
G02_KAT 0:c51909c85f04 301 //Accelerometer z1
G02_KAT 0:c51909c85f04 302 // count = 1;
G02_KAT 0:c51909c85f04 303 selectAnalog = 2;
G02_KAT 0:c51909c85f04 304 wait_us(0.05);
G02_KAT 0:c51909c85f04 305
G02_KAT 0:c51909c85f04 306 // while (count > 0){
G02_KAT 0:c51909c85f04 307 z1 = analogIn.read();
G02_KAT 0:c51909c85f04 308 // analogOut = z1;
G02_KAT 0:c51909c85f04 309 // count = count - 1;
G02_KAT 0:c51909c85f04 310 //}
G02_KAT 0:c51909c85f04 311 // printf("Z: %f\n", z1);
G02_KAT 0:c51909c85f04 312
G02_KAT 0:c51909c85f04 313 //Temperature (sig4)
G02_KAT 0:c51909c85f04 314 //count = 1;
G02_KAT 0:c51909c85f04 315 selectAnalog = 8;
G02_KAT 0:c51909c85f04 316 wait_us(0.05);
G02_KAT 0:c51909c85f04 317
G02_KAT 0:c51909c85f04 318 //while (count > 0){
G02_KAT 0:c51909c85f04 319 temp = analogIn.read();
G02_KAT 0:c51909c85f04 320 // analogOut = temp;
G02_KAT 0:c51909c85f04 321 // count = count - 1;
G02_KAT 0:c51909c85f04 322 //}
G02_KAT 0:c51909c85f04 323 /*
G02_KAT 0:c51909c85f04 324 //Suspension 1
G02_KAT 0:c51909c85f04 325 count = 1;
G02_KAT 0:c51909c85f04 326 enA = 1;
G02_KAT 0:c51909c85f04 327 selectAnalog = 11;
G02_KAT 0:c51909c85f04 328 enA = 0;
G02_KAT 0:c51909c85f04 329 wait_us(0.05);
G02_KAT 0:c51909c85f04 330
G02_KAT 0:c51909c85f04 331 while (count > 0){
G02_KAT 0:c51909c85f04 332 susp1 = analogIn.read();
G02_KAT 0:c51909c85f04 333 analogOut = susp1;
G02_KAT 0:c51909c85f04 334 count = count - 1;
G02_KAT 0:c51909c85f04 335 }
G02_KAT 0:c51909c85f04 336
G02_KAT 0:c51909c85f04 337 //Suspension 2
G02_KAT 0:c51909c85f04 338 count = 1;
G02_KAT 0:c51909c85f04 339 enA = 1;
G02_KAT 0:c51909c85f04 340 selectAnalog = 12;
G02_KAT 0:c51909c85f04 341 enA = 0;
G02_KAT 0:c51909c85f04 342 wait_us(0.05);
G02_KAT 0:c51909c85f04 343
G02_KAT 0:c51909c85f04 344 while (count > 0){
G02_KAT 0:c51909c85f04 345 susp2 = analogIn.read();
G02_KAT 0:c51909c85f04 346 analogOut = susp2;
G02_KAT 0:c51909c85f04 347 count = count - 1;
G02_KAT 0:c51909c85f04 348 }
G02_KAT 0:c51909c85f04 349
G02_KAT 0:c51909c85f04 350 //Suspension 3
G02_KAT 0:c51909c85f04 351 count = 1;
G02_KAT 0:c51909c85f04 352 enA = 1;
G02_KAT 0:c51909c85f04 353 selectAnalog = 13;
G02_KAT 0:c51909c85f04 354 enA = 0;
G02_KAT 0:c51909c85f04 355 wait_us(0.05);
G02_KAT 0:c51909c85f04 356
G02_KAT 0:c51909c85f04 357 while (count > 0){
G02_KAT 0:c51909c85f04 358 susp3 = analogIn.read();
G02_KAT 0:c51909c85f04 359 analogOut = susp3;
G02_KAT 0:c51909c85f04 360 count = count - 1;
G02_KAT 0:c51909c85f04 361 }
G02_KAT 0:c51909c85f04 362
G02_KAT 0:c51909c85f04 363 //Suspension 4
G02_KAT 0:c51909c85f04 364 count = 1;
G02_KAT 0:c51909c85f04 365 enA = 1;
G02_KAT 0:c51909c85f04 366 selectAnalog = 14;
G02_KAT 0:c51909c85f04 367 enA = 0;
G02_KAT 0:c51909c85f04 368 wait_us(0.05);
G02_KAT 0:c51909c85f04 369
G02_KAT 0:c51909c85f04 370 while (count > 0){
G02_KAT 0:c51909c85f04 371 susp4 = analogIn.read();
G02_KAT 0:c51909c85f04 372 analogOut = susp4;
G02_KAT 0:c51909c85f04 373 count = count - 1;
G02_KAT 0:c51909c85f04 374 }*/
G02_KAT 0:c51909c85f04 375
G02_KAT 0:c51909c85f04 376 //Battery Level
G02_KAT 0:c51909c85f04 377 vBatt = battery.read();
G02_KAT 0:c51909c85f04 378 }
G02_KAT 0:c51909c85f04 379
G02_KAT 0:c51909c85f04 380 //Main Program
G02_KAT 0:c51909c85f04 381
G02_KAT 0:c51909c85f04 382 int main() {
G02_KAT 0:c51909c85f04 383
G02_KAT 0:c51909c85f04 384 loopTime.start();
G02_KAT 0:c51909c85f04 385
G02_KAT 0:c51909c85f04 386 USBSelect = 0; //enable USB channel 1
G02_KAT 0:c51909c85f04 387
G02_KAT 0:c51909c85f04 388 canEn = 0; //enable CAN
G02_KAT 0:c51909c85f04 389 can1.frequency(250000);
G02_KAT 0:c51909c85f04 390
G02_KAT 0:c51909c85f04 391 //Set Time and Date
G02_KAT 0:c51909c85f04 392
G02_KAT 0:c51909c85f04 393 //*****DO THIS THE FIRST TIME ONLY!********
G02_KAT 0:c51909c85f04 394 //set_time(1328382900); //seconds since Jan. 1, 1970 - use Unix Time Converter http://www.epochconverter.com/
G02_KAT 0:c51909c85f04 395 //started on Feb. 4, 2012 at 19:15:00
G02_KAT 0:c51909c85f04 396
G02_KAT 0:c51909c85f04 397
G02_KAT 0:c51909c85f04 398 char date[32];
G02_KAT 0:c51909c85f04 399 char time1[32];
G02_KAT 0:c51909c85f04 400 char time2[32];
G02_KAT 0:c51909c85f04 401 char time3[32];
G02_KAT 0:c51909c85f04 402
G02_KAT 0:c51909c85f04 403
G02_KAT 0:c51909c85f04 404 while(1){ //while forever
G02_KAT 0:c51909c85f04 405
G02_KAT 0:c51909c85f04 406 //Create File
G02_KAT 0:c51909c85f04 407 time_t seconds = time(NULL);
G02_KAT 0:c51909c85f04 408 strftime(time1, 32, "%H_%M_%S", localtime(&seconds));
G02_KAT 0:c51909c85f04 409 strftime(date, 32, "%m/%d/%y", localtime(&seconds));
G02_KAT 0:c51909c85f04 410 sprintf(filename, "/fs/%s.csv", time1);
G02_KAT 0:c51909c85f04 411 FILE *fp = fopen(filename, "w");
G02_KAT 0:c51909c85f04 412 wait(0.5);
G02_KAT 0:c51909c85f04 413 fprintf(fp,"Date(MM/DD/YY): %s \n", date);
G02_KAT 0:c51909c85f04 414 strftime(time2, 32, "%H:%M:%S", localtime(&seconds));
G02_KAT 0:c51909c85f04 415 fprintf(fp,"Start Time: %s \n", time2);
G02_KAT 0:c51909c85f04 416 wait(0.5);
G02_KAT 0:c51909c85f04 417 fprintf(fp,"Time, gearR,gearL,gearH,fuel1,fuel2,fuel3,fuel4,fuel5,backSpeed(km/h),Frontspeed(km/h),RPM,x1,y1,z1,x2,y2,z2,temp(C),clutch(cm),battery(V) \n");
G02_KAT 0:c51909c85f04 418 wait(0.5);
G02_KAT 0:c51909c85f04 419 //printf("\n\r New file created %s \n\r", time1);
G02_KAT 0:c51909c85f04 420
G02_KAT 0:c51909c85f04 421 //Go to Interrupt Routine
G02_KAT 0:c51909c85f04 422 // killSwitch.rise(&trigger);
G02_KAT 0:c51909c85f04 423
G02_KAT 0:c51909c85f04 424 i = 10; //save j dataspoints to USB before closing file
G02_KAT 0:c51909c85f04 425
G02_KAT 0:c51909c85f04 426 while(i>0){ //print to USB
G02_KAT 0:c51909c85f04 427
G02_KAT 0:c51909c85f04 428 //Request Data from Display
G02_KAT 0:c51909c85f04 429 while(!can1.read(msg) && (timeCAN < TIME_CAN_MAX) ){
G02_KAT 0:c51909c85f04 430 timeCAN++;//wait until data is received
G02_KAT 0:c51909c85f04 431 }
G02_KAT 0:c51909c85f04 432
G02_KAT 0:c51909c85f04 433 if(timeCAN < TIME_CAN_MAX){
G02_KAT 0:c51909c85f04 434 variable = msg.data[0];//if data is received store (x2, y2, z2, frontSpeed)
G02_KAT 0:c51909c85f04 435 printf("CAN message received: %d, %d, %d, %d id:%d\r\n", variable, msg.data[1],msg.data[2],msg.data[3],msg.id);
G02_KAT 0:c51909c85f04 436 }else{
G02_KAT 0:c51909c85f04 437 printf("CAN message timeout\r\n");
G02_KAT 0:c51909c85f04 438 x2 = NULL;//if no data timeout and store as null
G02_KAT 0:c51909c85f04 439 y2 = NULL;
G02_KAT 0:c51909c85f04 440 z2 = NULL;
G02_KAT 0:c51909c85f04 441 frontSpeed = NULL;
G02_KAT 0:c51909c85f04 442 }
G02_KAT 0:c51909c85f04 443
G02_KAT 0:c51909c85f04 444 timeCAN = 0;
G02_KAT 0:c51909c85f04 445
G02_KAT 0:c51909c85f04 446 j = 10;
G02_KAT 0:c51909c85f04 447 while(j>0){ //Polling routine and send to display
G02_KAT 0:c51909c85f04 448 //Polling Routine
G02_KAT 0:c51909c85f04 449 //printf("Enter Polling Routine \n\r");
G02_KAT 0:c51909c85f04 450 Polling();
G02_KAT 0:c51909c85f04 451
G02_KAT 0:c51909c85f04 452 //Send data to Display
G02_KAT 0:c51909c85f04 453 //convert to gear
G02_KAT 0:c51909c85f04 454 gearPos = 0; // N
G02_KAT 0:c51909c85f04 455 if (gearL==0){
G02_KAT 0:c51909c85f04 456 gearPos = 1;
G02_KAT 0:c51909c85f04 457 }
G02_KAT 0:c51909c85f04 458 if (gearH==0){
G02_KAT 0:c51909c85f04 459 gearPos = 2;
G02_KAT 0:c51909c85f04 460 }
G02_KAT 0:c51909c85f04 461 if (gearR==0){
G02_KAT 0:c51909c85f04 462 gearPos = 3;
G02_KAT 0:c51909c85f04 463 }
G02_KAT 0:c51909c85f04 464
G02_KAT 0:c51909c85f04 465 //convert to fuel level 1-4 (1=Empty 5=Full)
G02_KAT 0:c51909c85f04 466 fuelLev = 5; //Full
G02_KAT 0:c51909c85f04 467
G02_KAT 0:c51909c85f04 468 if (fuel1==1){
G02_KAT 0:c51909c85f04 469 fuelLev = 4;
G02_KAT 0:c51909c85f04 470 }
G02_KAT 0:c51909c85f04 471 if (fuel2==1){
G02_KAT 0:c51909c85f04 472 fuelLev = 3;
G02_KAT 0:c51909c85f04 473 }
G02_KAT 0:c51909c85f04 474 if (fuel3==1){
G02_KAT 0:c51909c85f04 475 fuelLev = 2;
G02_KAT 0:c51909c85f04 476 }
G02_KAT 0:c51909c85f04 477 if (fuel4==1){
G02_KAT 0:c51909c85f04 478 fuelLev = 1;
G02_KAT 0:c51909c85f04 479 }
G02_KAT 0:c51909c85f04 480 if (fuel5==1){
G02_KAT 0:c51909c85f04 481 fuelLev = 0; //Empty
G02_KAT 0:c51909c85f04 482 }
G02_KAT 0:c51909c85f04 483
G02_KAT 0:c51909c85f04 484 //Remove after testing!!!
G02_KAT 0:c51909c85f04 485
G02_KAT 0:c51909c85f04 486 vBatt = 0.83;
G02_KAT 0:c51909c85f04 487 vBattery = vBatt * 100; //80-100
G02_KAT 0:c51909c85f04 488 rpmMotor = 35; //0-40
G02_KAT 0:c51909c85f04 489 backSpeed = 65; //0-150
G02_KAT 0:c51909c85f04 490 temp = 10; //0-180
G02_KAT 0:c51909c85f04 491
G02_KAT 0:c51909c85f04 492 //cast to char
G02_KAT 0:c51909c85f04 493 char batLev = (char) vBattery;
G02_KAT 0:c51909c85f04 494 char gearPosition = (char) gearPos;
G02_KAT 0:c51909c85f04 495 char fuelLevel = (char) fuelLev;
G02_KAT 0:c51909c85f04 496 char rpm_motor = (char) rpmMotor;
G02_KAT 0:c51909c85f04 497 char temperature = (char) temp;
G02_KAT 0:c51909c85f04 498 char wheelSpeed = (char) backSpeed;
G02_KAT 0:c51909c85f04 499
G02_KAT 0:c51909c85f04 500 char dataCAN[8] = {rpm_motor,fuelLevel,gearPosition,batLev,temperature, wheelSpeed,0,0};
G02_KAT 0:c51909c85f04 501
G02_KAT 0:c51909c85f04 502 //send data to display (gearPos, fuelLev, backSpeed, rpmMotor, batLev, temp)
G02_KAT 0:c51909c85f04 503 if (can1.write(CANMessage(0xFF01FF, dataCAN, 8, CANData, CANExtended))){
G02_KAT 0:c51909c85f04 504 // printf("Sending CAN message \n\r");
G02_KAT 0:c51909c85f04 505 }else{
G02_KAT 0:c51909c85f04 506 // printf("Display not connected \n\r");
G02_KAT 0:c51909c85f04 507 }
G02_KAT 0:c51909c85f04 508 timeLoop = loopTime.read();
G02_KAT 0:c51909c85f04 509 j--;
G02_KAT 0:c51909c85f04 510 wait(0.1);
G02_KAT 0:c51909c85f04 511 }//close j while loop
G02_KAT 0:c51909c85f04 512
G02_KAT 0:c51909c85f04 513 //Print to USB
G02_KAT 0:c51909c85f04 514 time_t seconds = time(NULL);
G02_KAT 0:c51909c85f04 515 strftime(time3, 32, "%H:%M:%S", localtime(&seconds));
G02_KAT 0:c51909c85f04 516 fprintf(fp,"%s,%d,%d, %d,%d,%d,%d,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f \n",time3, gearR,gearL,gearH,fuel1,fuel2,fuel3,fuel4,fuel5,backSpeed,frontSpeed,motorRPM,x1,y1,z1,x2,y2,z2,temp,clutch,vBatt);
G02_KAT 0:c51909c85f04 517 timeLoop = loopTime.read();
G02_KAT 0:c51909c85f04 518 i--;
G02_KAT 0:c51909c85f04 519 //printf("Printing to USB \n\r");
G02_KAT 0:c51909c85f04 520 led1 = !led1;
G02_KAT 0:c51909c85f04 521 }//close i while loop
G02_KAT 0:c51909c85f04 522
G02_KAT 0:c51909c85f04 523 wait(0.5);
G02_KAT 0:c51909c85f04 524 fclose(fp);
G02_KAT 0:c51909c85f04 525 //printf("close file \n\r");
G02_KAT 0:c51909c85f04 526 wait(2); //Polling CAN during wait ****
G02_KAT 0:c51909c85f04 527 timeLoop = loopTime.read();
G02_KAT 0:c51909c85f04 528 loopTime.reset();
G02_KAT 0:c51909c85f04 529 led2 = !led2;
G02_KAT 0:c51909c85f04 530 //printf("Closing File \n\r");
G02_KAT 0:c51909c85f04 531 }//close forever while loop
G02_KAT 0:c51909c85f04 532 }//close main