Adafruit GPS library sample with Xadow GPS and Xadow Oled

Dependencies:   MBed_Adafruit-GPS-Library SSD1308_128x64_I2C USBDevice mbed

Fork of AVC_gps by AVR Competition

main.cpp

Committer:
whatnick
Date:
2014-11-21
Revision:
1:2387ce3e58c8
Parent:
0:59cfe30c337c

File content as of revision 1:2387ce3e58c8:

#include "mbed.h"
#include "pinmap.h"
#include "SSD1308.h"
#include "MBed_Adafruit_GPS.h"

Serial gps(P0_19,P0_18);

#define DEBUG

#ifdef DEBUG
#include "USBSerial.h"                       // To use USB virtual serial, a driver is needed, check http://mbed.org/handbook/USBSerial
#define LOG(args...)    pc.printf(args)
USBSerial pc;
#else
#define LOG(args...)
#endif

#define HARD_SPI        1
#define I2C_FREQ            100000

I2C i2c(I2C_SDA, I2C_SCL);
//Use Xadow OLED for display
SSD1308 oled = SSD1308(i2c, SSD1308_SA0);

//GPS Data


int main()
{
    Adafruit_GPS myGPS(&gps);
    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 = 1000; //refresh time in ms

    myGPS.begin(9600);
    oled.clearDisplay();
    oled.writeString(0,0,"GPS Test");
    oled.writeString(1,0,"GPS Start");
    
    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();
            pc.printf("Time: %d:%d:%d.%u\n", myGPS.hour, myGPS.minute, myGPS.seconds, myGPS.milliseconds);
            pc.printf("Date: %d/%d/20%d\n", myGPS.day, myGPS.month, myGPS.year);
            pc.printf("Fix: %d\n", (int) myGPS.fix);
            pc.printf("Quality: %d\n", (int) myGPS.fixquality);
            if (myGPS.fix) {
                pc.printf("Location: %5.2f%c, %5.2f%c\n", myGPS.latitude, myGPS.lat, myGPS.longitude, myGPS.lon);
                pc.printf("Speed: %5.2f knots\n", myGPS.speed);
                pc.printf("Angle: %5.2f\n", myGPS.angle);
                pc.printf("Altitude: %5.2f\n", myGPS.altitude);
                pc.printf("Satellites: %d\n", myGPS.satellites);
            }

            if (myGPS.fix) {
                char oled_str[20];
                oled.writeString(1,0,"GPS Lock ");
                sprintf(oled_str,"LAT:%f",myGPS.latitude);
                oled.writeString(2,0,oled_str);
                sprintf(oled_str,"LON:%f",myGPS.longitude);
                oled.writeString(3,0,oled_str);
                sprintf(oled_str,"ALT:%f",myGPS.altitude);
                oled.writeString(4,0,oled_str);
            } else {
                oled.writeString(1,0,"GPS Lost ");
            }
        }
    }
}