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:
Wed Apr 19 20:39:26 2017 +0000
Revision:
0:0da308226fbd
Child:
1:694c547e2961
Grove GPS sensor Sim28

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 0:0da308226fbd 122