GPS + Logging

Dependencies:   FatFileSystem MBed_Adafruit-GPS-Library mbed

Fork of SDHCFileSystem by ESE-519

main.cpp

Committer:
nikhilesh1992
Date:
2015-11-19
Revision:
2:d5500685a878
Parent:
1:fe331bb498a0
Child:
3:54628390bca8

File content as of revision 2:d5500685a878:

//https://developer.mbed.org/users/mlee350/notebook/adafruit-ultimate-gps-breakout-board/
#include "mbed.h"
#include "MBed_Adafruit_GPS.h"
#include "string"
#include "SDHCFileSystem.h"
 
Serial * gps_Serial;
Serial pc (USBTX, USBRX);
SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs 

int main() {
    
    mkdir("/sd/mydir", 0777);
    
    FILE *fp = fopen("/sd/mydir/GPS_Logging.txt", "a");
    if(fp == NULL) {
        error("Could not open file for write\n");
    }
    
    pc.baud(115200); //sets virtual COM serial communication to high rate; this is to allow more time to be spent on GPS retrieval
    
    gps_Serial = new Serial(p28,p27); //serial object for use w/ GPS
    Adafruit_GPS myGPS(gps_Serial); //object of Adafruit's GPS class
    char c; //when read via Adafruit_GPS::read(), the class returns single character stored here
    Timer refresh_Timer; //sets up a timer for use in loop; how often do we print GPS info?
    const int refresh_Time = 5000; //refresh time in ms
    
    myGPS.begin(9600);  //sets baud rate for GPS communication; note this may be changed via Adafruit_GPS::sendCommand(char *)
                        //a list of GPS commands is available at http://www.adafruit.com/datasheets/PMTK_A08.pdf
    
    myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); //these commands are defined in MBed_Adafruit_GPS.h; a link is provided there for command creation
    myGPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
    myGPS.sendCommand(PGCMD_ANTENNA);
    
    pc.printf("Connection established at 115200 baud...\n");
    
    wait(1);
    
    refresh_Timer.start();  //starts the clock on the timer
    
    while(true){
        c = myGPS.read();   //queries the GPS
        
        if (c) { pc.printf("%c", c); } //this line will echo the GPS data if not paused
        
        //check if we recieved a new message from GPS, if so, attempt to parse it,
        if ( myGPS.newNMEAreceived() ) {
            if ( !myGPS.parse(myGPS.lastNMEA()) ) {
                continue;   
            }    
        }
        
        //check if enough time has passed to warrant printing GPS info to screen
        //note if refresh_Time is too low or pc.baud is too low, GPS data may be lost during printing
        if (refresh_Timer.read_ms() >= refresh_Time) {
            refresh_Timer.reset();
            FILE *fp = fopen("/sd/mydir/GPS_Logging.txt", "a");
            if(fp == NULL) {
                error("Could not open file for write\n");
            }
            fprintf(fp, "-------------------------------------\n");
            fprintf(fp, "Fix: %d Quality: %d\n", (int) myGPS.fix, (int) myGPS.fixquality);
            if (myGPS.fix) {
                fprintf(fp, "Location: %5.2f%c, %5.2f%c\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon);
                fprintf(fp, "Speed: %5.2f knots\n", myGPS.speed);
                fprintf(fp, "Angle: %5.2f\n", myGPS.angle);
                fprintf(fp, "Altitude: %5.2f\n", myGPS.altitude);
                fprintf(fp, "Satellites: %d\n", myGPS.satellites);
            }
            fclose(fp);
        }
    }    
}