Example program to demonstrate the use of the GnssSerial class.

Dependencies:   gnss

Committer:
RobMeades
Date:
Tue Jun 06 08:30:05 2017 +0000
Revision:
0:5eb7846b73b4
Child:
1:3c41bde6d0bc
Initial revision.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RobMeades 0:5eb7846b73b4 1 /* mbed Microcontroller Library
RobMeades 0:5eb7846b73b4 2 * Copyright (c) 2017 u-blox
RobMeades 0:5eb7846b73b4 3 *
RobMeades 0:5eb7846b73b4 4 * Licensed under the Apache License, Version 2.0 (the "License");
RobMeades 0:5eb7846b73b4 5 * you may not use this file except in compliance with the License.
RobMeades 0:5eb7846b73b4 6 * You may obtain a copy of the License at
RobMeades 0:5eb7846b73b4 7 *
RobMeades 0:5eb7846b73b4 8 * http://www.apache.org/licenses/LICENSE-2.0
RobMeades 0:5eb7846b73b4 9 *
RobMeades 0:5eb7846b73b4 10 * Unless required by applicable law or agreed to in writing, software
RobMeades 0:5eb7846b73b4 11 * distributed under the License is distributed on an "AS IS" BASIS,
RobMeades 0:5eb7846b73b4 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
RobMeades 0:5eb7846b73b4 13 * See the License for the specific language governing permissions and
RobMeades 0:5eb7846b73b4 14 * limitations under the License.
RobMeades 0:5eb7846b73b4 15 */
RobMeades 0:5eb7846b73b4 16
RobMeades 0:5eb7846b73b4 17 #include "mbed.h"
RobMeades 0:5eb7846b73b4 18 #include "gnss.h"
RobMeades 0:5eb7846b73b4 19
RobMeades 0:5eb7846b73b4 20 #define _CHECK_TALKER(s) ((buffer[3] == s[0]) && (buffer[4] == s[1]) && (buffer[5] == s[2]))
RobMeades 0:5eb7846b73b4 21
RobMeades 0:5eb7846b73b4 22 // LEDs
RobMeades 0:5eb7846b73b4 23 DigitalOut ledRed(LED1, 1);
RobMeades 0:5eb7846b73b4 24 DigitalOut ledGreen(LED2, 1);
RobMeades 0:5eb7846b73b4 25 DigitalOut ledBlue(LED3, 1);
RobMeades 0:5eb7846b73b4 26
RobMeades 0:5eb7846b73b4 27 /* This example program for the u-blox C030 board instantiates
RobMeades 0:5eb7846b73b4 28 * the gnss interface and waits for time/position to be received from a satellite.
RobMeades 0:5eb7846b73b4 29 * Progress may be monitored with a serial terminal running at 9600 baud.
RobMeades 0:5eb7846b73b4 30 * The LED on the C030 board will turn green when this program is
RobMeades 0:5eb7846b73b4 31 * operating correctly, pulse blue when a time reading has been received,
RobMeades 0:5eb7846b73b4 32 * pulse white when GNSS position has been received or turn red if there is
RobMeades 0:5eb7846b73b4 33 * a failure.
RobMeades 0:5eb7846b73b4 34 */
RobMeades 0:5eb7846b73b4 35
RobMeades 0:5eb7846b73b4 36 int main()
RobMeades 0:5eb7846b73b4 37 {
RobMeades 0:5eb7846b73b4 38 GnssSerial gnss;
RobMeades 0:5eb7846b73b4 39 int gnssReturnCode;
RobMeades 0:5eb7846b73b4 40 int length;
RobMeades 0:5eb7846b73b4 41 char buffer[256];
RobMeades 0:5eb7846b73b4 42 char link[128] = "";
RobMeades 0:5eb7846b73b4 43
RobMeades 0:5eb7846b73b4 44 // Initialise GNSS
RobMeades 0:5eb7846b73b4 45 gnss.init();
RobMeades 0:5eb7846b73b4 46
RobMeades 0:5eb7846b73b4 47 printf ("Waiting for GNSS to receive...\n");
RobMeades 0:5eb7846b73b4 48 while (1) {
RobMeades 0:5eb7846b73b4 49 ledGreen = 1;
RobMeades 0:5eb7846b73b4 50 ledRed = 1;
RobMeades 0:5eb7846b73b4 51 ledBlue = 1;
RobMeades 0:5eb7846b73b4 52
RobMeades 0:5eb7846b73b4 53 gnssReturnCode = gnss.getMessage(buffer, sizeof(buffer));
RobMeades 0:5eb7846b73b4 54 if (gnssReturnCode > 0) {
RobMeades 0:5eb7846b73b4 55 ledGreen = 0;
RobMeades 0:5eb7846b73b4 56 length = LENGTH(gnssReturnCode);
RobMeades 0:5eb7846b73b4 57
RobMeades 0:5eb7846b73b4 58 printf("NMEA: %.*s\n", length - 2, buffer);
RobMeades 0:5eb7846b73b4 59
RobMeades 0:5eb7846b73b4 60 if ((PROTOCOL(gnssReturnCode) == GnssParser::NMEA) && (length > 6)) {
RobMeades 0:5eb7846b73b4 61 // talker is $GA=Galileo $GB=Beidou $GL=Glonass $GN=Combined $GP=GNSS
RobMeades 0:5eb7846b73b4 62 if ((buffer[0] == '$') || buffer[1] == 'G') {
RobMeades 0:5eb7846b73b4 63 if (_CHECK_TALKER("GLL")) {
RobMeades 0:5eb7846b73b4 64 double latitude = 0, longitude = 0;
RobMeades 0:5eb7846b73b4 65 char ch;
RobMeades 0:5eb7846b73b4 66
RobMeades 0:5eb7846b73b4 67 if (gnss.getNmeaAngle(1, buffer, length, latitude) &&
RobMeades 0:5eb7846b73b4 68 gnss.getNmeaAngle(3, buffer, length, longitude) &&
RobMeades 0:5eb7846b73b4 69 gnss.getNmeaItem(6, buffer, length, ch) && ch == 'A')
RobMeades 0:5eb7846b73b4 70 {
RobMeades 0:5eb7846b73b4 71 ledBlue = 0;
RobMeades 0:5eb7846b73b4 72 ledRed = 0;
RobMeades 0:5eb7846b73b4 73 ledGreen = 0;
RobMeades 0:5eb7846b73b4 74
RobMeades 0:5eb7846b73b4 75 printf("GNSS: location is %.5f %.5f.\n", latitude,
RobMeades 0:5eb7846b73b4 76 longitude);
RobMeades 0:5eb7846b73b4 77 sprintf(link, "I am here!\n"
RobMeades 0:5eb7846b73b4 78 "https://maps.google.com/?q=%.5f,%.5f\n",
RobMeades 0:5eb7846b73b4 79 latitude, longitude);
RobMeades 0:5eb7846b73b4 80 }
RobMeades 0:5eb7846b73b4 81 } else if (_CHECK_TALKER("GGA") || _CHECK_TALKER("GNS") ) {
RobMeades 0:5eb7846b73b4 82 double altitude = 0;
RobMeades 0:5eb7846b73b4 83 const char *timeString = NULL;
RobMeades 0:5eb7846b73b4 84
RobMeades 0:5eb7846b73b4 85 // altitude msl [m]
RobMeades 0:5eb7846b73b4 86 if (gnss.getNmeaItem(9, buffer, length, altitude)) {
RobMeades 0:5eb7846b73b4 87 printf("GNSS: altitude is %.1f m.\n", altitude);
RobMeades 0:5eb7846b73b4 88 }
RobMeades 0:5eb7846b73b4 89
RobMeades 0:5eb7846b73b4 90 // Retrieve the time
RobMeades 0:5eb7846b73b4 91 timeString = gnss.findNmeaItemPos(1, buffer, buffer +
RobMeades 0:5eb7846b73b4 92 length);
RobMeades 0:5eb7846b73b4 93 if (timeString != NULL) {
RobMeades 0:5eb7846b73b4 94 ledBlue = 0;
RobMeades 0:5eb7846b73b4 95 ledRed = 1;
RobMeades 0:5eb7846b73b4 96 ledGreen = 1;
RobMeades 0:5eb7846b73b4 97
RobMeades 0:5eb7846b73b4 98 printf("GNSS: time is %.6s.\n", timeString);
RobMeades 0:5eb7846b73b4 99 }
RobMeades 0:5eb7846b73b4 100 } else if (_CHECK_TALKER("VTG")) {
RobMeades 0:5eb7846b73b4 101 double speed = 0;
RobMeades 0:5eb7846b73b4 102
RobMeades 0:5eb7846b73b4 103 // speed [km/h]
RobMeades 0:5eb7846b73b4 104 if (gnss.getNmeaItem(7, buffer, length, speed)) {
RobMeades 0:5eb7846b73b4 105 printf("GNSS: speed is %.1f km/h.\n", speed);
RobMeades 0:5eb7846b73b4 106 }
RobMeades 0:5eb7846b73b4 107 }
RobMeades 0:5eb7846b73b4 108 }
RobMeades 0:5eb7846b73b4 109 }
RobMeades 0:5eb7846b73b4 110 }
RobMeades 0:5eb7846b73b4 111 }
RobMeades 0:5eb7846b73b4 112 }
RobMeades 0:5eb7846b73b4 113
RobMeades 0:5eb7846b73b4 114 // End Of File