![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Grove GPS sensor with FRDM K64F to get NMEA data and to parse the NMEA sentences to get the Latitude and Longitude information.
Diff: main.cpp
- Revision:
- 0:0da308226fbd
- Child:
- 1:694c547e2961
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Apr 19 20:39:26 2017 +0000 @@ -0,0 +1,122 @@ +#include "mbed.h" + +Serial pc(USBTX, USBRX); +Serial gps(PTB11, PTB10); + +int main() +{ + pc.baud(9600); + gps.baud(9600); + + char buffer[128]; // NMEA data, Example: $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47 + char * split; + char part1[12] = ""; // GGA Global Positioning System Fix Data + char part2[12] = ""; // 123519 Fix taken at 12:35:19 UTC + char part3[12] = ""; // 4807.038 Latitude 48 deg 07.038' + char part4[12] = ""; // N Direction - North + char part5[12] = ""; // 01131.000 Longitude 11 deg 31.000' + char part6[12] = ""; // E Direction - East + char part7[12] = ""; // 1 Fix quality: 0 = invalid + // 1 = GPS fix (SPS) + // 2 = DGPS fix + // 3 = PPS fix + // 4 = Real Time Kinematic + // 5 = Float RTK + // 6 = estimated (dead reckoning) (2.3 feature) + // 7 = Manual input mode + // 8 = Simulation mode + char part8[12] = ""; // 08 Number of satellites being tracked + char part9[12] = ""; // 0.9 Horizontal dilution of position + char part10[12] = ""; // 545.4 Altitude, Meters + char part11[12] = ""; // M above mean sea level + char part12[12] = ""; // 46.9 Height of geoid (mean sea level) above WGS84 ellipsoid + char part13[12] = ""; // M above mean sea level + char part14[12] = ""; // (empty field) time in seconds since last DGPS update + char part15[12] = ""; // *47 the checksum data, always begins with * + + //int count=0; + + pc.printf(" Hello World!\r\n"); + + while(true) { + // if(pc.readable()) { + // gps.putc(pc.getc()); + // } + + if(gps.readable()) { + gps.gets(buffer, 70); + + if(buffer[0] == '$' && buffer[5] == 'A') //&& buffer[2] == '' && buffer[1] == 'G' && buffer[1] == 'G') + { + pc.printf("NMEA data = '%s'\r\n", buffer); // NMEA data, Example: $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47 + pc.printf("Length = %d \r\n",strlen(buffer)); // Length of the NMEA data sentence + split = strtok(buffer, ","); + while(split != NULL) { + strcpy(part1,split); + pc.printf(" Global Positioning System Fix Data: '%s'\r\n",part1); + split = strtok(NULL,","); + + strcpy(part2,split); + pc.printf(" Fix taken at: '%s'\r\n",part2); + split = strtok(NULL,","); + + strcpy(part3,split); + pc.printf(" Latitude: '%s'\r\n",part3); + split = strtok(NULL,","); + + strcpy(part4,split); + pc.printf(" Direction: '%s'\r\n",part4); + split = strtok(NULL,","); + + strcpy(part5,split); + pc.printf(" Longitude: '%s'\r\n",part5); + split = strtok(NULL,","); + + strcpy(part6,split); + pc.printf(" Direction: '%s'\r\n",part6); + split = strtok(NULL,","); + + strcpy(part7,split); + pc.printf(" Fix quality: '%s'\r\n",part7); + split = strtok(NULL,","); + + strcpy(part8,split); + pc.printf(" Number of satellites being tracked: '%s'\r\n",part8); + split = strtok(NULL,","); + + strcpy(part9,split); + pc.printf(" Horizontal dilution of position: '%s'\r\n",part9); + split = strtok(NULL,","); + + strcpy(part10,split); + pc.printf(" Altitude, Meters: '%s'\r\n",part10); + split = strtok(NULL,","); + + strcpy(part11,split); + pc.printf(" '%s'\r\n",part11); + split = strtok(NULL,","); + + strcpy(part12,split); + pc.printf(" Height of geoid (mean sea level) above WGS84 ellipsoid: '%s'\r\n",part12); + split = strtok(NULL,","); + + strcpy(part13,split); + pc.printf(" '%s'\r\n",part13); + split = strtok(NULL,","); + + strcpy(part14,split); + pc.printf(" (empty fields): '%s'\r\n",part14); + split = strtok(NULL,","); + + strcpy(part15,split); + pc.printf(" The checksum data: '%s'\r\n",part15); + split = strtok(NULL,","); + + + } + //return 0; + } + + } + } + \ No newline at end of file