Example program to demonstrate the use of the GnssSerial class.
Dependencies: gnss
Diff: main.cpp
- Revision:
- 1:3c41bde6d0bc
- Parent:
- 0:5eb7846b73b4
- Child:
- 6:881e2bbf29e4
diff -r 5eb7846b73b4 -r 3c41bde6d0bc main.cpp --- a/main.cpp Tue Jun 06 08:30:05 2017 +0000 +++ b/main.cpp Tue Jun 06 21:06:04 2017 +0100 @@ -17,14 +17,14 @@ #include "mbed.h" #include "gnss.h" -#define _CHECK_TALKER(s) ((buffer[3] == s[0]) && (buffer[4] == s[1]) && (buffer[5] == s[2])) +#define CHECK_TALKER(s) ((buffer[3] == s[0]) && (buffer[4] == s[1]) && (buffer[5] == s[2])) // LEDs DigitalOut ledRed(LED1, 1); DigitalOut ledGreen(LED2, 1); DigitalOut ledBlue(LED3, 1); -/* This example program for the u-blox C030 board instantiates +/* This example program for the u-blox C030 and C027 boards instantiates * the gnss interface and waits for time/position to be received from a satellite. * Progress may be monitored with a serial terminal running at 9600 baud. * The LED on the C030 board will turn green when this program is @@ -41,74 +41,77 @@ char buffer[256]; char link[128] = ""; - // Initialise GNSS - gnss.init(); - - printf ("Waiting for GNSS to receive...\n"); - while (1) { - ledGreen = 1; - ledRed = 1; - ledBlue = 1; + printf ("Starting up...\n"); + if (gnss.init()) { + printf ("Waiting for GNSS to receive something...\n"); + while (1) { + gnssReturnCode = gnss.getMessage(buffer, sizeof(buffer)); + if (gnssReturnCode > 0) { + ledGreen = 0; + ledBlue = 1; + ledRed = 1; + length = LENGTH(gnssReturnCode); + + printf("NMEA: %.*s\n", length - 2, buffer); - gnssReturnCode = gnss.getMessage(buffer, sizeof(buffer)); - if (gnssReturnCode > 0) { - ledGreen = 0; - length = LENGTH(gnssReturnCode); - - printf("NMEA: %.*s\n", length - 2, buffer); - - if ((PROTOCOL(gnssReturnCode) == GnssParser::NMEA) && (length > 6)) { - // talker is $GA=Galileo $GB=Beidou $GL=Glonass $GN=Combined $GP=GNSS - if ((buffer[0] == '$') || buffer[1] == 'G') { - if (_CHECK_TALKER("GLL")) { - double latitude = 0, longitude = 0; - char ch; - - if (gnss.getNmeaAngle(1, buffer, length, latitude) && - gnss.getNmeaAngle(3, buffer, length, longitude) && - gnss.getNmeaItem(6, buffer, length, ch) && ch == 'A') - { - ledBlue = 0; - ledRed = 0; - ledGreen = 0; + if ((PROTOCOL(gnssReturnCode) == GnssParser::NMEA) && (length > 6)) { + // Talker is $GA=Galileo $GB=Beidou $GL=Glonass $GN=Combined $GP=GNSS + if ((buffer[0] == '$') || buffer[1] == 'G') { + if (CHECK_TALKER("GLL")) { + double latitude = 0, longitude = 0; + char ch; - printf("GNSS: location is %.5f %.5f.\n", latitude, - longitude); - sprintf(link, "I am here!\n" - "https://maps.google.com/?q=%.5f,%.5f\n", - latitude, longitude); - } - } else if (_CHECK_TALKER("GGA") || _CHECK_TALKER("GNS") ) { - double altitude = 0; - const char *timeString = NULL; - - // altitude msl [m] - if (gnss.getNmeaItem(9, buffer, length, altitude)) { - printf("GNSS: altitude is %.1f m.\n", altitude); - } - - // Retrieve the time - timeString = gnss.findNmeaItemPos(1, buffer, buffer + - length); - if (timeString != NULL) { - ledBlue = 0; - ledRed = 1; - ledGreen = 1; + if (gnss.getNmeaAngle(1, buffer, length, latitude) && + gnss.getNmeaAngle(3, buffer, length, longitude) && + gnss.getNmeaItem(6, buffer, length, ch) && (ch == 'A')) { + ledBlue = 0; + ledRed = 0; + ledGreen = 0; + + printf("\nGNSS: location is %.5f %.5f.\n\n", latitude, longitude); + sprintf(link, "I am here!\n" + "https://maps.google.com/?q=%.5f,%.5f\n", + latitude, longitude); + } + } else if (CHECK_TALKER("GGA") || CHECK_TALKER("GNS")) { + double altitude = 0; + const char *timeString = NULL; - printf("GNSS: time is %.6s.\n", timeString); - } - } else if (_CHECK_TALKER("VTG")) { - double speed = 0; - - // speed [km/h] - if (gnss.getNmeaItem(7, buffer, length, speed)) { - printf("GNSS: speed is %.1f km/h.\n", speed); + // Altitude + if (gnss.getNmeaItem(9, buffer, length, altitude)) { + printf("\nGNSS: altitude is %.1f m.\n\n", altitude); + } + + // Time + timeString = gnss.findNmeaItemPos(1, buffer, buffer + length); + if (timeString != NULL) { + ledBlue = 0; + ledRed = 1; + ledGreen = 1; + + printf("\nGNSS: time is %.6s.\n\n", timeString); + } + } else if (CHECK_TALKER("VTG")) { + double speed = 0; + + // Speed + if (gnss.getNmeaItem(7, buffer, length, speed)) { + printf("\nGNSS: speed is %.1f km/h.\n\n", speed); + } } } } } } + } else { + printf("Unable to initialise GNSS.\n"); } + + ledRed = 0; + ledGreen = 1; + ledBlue = 1; + printf("Should never get here.\n"); + MBED_ASSERT(false); } // End Of File \ No newline at end of file