Grove GPS sensor with FRDM K64F to get NMEA data and to parse the NMEA sentences to get the Latitude and Longitude information.
main.cpp@1:694c547e2961, 2017-05-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |