Grove GPS sensor with FRDM K64F to get NMEA data and to parse the NMEA sentences to get the Latitude and Longitude information.

Dependencies:   mbed

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