Committer:
G02_KAT
Date:
Thu Feb 16 03:04:26 2012 +0000
Revision:
0:c6ed639a9fae
Newest, nothin special

Who changed what in which revision?

UserRevisionLine numberNew contents of line
G02_KAT 0:c6ed639a9fae 1 #include "mbed.h"
G02_KAT 0:c6ed639a9fae 2 #include "MSCFileSystem.h"
G02_KAT 0:c6ed639a9fae 3
G02_KAT 0:c6ed639a9fae 4 class Watchdog {
G02_KAT 0:c6ed639a9fae 5 public:
G02_KAT 0:c6ed639a9fae 6 void kick(float s) {
G02_KAT 0:c6ed639a9fae 7 LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK
G02_KAT 0:c6ed639a9fae 8 uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4
G02_KAT 0:c6ed639a9fae 9 LPC_WDT->WDTC = s * (float)clk;
G02_KAT 0:c6ed639a9fae 10 LPC_WDT->WDMOD = 0x3; // Enabled and Reset
G02_KAT 0:c6ed639a9fae 11 kick();
G02_KAT 0:c6ed639a9fae 12 }
G02_KAT 0:c6ed639a9fae 13
G02_KAT 0:c6ed639a9fae 14 void kick() {
G02_KAT 0:c6ed639a9fae 15 LPC_WDT->WDFEED = 0xAA;
G02_KAT 0:c6ed639a9fae 16 LPC_WDT->WDFEED = 0x55;
G02_KAT 0:c6ed639a9fae 17 }
G02_KAT 0:c6ed639a9fae 18 };
G02_KAT 0:c6ed639a9fae 19
G02_KAT 0:c6ed639a9fae 20 //Declare interrupt pin
G02_KAT 0:c6ed639a9fae 21 InterruptIn killSwitch(p21);
G02_KAT 0:c6ed639a9fae 22
G02_KAT 0:c6ed639a9fae 23 //USB Setup
G02_KAT 0:c6ed639a9fae 24 DigitalOut USBSelect(p24);
G02_KAT 0:c6ed639a9fae 25
G02_KAT 0:c6ed639a9fae 26 //Stopwatch timer
G02_KAT 0:c6ed639a9fae 27 Timer toothTime;
G02_KAT 0:c6ed639a9fae 28 Timer loopTime;
G02_KAT 0:c6ed639a9fae 29
G02_KAT 0:c6ed639a9fae 30 //Watchdog
G02_KAT 0:c6ed639a9fae 31 Watchdog wdt;
G02_KAT 0:c6ed639a9fae 32
G02_KAT 0:c6ed639a9fae 33 //Battery Level Input
G02_KAT 0:c6ed639a9fae 34 AnalogIn battery(p20);
G02_KAT 0:c6ed639a9fae 35
G02_KAT 0:c6ed639a9fae 36 //Indicator Lights
G02_KAT 0:c6ed639a9fae 37 DigitalOut led1(LED1);
G02_KAT 0:c6ed639a9fae 38 DigitalOut led2(LED2);
G02_KAT 0:c6ed639a9fae 39 DigitalOut led3(LED3);
G02_KAT 0:c6ed639a9fae 40
G02_KAT 0:c6ed639a9fae 41 CANMessage msg;
G02_KAT 0:c6ed639a9fae 42
G02_KAT 0:c6ed639a9fae 43 //Analog Mux
G02_KAT 0:c6ed639a9fae 44 AnalogIn analogIn(p15);
G02_KAT 0:c6ed639a9fae 45 //AnalogOut analogOut (p18);
G02_KAT 0:c6ed639a9fae 46
G02_KAT 0:c6ed639a9fae 47 DigitalOut enA (p10);
G02_KAT 0:c6ed639a9fae 48 BusOut selectAnalog (p11,p12,p13,p14);
G02_KAT 0:c6ed639a9fae 49
G02_KAT 0:c6ed639a9fae 50 //Digital Mux
G02_KAT 0:c6ed639a9fae 51 DigitalIn digitalIn (p16);
G02_KAT 0:c6ed639a9fae 52 //DigitalOut digitalOut (p17);
G02_KAT 0:c6ed639a9fae 53
G02_KAT 0:c6ed639a9fae 54 DigitalOut enD (p5);
G02_KAT 0:c6ed639a9fae 55 BusOut selectDigital (p6,p7,p8,p9);
G02_KAT 0:c6ed639a9fae 56
G02_KAT 0:c6ed639a9fae 57 //CAN communication
G02_KAT 0:c6ed639a9fae 58 CAN can1 (p30,p29);
G02_KAT 0:c6ed639a9fae 59 DigitalOut canEn (p26);
G02_KAT 0:c6ed639a9fae 60
G02_KAT 0:c6ed639a9fae 61 //Variables
G02_KAT 0:c6ed639a9fae 62
G02_KAT 0:c6ed639a9fae 63 int gearH, gearL, gearR, gearPos, fuel1, fuel2, fuel3, fuel4, fuel5, fuelLev;
G02_KAT 0:c6ed639a9fae 64 int teethMotor, teethB;
G02_KAT 0:c6ed639a9fae 65 int dataCollectTime;
G02_KAT 0:c6ed639a9fae 66 int count, i,j,x,y;
G02_KAT 0:c6ed639a9fae 67 int variable=0;
G02_KAT 0:c6ed639a9fae 68 int timeCAN = 0;
G02_KAT 0:c6ed639a9fae 69 int TIME_CAN_MAX = 1000;
G02_KAT 0:c6ed639a9fae 70
G02_KAT 0:c6ed639a9fae 71 double x1, y1, z1, x2, y2, z2;
G02_KAT 0:c6ed639a9fae 72 double temp, clutch,vBatt, vBattery, batteryVoltage;
G02_KAT 0:c6ed639a9fae 73 double susp1, susp2, susp3, susp4;
G02_KAT 0:c6ed639a9fae 74 double circumfB,diameter, backSpeed, frontSpeed, rpmMotor, motorRPM;
G02_KAT 0:c6ed639a9fae 75 double timeA, timeout1, timeLoop;
G02_KAT 0:c6ed639a9fae 76
G02_KAT 0:c6ed639a9fae 77 char filename[64];
G02_KAT 0:c6ed639a9fae 78 char date[32];
G02_KAT 0:c6ed639a9fae 79 char time1[32];
G02_KAT 0:c6ed639a9fae 80 char time2[32];
G02_KAT 0:c6ed639a9fae 81 char time3[32];
G02_KAT 0:c6ed639a9fae 82 char dataCAN[8];
G02_KAT 0:c6ed639a9fae 83 char batLev, gearPosition, fuelLevel, rpm_motor, temperature, wheelSpeed;
G02_KAT 0:c6ed639a9fae 84
G02_KAT 0:c6ed639a9fae 85
G02_KAT 0:c6ed639a9fae 86 //Interrupt Routine
G02_KAT 0:c6ed639a9fae 87 void trigger() {
G02_KAT 0:c6ed639a9fae 88 FILE *fp = fopen(filename, "a+"); //open file and add to it
G02_KAT 0:c6ed639a9fae 89 if(fp){
G02_KAT 0:c6ed639a9fae 90 fprintf(fp,"%s,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f \n",time3, gearPos,fuelLev,backSpeed,frontSpeed,motorRPM,x1,y1,z1,x2,y2,z2,temp,clutch,batteryVoltage);
G02_KAT 0:c6ed639a9fae 91 fclose(fp);
G02_KAT 0:c6ed639a9fae 92 }
G02_KAT 0:c6ed639a9fae 93 wait(5); //wait for power to turn off
G02_KAT 0:c6ed639a9fae 94 }
G02_KAT 0:c6ed639a9fae 95
G02_KAT 0:c6ed639a9fae 96
G02_KAT 0:c6ed639a9fae 97 void countTeeth(){
G02_KAT 0:c6ed639a9fae 98 count = 8;
G02_KAT 0:c6ed639a9fae 99 timeout1 = 1;
G02_KAT 0:c6ed639a9fae 100 toothTime.start();
G02_KAT 0:c6ed639a9fae 101 x = digitalIn.read();
G02_KAT 0:c6ed639a9fae 102 y = digitalIn.read();
G02_KAT 0:c6ed639a9fae 103 while(count > 0 & toothTime.read() < timeout1){
G02_KAT 0:c6ed639a9fae 104 if (x != y){
G02_KAT 0:c6ed639a9fae 105 count--;
G02_KAT 0:c6ed639a9fae 106 x=y;
G02_KAT 0:c6ed639a9fae 107 }
G02_KAT 0:c6ed639a9fae 108 y = digitalIn.read();
G02_KAT 0:c6ed639a9fae 109 }
G02_KAT 0:c6ed639a9fae 110 timeA = toothTime.read();
G02_KAT 0:c6ed639a9fae 111 }
G02_KAT 0:c6ed639a9fae 112
G02_KAT 0:c6ed639a9fae 113
G02_KAT 0:c6ed639a9fae 114 //Polling Routine
G02_KAT 0:c6ed639a9fae 115 void Polling(){
G02_KAT 0:c6ed639a9fae 116
G02_KAT 0:c6ed639a9fae 117 //Speed 1 - back wheel
G02_KAT 0:c6ed639a9fae 118 diameter = 0.58; //in kilometers
G02_KAT 0:c6ed639a9fae 119 teethB = 4;
G02_KAT 0:c6ed639a9fae 120 selectDigital = 12;
G02_KAT 0:c6ed639a9fae 121 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 122
G02_KAT 0:c6ed639a9fae 123 countTeeth();
G02_KAT 0:c6ed639a9fae 124 if(timeA > timeout1){
G02_KAT 0:c6ed639a9fae 125 backSpeed = 0; //car not moving!!!
G02_KAT 0:c6ed639a9fae 126 }else{
G02_KAT 0:c6ed639a9fae 127 backSpeed = (1/timeA)*3.14*diameter*3.6; //km/hr
G02_KAT 0:c6ed639a9fae 128 }
G02_KAT 0:c6ed639a9fae 129 toothTime.reset();
G02_KAT 0:c6ed639a9fae 130
G02_KAT 0:c6ed639a9fae 131 //Reverse Gear
G02_KAT 0:c6ed639a9fae 132 selectDigital = 0;
G02_KAT 0:c6ed639a9fae 133 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 134 gearR = digitalIn.read();
G02_KAT 0:c6ed639a9fae 135
G02_KAT 0:c6ed639a9fae 136 //Low Gear
G02_KAT 0:c6ed639a9fae 137 selectDigital = 1;
G02_KAT 0:c6ed639a9fae 138 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 139 gearL = digitalIn.read();
G02_KAT 0:c6ed639a9fae 140
G02_KAT 0:c6ed639a9fae 141 //High Gear
G02_KAT 0:c6ed639a9fae 142 selectDigital = 2;
G02_KAT 0:c6ed639a9fae 143 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 144 gearH = digitalIn.read();
G02_KAT 0:c6ed639a9fae 145
G02_KAT 0:c6ed639a9fae 146 //Fuel 5
G02_KAT 0:c6ed639a9fae 147 selectDigital = 3;
G02_KAT 0:c6ed639a9fae 148 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 149 fuel5 = digitalIn.read();
G02_KAT 0:c6ed639a9fae 150
G02_KAT 0:c6ed639a9fae 151 //Fuel 4
G02_KAT 0:c6ed639a9fae 152 selectDigital = 4;
G02_KAT 0:c6ed639a9fae 153 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 154 fuel4 = digitalIn.read();
G02_KAT 0:c6ed639a9fae 155
G02_KAT 0:c6ed639a9fae 156 //Fuel 3
G02_KAT 0:c6ed639a9fae 157 selectDigital = 5;
G02_KAT 0:c6ed639a9fae 158 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 159 fuel3 = digitalIn.read();
G02_KAT 0:c6ed639a9fae 160
G02_KAT 0:c6ed639a9fae 161 //Fuel 2
G02_KAT 0:c6ed639a9fae 162 selectDigital = 6;
G02_KAT 0:c6ed639a9fae 163 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 164 fuel2 = digitalIn.read();
G02_KAT 0:c6ed639a9fae 165
G02_KAT 0:c6ed639a9fae 166 //Fuel 1
G02_KAT 0:c6ed639a9fae 167 selectDigital = 7;
G02_KAT 0:c6ed639a9fae 168 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 169 fuel1 = digitalIn.read();
G02_KAT 0:c6ed639a9fae 170
G02_KAT 0:c6ed639a9fae 171 //Motor rpm
G02_KAT 0:c6ed639a9fae 172 circumfB = 0.58/1000; //in kilometers
G02_KAT 0:c6ed639a9fae 173 teethMotor = 12;
G02_KAT 0:c6ed639a9fae 174 selectDigital = 11;
G02_KAT 0:c6ed639a9fae 175 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 176
G02_KAT 0:c6ed639a9fae 177 countTeeth();
G02_KAT 0:c6ed639a9fae 178 if(timeA > timeout1){
G02_KAT 0:c6ed639a9fae 179 motorRPM = 0; //motor not moving!!!
G02_KAT 0:c6ed639a9fae 180 }else{
G02_KAT 0:c6ed639a9fae 181 motorRPM = 60/(timeA*3); //rev/min
G02_KAT 0:c6ed639a9fae 182 }
G02_KAT 0:c6ed639a9fae 183 toothTime.reset();
G02_KAT 0:c6ed639a9fae 184
G02_KAT 0:c6ed639a9fae 185
G02_KAT 0:c6ed639a9fae 186 //Clutch
G02_KAT 0:c6ed639a9fae 187 selectAnalog = 15;
G02_KAT 0:c6ed639a9fae 188 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 189 clutch = analogIn.read();
G02_KAT 0:c6ed639a9fae 190
G02_KAT 0:c6ed639a9fae 191 //Accelerometer x1
G02_KAT 0:c6ed639a9fae 192 selectAnalog = 0;
G02_KAT 0:c6ed639a9fae 193 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 194 x1 = analogIn.read();
G02_KAT 0:c6ed639a9fae 195
G02_KAT 0:c6ed639a9fae 196 //Accelerometer y1
G02_KAT 0:c6ed639a9fae 197 selectAnalog = 1;
G02_KAT 0:c6ed639a9fae 198 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 199 y1 = analogIn.read();
G02_KAT 0:c6ed639a9fae 200
G02_KAT 0:c6ed639a9fae 201 //Accelerometer z1
G02_KAT 0:c6ed639a9fae 202
G02_KAT 0:c6ed639a9fae 203 selectAnalog = 2;
G02_KAT 0:c6ed639a9fae 204 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 205 z1 = analogIn.read();
G02_KAT 0:c6ed639a9fae 206
G02_KAT 0:c6ed639a9fae 207 //Temperature (sig4)
G02_KAT 0:c6ed639a9fae 208 selectAnalog = 8;
G02_KAT 0:c6ed639a9fae 209 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 210 temp = analogIn.read();
G02_KAT 0:c6ed639a9fae 211
G02_KAT 0:c6ed639a9fae 212 //Battery Level
G02_KAT 0:c6ed639a9fae 213 vBatt = battery.read();
G02_KAT 0:c6ed639a9fae 214
G02_KAT 0:c6ed639a9fae 215 /*
G02_KAT 0:c6ed639a9fae 216 //Suspension 1
G02_KAT 0:c6ed639a9fae 217 selectAnalog = 11;
G02_KAT 0:c6ed639a9fae 218 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 219 susp1 = analogIn.read();
G02_KAT 0:c6ed639a9fae 220
G02_KAT 0:c6ed639a9fae 221 //Suspension 2
G02_KAT 0:c6ed639a9fae 222 selectAnalog = 12;
G02_KAT 0:c6ed639a9fae 223 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 224 susp2 = analogIn.read();
G02_KAT 0:c6ed639a9fae 225
G02_KAT 0:c6ed639a9fae 226 //Suspension 3
G02_KAT 0:c6ed639a9fae 227 selectAnalog = 13;
G02_KAT 0:c6ed639a9fae 228 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 229 susp3 = analogIn.read();
G02_KAT 0:c6ed639a9fae 230
G02_KAT 0:c6ed639a9fae 231 //Suspension 4
G02_KAT 0:c6ed639a9fae 232 selectAnalog = 14;
G02_KAT 0:c6ed639a9fae 233 wait_us(0.05);
G02_KAT 0:c6ed639a9fae 234 susp4 = analogIn.read();
G02_KAT 0:c6ed639a9fae 235 */
G02_KAT 0:c6ed639a9fae 236 }
G02_KAT 0:c6ed639a9fae 237
G02_KAT 0:c6ed639a9fae 238 void translateData(){
G02_KAT 0:c6ed639a9fae 239
G02_KAT 0:c6ed639a9fae 240 //convert to gear
G02_KAT 0:c6ed639a9fae 241 gearPos = 0; // N
G02_KAT 0:c6ed639a9fae 242 if (gearL==0){
G02_KAT 0:c6ed639a9fae 243 gearPos = 1;
G02_KAT 0:c6ed639a9fae 244 }
G02_KAT 0:c6ed639a9fae 245 if (gearH==0){
G02_KAT 0:c6ed639a9fae 246 gearPos = 2;
G02_KAT 0:c6ed639a9fae 247 }
G02_KAT 0:c6ed639a9fae 248 if (gearR==0){
G02_KAT 0:c6ed639a9fae 249 gearPos = 3;
G02_KAT 0:c6ed639a9fae 250 }
G02_KAT 0:c6ed639a9fae 251
G02_KAT 0:c6ed639a9fae 252 //convert to fuel level 1-4 (1=Empty 5=Full)
G02_KAT 0:c6ed639a9fae 253 fuelLev = 5; //Full
G02_KAT 0:c6ed639a9fae 254
G02_KAT 0:c6ed639a9fae 255 if (fuel1==1){
G02_KAT 0:c6ed639a9fae 256 fuelLev = 4;
G02_KAT 0:c6ed639a9fae 257 }
G02_KAT 0:c6ed639a9fae 258 if (fuel2==1){
G02_KAT 0:c6ed639a9fae 259 fuelLev = 3;
G02_KAT 0:c6ed639a9fae 260 }
G02_KAT 0:c6ed639a9fae 261 if (fuel3==1){
G02_KAT 0:c6ed639a9fae 262 fuelLev = 2;
G02_KAT 0:c6ed639a9fae 263 }
G02_KAT 0:c6ed639a9fae 264 if (fuel4==1){
G02_KAT 0:c6ed639a9fae 265 fuelLev = 1;
G02_KAT 0:c6ed639a9fae 266 }
G02_KAT 0:c6ed639a9fae 267 if (fuel5==1){
G02_KAT 0:c6ed639a9fae 268 fuelLev = 0; //Empty
G02_KAT 0:c6ed639a9fae 269 }
G02_KAT 0:c6ed639a9fae 270
G02_KAT 0:c6ed639a9fae 271 //convert battery voltage (82=10V & 100=15V)
G02_KAT 0:c6ed639a9fae 272 vBattery = vBatt * 100;
G02_KAT 0:c6ed639a9fae 273 if(vBattery < 82){
G02_KAT 0:c6ed639a9fae 274 vBattery = 82;
G02_KAT 0:c6ed639a9fae 275 }
G02_KAT 0:c6ed639a9fae 276 batteryVoltage = vBatt * 14.8; //change battery % to volts
G02_KAT 0:c6ed639a9fae 277
G02_KAT 0:c6ed639a9fae 278 //convert motor rpm 0-40 thousand rpm
G02_KAT 0:c6ed639a9fae 279 rpmMotor = motorRPM/100; //0-40
G02_KAT 0:c6ed639a9fae 280 if(rpmMotor > 40){
G02_KAT 0:c6ed639a9fae 281 rpmMotor = 40;
G02_KAT 0:c6ed639a9fae 282 }
G02_KAT 0:c6ed639a9fae 283
G02_KAT 0:c6ed639a9fae 284 //convert wheel speed (0-150 km/hr)
G02_KAT 0:c6ed639a9fae 285 if(backSpeed > 150){
G02_KAT 0:c6ed639a9fae 286 backSpeed = 150;
G02_KAT 0:c6ed639a9fae 287 }
G02_KAT 0:c6ed639a9fae 288
G02_KAT 0:c6ed639a9fae 289 //convert temperature (0-180 degrees C)
G02_KAT 0:c6ed639a9fae 290
G02_KAT 0:c6ed639a9fae 291 //convert clutch position
G02_KAT 0:c6ed639a9fae 292
G02_KAT 0:c6ed639a9fae 293 //convert accelerometer values
G02_KAT 0:c6ed639a9fae 294
G02_KAT 0:c6ed639a9fae 295 }
G02_KAT 0:c6ed639a9fae 296
G02_KAT 0:c6ed639a9fae 297 void getCAN(){
G02_KAT 0:c6ed639a9fae 298 //Request Data from Display
G02_KAT 0:c6ed639a9fae 299 while(!can1.read(msg) && (timeCAN < TIME_CAN_MAX) ){
G02_KAT 0:c6ed639a9fae 300 timeCAN++;//wait until data is received
G02_KAT 0:c6ed639a9fae 301 }
G02_KAT 0:c6ed639a9fae 302
G02_KAT 0:c6ed639a9fae 303 if(timeCAN < TIME_CAN_MAX){
G02_KAT 0:c6ed639a9fae 304 variable = msg.data[0];//if data is received store (x2, y2, z2, frontSpeed)
G02_KAT 0:c6ed639a9fae 305 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:c6ed639a9fae 306 x2 = msg.data[1];
G02_KAT 0:c6ed639a9fae 307 y2 = msg.data[2];
G02_KAT 0:c6ed639a9fae 308 z2 = msg.data[3];
G02_KAT 0:c6ed639a9fae 309 frontSpeed = msg.data[4];
G02_KAT 0:c6ed639a9fae 310
G02_KAT 0:c6ed639a9fae 311 }else{
G02_KAT 0:c6ed639a9fae 312 printf("CAN message timeout\r\n");
G02_KAT 0:c6ed639a9fae 313 x2 = NULL;//if no data timeout and store as null
G02_KAT 0:c6ed639a9fae 314 y2 = NULL;
G02_KAT 0:c6ed639a9fae 315 z2 = NULL;
G02_KAT 0:c6ed639a9fae 316 frontSpeed = NULL;
G02_KAT 0:c6ed639a9fae 317 }
G02_KAT 0:c6ed639a9fae 318
G02_KAT 0:c6ed639a9fae 319 timeCAN = 0;
G02_KAT 0:c6ed639a9fae 320 }
G02_KAT 0:c6ed639a9fae 321
G02_KAT 0:c6ed639a9fae 322 //Send data to Display
G02_KAT 0:c6ed639a9fae 323 void sendCAN(){
G02_KAT 0:c6ed639a9fae 324
G02_KAT 0:c6ed639a9fae 325 //Cast to char
G02_KAT 0:c6ed639a9fae 326 batLev = (char) vBattery; //82-100
G02_KAT 0:c6ed639a9fae 327 gearPosition = (char) gearPos; //0-3
G02_KAT 0:c6ed639a9fae 328 fuelLevel = (char) fuelLev; //0-5
G02_KAT 0:c6ed639a9fae 329 rpm_motor = (char) rpmMotor; //0-40
G02_KAT 0:c6ed639a9fae 330 temperature = (char) temp; //0-180
G02_KAT 0:c6ed639a9fae 331 wheelSpeed = (char) backSpeed; //0-150
G02_KAT 0:c6ed639a9fae 332
G02_KAT 0:c6ed639a9fae 333 char dataCAN[8] = {rpm_motor,fuelLevel,gearPosition,batLev,temperature, wheelSpeed,0,0};
G02_KAT 0:c6ed639a9fae 334
G02_KAT 0:c6ed639a9fae 335 //send data to display (gearPos, fuelLev, backSpeed, rpmMotor, batLev, temp)
G02_KAT 0:c6ed639a9fae 336 if (can1.write(CANMessage(0xFF01FF, dataCAN, 8, CANData, CANExtended))){
G02_KAT 0:c6ed639a9fae 337 //CAN message sent
G02_KAT 0:c6ed639a9fae 338 }else{
G02_KAT 0:c6ed639a9fae 339 //CAN message not sent
G02_KAT 0:c6ed639a9fae 340 }
G02_KAT 0:c6ed639a9fae 341 timeLoop = loopTime.read();
G02_KAT 0:c6ed639a9fae 342 j--;
G02_KAT 0:c6ed639a9fae 343 wait(0.1);
G02_KAT 0:c6ed639a9fae 344
G02_KAT 0:c6ed639a9fae 345 }
G02_KAT 0:c6ed639a9fae 346
G02_KAT 0:c6ed639a9fae 347 //*****************************************************************Main Program*************************************************************************************************
G02_KAT 0:c6ed639a9fae 348
G02_KAT 0:c6ed639a9fae 349 int main() {
G02_KAT 0:c6ed639a9fae 350 wdt.kick(5.0);
G02_KAT 0:c6ed639a9fae 351 killSwitch.rise(&trigger);
G02_KAT 0:c6ed639a9fae 352 loopTime.start();
G02_KAT 0:c6ed639a9fae 353 USBSelect = 0; //enable USB channel 1
G02_KAT 0:c6ed639a9fae 354 enA = 1; //enable analog mux
G02_KAT 0:c6ed639a9fae 355 enD = 1; //enable digital mux
G02_KAT 0:c6ed639a9fae 356 canEn = 0; //enable CAN
G02_KAT 0:c6ed639a9fae 357 can1.frequency(250000);
G02_KAT 0:c6ed639a9fae 358
G02_KAT 0:c6ed639a9fae 359 //Set Time and Date
G02_KAT 0:c6ed639a9fae 360 //*****DO THIS THE FIRST TIME ONLY!********
G02_KAT 0:c6ed639a9fae 361 //set_time(1328382900); //seconds since Jan. 1, 1970 - use Unix Time Converter http://www.epochconverter.com/
G02_KAT 0:c6ed639a9fae 362 //started on Feb. 4, 2012 at 19:15:00
G02_KAT 0:c6ed639a9fae 363
G02_KAT 0:c6ed639a9fae 364 while(1){ //while forever
G02_KAT 0:c6ed639a9fae 365
G02_KAT 0:c6ed639a9fae 366 //Create File
G02_KAT 0:c6ed639a9fae 367 time_t seconds = time(NULL);
G02_KAT 0:c6ed639a9fae 368 strftime(time1, 32, "%H_%M_%S", localtime(&seconds));
G02_KAT 0:c6ed639a9fae 369 strftime(date, 32, "%m/%d/%y", localtime(&seconds));
G02_KAT 0:c6ed639a9fae 370 sprintf(filename, "/fs/%s.csv", time1);
G02_KAT 0:c6ed639a9fae 371 MSCFileSystem fs("fs");
G02_KAT 0:c6ed639a9fae 372 FILE *fp = fopen(filename, "w");
G02_KAT 0:c6ed639a9fae 373 if(fp){
G02_KAT 0:c6ed639a9fae 374 fprintf(fp,"Date(MM/DD/YY): %s \n", date);
G02_KAT 0:c6ed639a9fae 375 strftime(time2, 32, "%H:%M:%S", localtime(&seconds));
G02_KAT 0:c6ed639a9fae 376 fprintf(fp,"Start Time: %s \n", time2);
G02_KAT 0:c6ed639a9fae 377 fprintf(fp,"Time, Gear Position, Fuel Level,Back Wheel Speed(km/h),Front Wheel Speed(km/h),Motor RPM,x1,y1,z1,x2,y2,z2,Temperature(C),Clutch Position(cm),Battery(V) \n");
G02_KAT 0:c6ed639a9fae 378 fclose(fp);
G02_KAT 0:c6ed639a9fae 379 }else{//no USB
G02_KAT 0:c6ed639a9fae 380 }
G02_KAT 0:c6ed639a9fae 381
G02_KAT 0:c6ed639a9fae 382 i=100; //print to USB file 100 times before opening a new file
G02_KAT 0:c6ed639a9fae 383 while(i > 0){
G02_KAT 0:c6ed639a9fae 384 //Get a CAN message
G02_KAT 0:c6ed639a9fae 385 getCAN();
G02_KAT 0:c6ed639a9fae 386 //Get sensor data
G02_KAT 0:c6ed639a9fae 387 Polling();
G02_KAT 0:c6ed639a9fae 388 //Translate raw sensor data
G02_KAT 0:c6ed639a9fae 389 translateData();
G02_KAT 0:c6ed639a9fae 390 //Print to USB
G02_KAT 0:c6ed639a9fae 391 if(fp != NULL){
G02_KAT 0:c6ed639a9fae 392 FILE *fp = fopen("/fs/data.csv", "a+");
G02_KAT 0:c6ed639a9fae 393 time_t seconds = time(NULL);
G02_KAT 0:c6ed639a9fae 394 strftime(time3, 32, "%H:%M:%S", localtime(&seconds));
G02_KAT 0:c6ed639a9fae 395 fprintf(fp,"%s,%d,%d,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f \n",time3, gearPos,fuelLev,backSpeed,frontSpeed,motorRPM,x1,y1,z1,x2,y2,z2,temp,clutch,batteryVoltage);
G02_KAT 0:c6ed639a9fae 396 fclose(fp);
G02_KAT 0:c6ed639a9fae 397 fp = NULL;
G02_KAT 0:c6ed639a9fae 398
G02_KAT 0:c6ed639a9fae 399 }else{//no USB
G02_KAT 0:c6ed639a9fae 400 }
G02_KAT 0:c6ed639a9fae 401
G02_KAT 0:c6ed639a9fae 402 //Send a CAN message
G02_KAT 0:c6ed639a9fae 403 sendCAN();
G02_KAT 0:c6ed639a9fae 404 i--;
G02_KAT 0:c6ed639a9fae 405 } //close while i loop
G02_KAT 0:c6ed639a9fae 406
G02_KAT 0:c6ed639a9fae 407 timeLoop = loopTime.read();
G02_KAT 0:c6ed639a9fae 408 loopTime.reset();
G02_KAT 0:c6ed639a9fae 409
G02_KAT 0:c6ed639a9fae 410 wdt.kick();
G02_KAT 0:c6ed639a9fae 411 }//close forever while loop
G02_KAT 0:c6ed639a9fae 412 }//close main