Sports tracker

Dependencies:   C12832_lcd CMPS03 FatFileSystem GPS MMA7660 mbed

Fork of Data_Read_Write by GUI

main.cpp

Committer:
GBSingh
Date:
2014-05-22
Revision:
2:775586529d5e
Parent:
1:6a1228b44183

File content as of revision 2:775586529d5e:

#include "mbed.h"//mbed library
#include "MSCFileSystem.h"//usb Library
#include "MMA7660.h"//accelerometer library
#include "CMPS03.h"//compass library
#include "GPS.h"//GPS library
#include "C12832_lcd.h" // LCD screen library
MSCFileSystem fs("usb"); // Mount flash drive under the name "usb"
C12832_LCD lcd;// Local name for the LCD
GPS gps(p13,p14);//pin for RX and TX of the gps
Serial pc(USBTX, USBRX);
MMA7660 MMA(p28, p27);// local name for the Accelerometer
DigitalIn fire(p12);//pin for down movement joystick
DigitalIn right(p16);//pin for right movement for joystick
DigitalIn left(p13);//pin for left movement for joystick
CMPS03 compass(p9, p10, CMPS03_DEFAULT_I2C_ADDRESS);//pin for compass
DigitalOut connectionLed(LED1); // debug LED
int lock = 0;
int lock2 = 0;
int lock3 = 0;
int lock4 = 0;
int choice = 0;
int counter = 0;
Timer writeTime;//timer
void run();

void start()//starts and stops the game
{
    
    int counter = 0;
    lcd.cls();
    lcd.locate(0,0);
    lcd.printf("Press down to start game");
    lcd.locate(0,20);
    lcd.printf("Hold down to stop game");
    wait(1.5);
    while (counter == 0) {
        if(fire) {
            run();
            counter = 1;
        }
    }

}
void run()// main funtion to get data and write it to files
{
    lcd.cls();//clear LCD for next reading round
    while(1) {
        writeTime.reset();//resets timer
        writeTime.start();//starts timer
        FILE *longd = fopen( "/usb/long.txt", "a");//opens a file on the usb in append mode
        FILE *latd = fopen( "/usb/lat.txt","a");
        FILE *bear = fopen( "/usb/bearing.txt","a");
        FILE *xData = fopen( "/usb/xData.txt","a");
        FILE *yData = fopen( "/usb/yData.txt","a");
        FILE *zData = fopen( "/usb/zData.txt","a");
        FILE *timeFile = fopen( "/usb/test.txt","a");
        if(gps.sample()) {//checks if it can get a gps position
            lcd.locate(0,10);//initial LCD location
            lcd.printf("Long: %.4f ", gps.longitude);//print to LCD
            lcd.printf("Lat: %.4f", gps.latitude);//print to LCD
            fprintf(longd,"%f\n",gps.longitude);//prints gps lonitude to file
            fprintf(latd,"%f\n",gps.latitude);//prints gps latitude to file
            writeTime.stop();//stops timer
            fprintf(timeFile,"%f\t",writeTime.read());//write time to file
            fclose(timeFile);
        } else {
            lcd.cls();//clear LCD for next reading round
            lcd.locate(3,3);//initial LCD location for x component of acceleration
            lcd.printf("Oh Dear! No lock :(\n");
            fprintf(longd,"%c\n","Oh Dear! No Lock :(");
            lcd.cls();//clear LCD for next reading round
        }
        fclose(latd);//closes file
        fclose(longd);//closes file
        lcd.locate(0,20);//initial LCD location
        lcd.printf("Bearing is: %f\n", compass.readBearing() / 10.0);//print to LCD
        lcd.locate(0,0);//initial LCD location
        lcd.printf("X:%.2f\n",MMA.x());//print x to LCD at locate position
        lcd.locate(40,0);//move LCD location for y component
        lcd.printf("Y:%.2f\n",MMA.y());//print y to LCD to new locate position
        lcd.locate(80,0);//move LCD location for z component
        lcd.printf("Z:%.2f\n",MMA.z());//print z to LCD
        fprintf(bear,"%.4f\n",compass.readBearing() / 10.0);
        fclose(bear);//closes file
        fprintf(xData,"%f\n",MMA.x());//writes to file
        fclose(xData);//closes file
        fprintf(yData,"%f\n",MMA.y());
        fclose(yData);//closes file
        fprintf(zData,"%f\n",MMA.z());
        fclose(zData);//closes file
        if(fire) {
            start();
            counter = 0;
        }
    }
}
void pitchSetUp()//function to set up the pitch
{
    lcd.cls();
    FILE *set = fopen( "/usb/setup.txt","w");

    while (lock == 0) {
        lcd.locate(3,3);
        lcd.printf("Move to position 1\n");
        if(fire) {//if joystick is pressed down
            if(gps.sample()) {
                fprintf(set,"%.5f ",gps.longitude);
                fprintf(set,"%.5f\n",gps.latitude);
                wait (0.5);
                lock = 1;
            } else {
                lcd.cls();
                lcd.printf("No Lock Please try again\n");
                lcd.cls();//clear LCD for next reading round
                lock = 0;
            }
        }
    }
    while (lock2 == 0) {
        lcd.locate(3,3);
        lcd.printf("Move to position 2\n");
        if(fire) {
            if(gps.sample()) {
                fprintf(set,"%.5f ",gps.longitude);
                fprintf(set,"%.5f\n",gps.latitude);
                wait (0.5);
                lock2 = 1;
            } else {
                lcd.cls();
                lcd.printf("No Lock Please try again\n");
                lcd.cls();//clear LCD for next reading round
                lock2 = 0;
            }
        }
    }
    while (lock3 == 0) {
        lcd.locate(3,3);
        lcd.printf("Move to position 3\n");
        if(fire) {
            if(gps.sample()) {
                fprintf(set,"%.5f ",gps.longitude);
                fprintf(set,"%.5f\n",gps.latitude);
                wait (0.5);
                lock3 = 1;
            } else {
                lcd.cls();
                lcd.printf("No Lock Please try again\n");
                lcd.cls();//clear LCD for next reading round
                lock3 = 0;
            }
        }
    }
    while (lock4 == 0) {
        lcd.locate(3,3);
        lcd.printf("Move to position 4\n");
        if(fire) {
            if(gps.sample()) {
                fprintf(set,"%.5f ",gps.longitude);
                fprintf(set,"%.5f\n",gps.latitude);
                wait (0.5);
                lock4 = 1;
            } else {
                lcd.cls();
                lcd.printf("No Lock Please try again\n");
                lcd.cls();//clear LCD for next reading round
                lock4 = 0;
            }
        }
    }
    fclose(set);
    start();//runs the run fution

}
int main()//main funtion
{
    //give choice to what the user wants to do
    lcd.cls();
    while (choice == 0) {
        int choice2 =0;
        lcd.locate(3,3);
        lcd.printf("Pitch Set Up\n");
        if (fire) {//if joystick is pressed down
            pitchSetUp();//runs pitch setup funtion
            choice =1;
        }
        if(right) {//if joystick is pressed right
            lcd.cls();
            lcd.locate(3,3);
            lcd.printf("Run Game\n");
            //counter = counter++;
            wait(0.5);//wait for half a second

            while (choice2 == 0) {
                if (fire) {
                    start();//runs the run funtion
                    choice =1;
                    choice2 = 1;
                }
                if (left) {//if joystick is pressed to the left
                    choice2 = 1;
                    choice = 0;
                    main();//runs the main funtion
                }
            }
        }
    }
}