joe carter
/
nitrocarproject
Diff: main_programs/main6.h
- Revision:
- 0:960b355eaa84
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main_programs/main6.h Fri Aug 20 11:18:40 2010 +0000 @@ -0,0 +1,141 @@ +#include "mbed.h" +#include "TextLCD.h" +#include "Counter.h" +#include "LIS302.h" +#include "Servo.h" +#include "MSCFileSystem.h" + +Servo myservo(p21); +LIS302 acc (p5,p6,p7,p8); +DigitalIn on(p20); +DigitalOut LIS302(LIS302); +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); +#define TICK_PERIOD 0.5 +LocalFileSystem local("local"); +Counter counter(p18); +char filename[64]; +int n = 0; + + +Ticker tick; + +Timer t; +volatile int tick_active = 0; + +void dotick (void) { + tick_active = 1; + +} +float samples [2] = {0}; +int index2 = 0; +int start = 1; + +int rpm_counter=0; +int main() { + + float samples [1] = {0}; + int index = 0; + int flipped_right = 1; + int flipped_left = 1; + + TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); + sprintf(filename, "/local/file%03d.txt", n); + FILE *fp = fopen(filename, "r"); //this opens a file on the mbed drive + fprintf(fp, "RPM,X,Y,Z\n"); //this part prints the columns headers + if (fp == NULL) { + break; + } + fclose(fp); + n++; +} +tick.attach(dotick,0.5); + +while (1) { + while (tick_active == 0) {} + rpm_counter = counter.read(); + counter.reset(); + + tick_active = 0; + samples[index2] = 120*rpm_counter; + index2++; + if (index2 >= 2) { + index2 = 0; + } + int i; + start = 1; + for (i=0; i<2; i++) { + if (samples[i] <60) { + start = 0; + } + } + if (on) { + led2 = 1; + } + if (!on) { + led2 = 0; + } + if (start) { + led3 = 1; + } + if (!start) { + led3 = 0; // the leds are only to check the program is doing what i want it to! + } + if (start&&on) + t.start (); + while (start&&on) { //if the light gate reads over 60RPM and the swich is on then it will enter this loop + + while (tick_active == 0) {} + + rpm_counter = counter.read(); + counter.reset(); + FILE *fp = fopen(filename, "w"); + fprintf(fp,"%d,%.2f,%.2f,%.2f\n",60*rpm_counter,acc.x(),acc.y(),acc.z()); //the data colected is saved in the file that was opend + led1 = !led1; + tick_active = 0; + + + samples[index] = acc.y(); + index++; + if (index >= 1) { + index = 0; + } + int i; + + flipped_right = 1; + flipped_left =1; + + for (i=0; i<1; i++) { + if (samples[i] >= -0.8) { + flipped_left = 0; + } + + if (samples[i] <= 0.8) { + flipped_right = 0; //the bit abouve is an array that is looking to see if the accelerometer is reading between 0.8 and -0.8 + + + + + } + + if (flipped_left||flipped_right||!on) { + // if the accelerometer is not reading between 0.8 and -0.8 on the y.acc or the swich is off the following will happen + + + myservo = 1; // 1. the servo will turn to turn off the engine + + t.stop(); // 2. the timer will stop + + fprintf(fp,"this run lasted %f seconds \n", t.read()); // 3. the timer time will be printed to the file + fprintf(fp,"off,off,off,off"); + fclose(fp); // and last the file will be closed + led2 = 0 + led1 = 0; + led4 = 1; + } + } + } +} +} \ No newline at end of file