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

Committer:
charlie316
Date:
Thu May 04 04:44:06 2017 +0000
Revision:
1:694c547e2961
Parent:
0:0da308226fbd
Grove GPS sensor with FRDM K64F to get NMEA data and to parse the NMEA sentences to get the Latitude and Longitude information.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charlie316 0:0da308226fbd 1 #include "mbed.h"
charlie316 0:0da308226fbd 2
charlie316 0:0da308226fbd 3 Serial pc(USBTX, USBRX);
charlie316 0:0da308226fbd 4 Serial gps(PTB11, PTB10);
charlie316 0:0da308226fbd 5
charlie316 0:0da308226fbd 6 int main()
charlie316 0:0da308226fbd 7 {
charlie316 0:0da308226fbd 8 pc.baud(9600);
charlie316 0:0da308226fbd 9 gps.baud(9600);
charlie316 0:0da308226fbd 10
charlie316 0:0da308226fbd 11 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
charlie316 0:0da308226fbd 12 char * split;
charlie316 0:0da308226fbd 13 char part1[12] = ""; // GGA Global Positioning System Fix Data
charlie316 0:0da308226fbd 14 char part2[12] = ""; // 123519 Fix taken at 12:35:19 UTC
charlie316 0:0da308226fbd 15 char part3[12] = ""; // 4807.038 Latitude 48 deg 07.038'
charlie316 0:0da308226fbd 16 char part4[12] = ""; // N Direction - North
charlie316 0:0da308226fbd 17 char part5[12] = ""; // 01131.000 Longitude 11 deg 31.000'
charlie316 0:0da308226fbd 18 char part6[12] = ""; // E Direction - East
charlie316 0:0da308226fbd 19 char part7[12] = ""; // 1 Fix quality: 0 = invalid
charlie316 0:0da308226fbd 20 // 1 = GPS fix (SPS)
charlie316 0:0da308226fbd 21 // 2 = DGPS fix
charlie316 0:0da308226fbd 22 // 3 = PPS fix
charlie316 0:0da308226fbd 23 // 4 = Real Time Kinematic
charlie316 0:0da308226fbd 24 // 5 = Float RTK
charlie316 0:0da308226fbd 25 // 6 = estimated (dead reckoning) (2.3 feature)
charlie316 0:0da308226fbd 26 // 7 = Manual input mode
charlie316 0:0da308226fbd 27 // 8 = Simulation mode
charlie316 0:0da308226fbd 28 char part8[12] = ""; // 08 Number of satellites being tracked
charlie316 0:0da308226fbd 29 char part9[12] = ""; // 0.9 Horizontal dilution of position
charlie316 0:0da308226fbd 30 char part10[12] = ""; // 545.4 Altitude, Meters
charlie316 0:0da308226fbd 31 char part11[12] = ""; // M above mean sea level
charlie316 0:0da308226fbd 32 char part12[12] = ""; // 46.9 Height of geoid (mean sea level) above WGS84 ellipsoid
charlie316 0:0da308226fbd 33 char part13[12] = ""; // M above mean sea level
charlie316 0:0da308226fbd 34 char part14[12] = ""; // (empty field) time in seconds since last DGPS update
charlie316 0:0da308226fbd 35 char part15[12] = ""; // *47 the checksum data, always begins with *
charlie316 0:0da308226fbd 36
charlie316 0:0da308226fbd 37 //int count=0;
charlie316 0:0da308226fbd 38
charlie316 0:0da308226fbd 39 pc.printf(" Hello World!\r\n");
charlie316 0:0da308226fbd 40
charlie316 0:0da308226fbd 41 while(true) {
charlie316 0:0da308226fbd 42 // if(pc.readable()) {
charlie316 0:0da308226fbd 43 // gps.putc(pc.getc());
charlie316 0:0da308226fbd 44 // }
charlie316 0:0da308226fbd 45
charlie316 0:0da308226fbd 46 if(gps.readable()) {
charlie316 0:0da308226fbd 47 gps.gets(buffer, 70);
charlie316 0:0da308226fbd 48
charlie316 0:0da308226fbd 49 if(buffer[0] == '$' && buffer[5] == 'A') //&& buffer[2] == '' && buffer[1] == 'G' && buffer[1] == 'G')
charlie316 0:0da308226fbd 50 {
charlie316 0:0da308226fbd 51 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
charlie316 0:0da308226fbd 52 pc.printf("Length = %d \r\n",strlen(buffer)); // Length of the NMEA data sentence
charlie316 0:0da308226fbd 53 split = strtok(buffer, ",");
charlie316 0:0da308226fbd 54 while(split != NULL) {
charlie316 0:0da308226fbd 55 strcpy(part1,split);
charlie316 0:0da308226fbd 56 pc.printf(" Global Positioning System Fix Data: '%s'\r\n",part1);
charlie316 0:0da308226fbd 57 split = strtok(NULL,",");
charlie316 0:0da308226fbd 58
charlie316 0:0da308226fbd 59 strcpy(part2,split);
charlie316 0:0da308226fbd 60 pc.printf(" Fix taken at: '%s'\r\n",part2);
charlie316 0:0da308226fbd 61 split = strtok(NULL,",");
charlie316 0:0da308226fbd 62
charlie316 0:0da308226fbd 63 strcpy(part3,split);
charlie316 0:0da308226fbd 64 pc.printf(" Latitude: '%s'\r\n",part3);
charlie316 0:0da308226fbd 65 split = strtok(NULL,",");
charlie316 0:0da308226fbd 66
charlie316 0:0da308226fbd 67 strcpy(part4,split);
charlie316 0:0da308226fbd 68 pc.printf(" Direction: '%s'\r\n",part4);
charlie316 0:0da308226fbd 69 split = strtok(NULL,",");
charlie316 0:0da308226fbd 70
charlie316 0:0da308226fbd 71 strcpy(part5,split);
charlie316 0:0da308226fbd 72 pc.printf(" Longitude: '%s'\r\n",part5);
charlie316 0:0da308226fbd 73 split = strtok(NULL,",");
charlie316 0:0da308226fbd 74
charlie316 0:0da308226fbd 75 strcpy(part6,split);
charlie316 0:0da308226fbd 76 pc.printf(" Direction: '%s'\r\n",part6);
charlie316 0:0da308226fbd 77 split = strtok(NULL,",");
charlie316 0:0da308226fbd 78
charlie316 0:0da308226fbd 79 strcpy(part7,split);
charlie316 0:0da308226fbd 80 pc.printf(" Fix quality: '%s'\r\n",part7);
charlie316 0:0da308226fbd 81 split = strtok(NULL,",");
charlie316 0:0da308226fbd 82
charlie316 0:0da308226fbd 83 strcpy(part8,split);
charlie316 0:0da308226fbd 84 pc.printf(" Number of satellites being tracked: '%s'\r\n",part8);
charlie316 0:0da308226fbd 85 split = strtok(NULL,",");
charlie316 0:0da308226fbd 86
charlie316 0:0da308226fbd 87 strcpy(part9,split);
charlie316 0:0da308226fbd 88 pc.printf(" Horizontal dilution of position: '%s'\r\n",part9);
charlie316 0:0da308226fbd 89 split = strtok(NULL,",");
charlie316 0:0da308226fbd 90
charlie316 0:0da308226fbd 91 strcpy(part10,split);
charlie316 0:0da308226fbd 92 pc.printf(" Altitude, Meters: '%s'\r\n",part10);
charlie316 0:0da308226fbd 93 split = strtok(NULL,",");
charlie316 0:0da308226fbd 94
charlie316 0:0da308226fbd 95 strcpy(part11,split);
charlie316 0:0da308226fbd 96 pc.printf(" '%s'\r\n",part11);
charlie316 0:0da308226fbd 97 split = strtok(NULL,",");
charlie316 0:0da308226fbd 98
charlie316 0:0da308226fbd 99 strcpy(part12,split);
charlie316 0:0da308226fbd 100 pc.printf(" Height of geoid (mean sea level) above WGS84 ellipsoid: '%s'\r\n",part12);
charlie316 0:0da308226fbd 101 split = strtok(NULL,",");
charlie316 0:0da308226fbd 102
charlie316 0:0da308226fbd 103 strcpy(part13,split);
charlie316 0:0da308226fbd 104 pc.printf(" '%s'\r\n",part13);
charlie316 0:0da308226fbd 105 split = strtok(NULL,",");
charlie316 0:0da308226fbd 106
charlie316 0:0da308226fbd 107 strcpy(part14,split);
charlie316 0:0da308226fbd 108 pc.printf(" (empty fields): '%s'\r\n",part14);
charlie316 0:0da308226fbd 109 split = strtok(NULL,",");
charlie316 0:0da308226fbd 110
charlie316 0:0da308226fbd 111 strcpy(part15,split);
charlie316 0:0da308226fbd 112 pc.printf(" The checksum data: '%s'\r\n",part15);
charlie316 0:0da308226fbd 113 split = strtok(NULL,",");
charlie316 0:0da308226fbd 114
charlie316 0:0da308226fbd 115
charlie316 0:0da308226fbd 116 }
charlie316 0:0da308226fbd 117 //return 0;
charlie316 0:0da308226fbd 118 }
charlie316 0:0da308226fbd 119
charlie316 0:0da308226fbd 120 }
charlie316 0:0da308226fbd 121 }
charlie316 1:694c547e2961 122 }