![](/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.
main.cpp@0:0da308226fbd, 2017-04-19 (annotated)
- Committer:
- charlie316
- Date:
- Wed Apr 19 20:39:26 2017 +0000
- Revision:
- 0:0da308226fbd
- Child:
- 1:694c547e2961
Grove GPS sensor Sim28
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 | 0:0da308226fbd | 122 |