Allows for a GPS module to be connected to a serial port and exposes an easy to use API to get the GPS data. New feature, added Mbed/LPC17xx RTC synchronisation
Fork of MODGPS by
example1.cpp@2:8aa059e7d8b1, 2011-04-15 (annotated)
- Committer:
- AjK
- Date:
- Fri Apr 15 12:23:52 2011 +0000
- Revision:
- 2:8aa059e7d8b1
- Parent:
- 1:6aec92e77ad2
- Child:
- 6:64771e31464e
1.12 See ChangeLog.c
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AjK | 2:8aa059e7d8b1 | 1 | #ifdef COMPILE_EXAMPLE1_CODE_MODGPS |
AjK | 1:6aec92e77ad2 | 2 | |
AjK | 1:6aec92e77ad2 | 3 | #include "mbed.h" |
AjK | 1:6aec92e77ad2 | 4 | #include "GPS.h" |
AjK | 1:6aec92e77ad2 | 5 | |
AjK | 1:6aec92e77ad2 | 6 | Serial pc(USBTX, USBRX); |
AjK | 1:6aec92e77ad2 | 7 | DigitalOut led1(LED1); |
AjK | 1:6aec92e77ad2 | 8 | |
AjK | 1:6aec92e77ad2 | 9 | // SET THIS. |
AjK | 1:6aec92e77ad2 | 10 | // Create an instance of the GPS object. You will need to |
AjK | 1:6aec92e77ad2 | 11 | // set p25 to whichever Serial RX pin you have connected |
AjK | 1:6aec92e77ad2 | 12 | // your GPS module to. |
AjK | 1:6aec92e77ad2 | 13 | GPS gps(NC, GPSRX); |
AjK | 1:6aec92e77ad2 | 14 | |
AjK | 1:6aec92e77ad2 | 15 | // 0.1 second flash of LED2 |
AjK | 1:6aec92e77ad2 | 16 | DigitalOut led2(LED2); |
AjK | 1:6aec92e77ad2 | 17 | Timeout t2; |
AjK | 1:6aec92e77ad2 | 18 | void t2out(void) { led2 = 0; } |
AjK | 1:6aec92e77ad2 | 19 | void blip2(void) { led2 = 1; t2.attach(&t2out, 0.1); } |
AjK | 1:6aec92e77ad2 | 20 | |
AjK | 1:6aec92e77ad2 | 21 | // 0.1 second flash of LED3 |
AjK | 1:6aec92e77ad2 | 22 | DigitalOut led3(LED3); |
AjK | 1:6aec92e77ad2 | 23 | Timeout t3; |
AjK | 1:6aec92e77ad2 | 24 | void t3out(void) { led3 = 0; } |
AjK | 1:6aec92e77ad2 | 25 | void blip3(void) { led3 = 1; t3.attach(&t3out, 0.1); } |
AjK | 1:6aec92e77ad2 | 26 | |
AjK | 1:6aec92e77ad2 | 27 | // 0.1 second flash of LED4 |
AjK | 1:6aec92e77ad2 | 28 | DigitalOut led4(LED4); |
AjK | 1:6aec92e77ad2 | 29 | |
AjK | 1:6aec92e77ad2 | 30 | Timeout t4; |
AjK | 1:6aec92e77ad2 | 31 | void t4out(void) { led4 = 0; } |
AjK | 1:6aec92e77ad2 | 32 | void blip4(void) { led4 = 1; t4.attach(&t4out, 0.1); } |
AjK | 1:6aec92e77ad2 | 33 | |
AjK | 1:6aec92e77ad2 | 34 | int main() { |
AjK | 1:6aec92e77ad2 | 35 | GPS_Time q1; |
AjK | 1:6aec92e77ad2 | 36 | |
AjK | 1:6aec92e77ad2 | 37 | // SET THIS. |
AjK | 1:6aec92e77ad2 | 38 | // Ensure you set the baud rate to match your serial |
AjK | 1:6aec92e77ad2 | 39 | // communications to your PC/Max/Linux host so you |
AjK | 1:6aec92e77ad2 | 40 | // can read the messages. |
AjK | 1:6aec92e77ad2 | 41 | pc.baud(PCBAUD); |
AjK | 1:6aec92e77ad2 | 42 | |
AjK | 1:6aec92e77ad2 | 43 | // SET THIS. |
AjK | 1:6aec92e77ad2 | 44 | // Most GPS modules use 9600,8,n,1 so that's what |
AjK | 1:6aec92e77ad2 | 45 | // we default to here. Ensure your GPS module matches |
AjK | 1:6aec92e77ad2 | 46 | // this, otherwise set it to match. |
AjK | 1:6aec92e77ad2 | 47 | gps.baud(GPSBUAD); |
AjK | 1:6aec92e77ad2 | 48 | gps.format(8, GPS::None, 1); |
AjK | 1:6aec92e77ad2 | 49 | |
AjK | 1:6aec92e77ad2 | 50 | // OPTIONAL |
AjK | 1:6aec92e77ad2 | 51 | // If you GPS has a 1 pulse per second output you can |
AjK | 1:6aec92e77ad2 | 52 | // connect it to an Mbed pin. Here you specify what pin |
AjK | 1:6aec92e77ad2 | 53 | // and on what "edge" teh signal is active. If your GPS |
AjK | 1:6aec92e77ad2 | 54 | // module has a rising edge at the one second point then |
AjK | 1:6aec92e77ad2 | 55 | // use GPS::ppsRise |
AjK | 1:6aec92e77ad2 | 56 | #ifdef PPSPIN |
AjK | 1:6aec92e77ad2 | 57 | gps.ppsAttach(PPSPIN, GPS::ppsFall); |
AjK | 1:6aec92e77ad2 | 58 | #endif |
AjK | 1:6aec92e77ad2 | 59 | |
AjK | 1:6aec92e77ad2 | 60 | // Sample of a callback to a function when the 1PPS activates. |
AjK | 1:6aec92e77ad2 | 61 | // For this example, we flash LED2 for 0.1 second. |
AjK | 1:6aec92e77ad2 | 62 | gps.attach_pps(&blip2); |
AjK | 1:6aec92e77ad2 | 63 | |
AjK | 1:6aec92e77ad2 | 64 | // Sample of a callback to a function when a NMEA GGA message is recieved. |
AjK | 1:6aec92e77ad2 | 65 | // For this example, we flash LED2 for 0.1 second. |
AjK | 1:6aec92e77ad2 | 66 | gps.attach_gga(&blip3); |
AjK | 1:6aec92e77ad2 | 67 | |
AjK | 1:6aec92e77ad2 | 68 | // Sample of a callback to a function when a NMEA RMC message is recieved. |
AjK | 1:6aec92e77ad2 | 69 | // For this example, we flash LED2 for 0.1 second. |
AjK | 1:6aec92e77ad2 | 70 | gps.attach_rmc(&blip4); |
AjK | 1:6aec92e77ad2 | 71 | |
AjK | 1:6aec92e77ad2 | 72 | while(1) { |
AjK | 1:6aec92e77ad2 | 73 | // Every 3 seconds, flip LED1 and print the basic GPS info. |
AjK | 1:6aec92e77ad2 | 74 | wait(3); |
AjK | 1:6aec92e77ad2 | 75 | led1 = 1; |
AjK | 1:6aec92e77ad2 | 76 | |
AjK | 1:6aec92e77ad2 | 77 | // Demonstrate how to find out the GPS location co-ords. |
AjK | 1:6aec92e77ad2 | 78 | pc.printf("Method 1. Lat = %.4f ", gps.latitude()); |
AjK | 1:6aec92e77ad2 | 79 | pc.printf("Lon = %.4f ", gps.longitude()); |
AjK | 1:6aec92e77ad2 | 80 | pc.printf("Alt = %.4f ", gps.altitude()); |
AjK | 1:6aec92e77ad2 | 81 | |
AjK | 1:6aec92e77ad2 | 82 | // Gran a snapshot of the current time. |
AjK | 1:6aec92e77ad2 | 83 | gps.timeNow(&q1); |
AjK | 1:6aec92e77ad2 | 84 | pc.printf("%02d:%02d:%02d %02d/%02d/%04d\r\n", |
AjK | 1:6aec92e77ad2 | 85 | q1.hour, q1.minute, q1.second, q1.day, q1.month, q1.year); |
AjK | 1:6aec92e77ad2 | 86 | |
AjK | 1:6aec92e77ad2 | 87 | // Alternative method that does the same thing. |
AjK | 1:6aec92e77ad2 | 88 | pc.printf("Method 2. Lat = %.4f ", gps.latitude()); |
AjK | 1:6aec92e77ad2 | 89 | pc.printf("Lon = %.4f ", gps.longitude()); |
AjK | 1:6aec92e77ad2 | 90 | pc.printf("Alt = %.4f ", gps.altitude()); |
AjK | 1:6aec92e77ad2 | 91 | |
AjK | 1:6aec92e77ad2 | 92 | GPS_Time *q2 = gps.timeNow(); |
AjK | 1:6aec92e77ad2 | 93 | pc.printf("%02d:%02d:%02d %02d/%02d/%04d\r\n\n", |
AjK | 1:6aec92e77ad2 | 94 | q2->hour, q2->minute, q2->second, q2->day, q2->month, q2->year); |
AjK | 1:6aec92e77ad2 | 95 | delete(q2); |
AjK | 1:6aec92e77ad2 | 96 | led1 = 0; |
AjK | 1:6aec92e77ad2 | 97 | } |
AjK | 1:6aec92e77ad2 | 98 | } |
AjK | 1:6aec92e77ad2 | 99 | |
AjK | 1:6aec92e77ad2 | 100 | #endif |