KAT MFL
/
Baja_Brains5_working
Preliminary code for Baja car
main.cpp@0:c51909c85f04, 2012-02-13 (annotated)
- Committer:
- G02_KAT
- Date:
- Mon Feb 13 20:14:22 2012 +0000
- Revision:
- 0:c51909c85f04
REV_100
Who changed what in which revision?
User | Revision | Line number | New 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 |