fahim alavi
/
example-gnss
Example with new gnss libraries
Fork of example-gnss by
Revision 0:5eb7846b73b4, committed 2017-06-06
- Comitter:
- RobMeades
- Date:
- Tue Jun 06 08:30:05 2017 +0000
- Child:
- 1:3c41bde6d0bc
- Commit message:
- Initial revision.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnss.lib Tue Jun 06 08:30:05 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/teams/ublox/code/gnss/#2a1cd49ead85
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jun 06 08:30:05 2017 +0000 @@ -0,0 +1,114 @@ +/* mbed Microcontroller Library + * Copyright (c) 2017 u-blox + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mbed.h" +#include "gnss.h" + +#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 + * 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 + * operating correctly, pulse blue when a time reading has been received, + * pulse white when GNSS position has been received or turn red if there is + * a failure. + */ + +int main() +{ + GnssSerial gnss; + int gnssReturnCode; + int length; + 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; + + 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; + + 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; + + 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); + } + } + } + } + } + } +} + +// End Of File \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Tue Jun 06 08:30:05 2017 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#5fff7e1daeb395aa3d1ecf3f9ec3f4fead3de0c2