Joost Tromp / Mbed 2 deprecated V2_GPSRTC

Dependencies:   SCP1000 GPS mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "GPS.h"
00003 #include "SCP1000.h"
00004 
00005 /*
00006 $PMTK251,115200*1F
00007 $PMTK220,100*2F
00008 RMC,VTG,GGA
00009 $PMTK314,0,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*2A
00010 */
00011 #define GPSTX p9
00012 #define GPSRX p10
00013 #define PCBAUD 115200
00014 #define GPSBAUD 115200
00015 
00016 #define DEGREES 176
00017 // 176 is degree untranslated
00018 // 248 is degree translated
00019 
00020 Serial pc(USBTX, USBRX);
00021 GPS gps(GPSTX, GPSRX);
00022 SCP1000 scp1000(p11,p12,p13,p14);
00023 //SDFileSystem sd(p5,p6,p7,p8,"sd");
00024 
00025 char rmc[GPS_BUFFER_LEN];
00026 char gga[GPS_BUFFER_LEN];
00027 char vtg[GPS_BUFFER_LEN];
00028 
00029 bool validgps;
00030 bool validtime;
00031 short int sats;
00032 double latitude;
00033 double longitude;
00034 float altitude;
00035 float pressure;
00036 float velocity;
00037 float track;
00038 
00039 DigitalOut led1(LED1);
00040 Timeout t1;
00041 void t1out(void) { led1 = 0; }
00042 void blip1(void) { led1 = 1; t1.attach(&t1out, 0.01); }
00043 
00044 DigitalOut led2(LED2);
00045 Timeout t2;
00046 void t2out(void) { led2 = 0; }
00047 void blip2(void) { led2 = 1; t2.attach(&t2out, 0.01); }
00048 
00049 DigitalOut led3(LED3);
00050 Timeout t3;
00051 void t3out(void) { led3 = 0; }
00052 void blip3(void) { led3 = 1; t3.attach(&t3out, 0.01); }
00053 
00054 DigitalOut led4(LED4);
00055 Timeout t4;
00056 void t4out(void) { led4 = 0; }
00057 void blip4(void) { led4 = 1; t4.attach(&t4out, 0.01); }
00058 
00059 GPS_Geodetic g;
00060 GPS_VTG v;
00061 
00062 void pos(void) {
00063     blip4();
00064     gps.geodetic(&g);
00065     gps.vtg(&v);
00066     latitude  = g.lat;
00067     longitude = g.lon;
00068     altitude  = g.alt;
00069     velocity = v._velocity_knots;
00070     track = v._track_true;
00071     sats = gps.numOfSats();
00072     validgps = false;
00073     validtime = false;
00074     validgps = gps.getGPSquality();
00075     validtime = gps.isTimeValid();
00076     if (!validgps) { latitude = 0.000000; longitude = 0.000000; velocity = 0.000000; track = 0.000000; }
00077     pc.printf("GPS: %i(%i), TIME: %i\r\nLAT: %f\r\nLON: %f\r\nALT: %5.1lf ft\r\nPRES: %d Pa\r\nTEMP: %3.1lf %cC\r\nSPD: %3.1lf kts\r\nTRK: %3.1lf %cT\r\n", validgps, sats, validtime, latitude, longitude, altitude, scp1000.readPressure(), scp1000.readTemperature(), DEGREES, velocity, track, DEGREES); // 1.0m = 3.2808399 ft - 1.0km = 3280.8399 ft
00078     time_t seconds = time(NULL);
00079     pc.printf("%s\r\n", ctime(&seconds));
00080     }
00081 
00082 int main() {
00083 
00084     pc.baud(PCBAUD);
00085     gps.baud(GPSBAUD);
00086     gps.format(8, GPS::None, 1);
00087   
00088     //gps.setRmc(rmc);
00089     //gps.setGga(gga);
00090     //gps.setVtg(vtg);
00091     
00092     //gps.attach_rmc(&rmc);
00093     //gps.attach_vtg(&vtg);
00094     //gps.attach_gga(&gga);
00095 
00096     struct tm t;
00097     GPS_Time *q2 = gps.timeNow();
00098 
00099     while (q2->year == 2000) {
00100         wait(0.1);
00101         GPS_Time *q2 = gps.timeNow();
00102         t.tm_sec = q2->second;    // 0-59
00103         t.tm_min = q2->minute;    // 0-59
00104         t.tm_hour = q2->hour;   // 0-23
00105         t.tm_mday = q2->day;   // 1-31
00106         t.tm_mon = (q2->month - 1);     // 0-11
00107         t.tm_year = (q2->year - 1900);  // year since 1900
00108         time_t timestamp = mktime(&t);
00109         set_time(timestamp);
00110         if (q2->year != 2000) break;
00111         pc.printf(".");
00112     }
00113     delete(q2);
00114     pc.printf("\r\n");
00115 
00116     gps.attach_gga(&pos);
00117     gps.attach_rmc(&pos);
00118 }