Example code for reading from a serial GPS unit & parsing an RMC GPS string to a struct.

Dependencies:   mbed

Fork of mbed_blinky by Mbed

Committer:
HackerLabATTKit01
Date:
Thu Mar 09 21:21:17 2017 +0000
Revision:
16:1bf12f0bb4b9
Parent:
4:81cea7a352b0
Child:
17:15322357429b
Example code for reading from a serial GPS unit & parsing an RMC GPS string into a struct.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan 0:7dec7e9ac085 1 #include "mbed.h"
HackerLabATTKit01 16:1bf12f0bb4b9 2 #include "GPRMCSentence.h"
HackerLabATTKit01 16:1bf12f0bb4b9 3
HackerLabATTKit01 16:1bf12f0bb4b9 4 #define GPSBUFFSIZE 256
HackerLabATTKit01 16:1bf12f0bb4b9 5
HackerLabATTKit01 16:1bf12f0bb4b9 6 Serial pc(USBTX, USBRX); // tx, rx
HackerLabATTKit01 16:1bf12f0bb4b9 7 Serial xgps(PTC15, PTC14);
HackerLabATTKit01 16:1bf12f0bb4b9 8
HackerLabATTKit01 16:1bf12f0bb4b9 9 unsigned gpsSentenceIndex = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 10 char gpsSentence[GPSBUFFSIZE];
HackerLabATTKit01 16:1bf12f0bb4b9 11 volatile bool newline_detected = false;
HackerLabATTKit01 16:1bf12f0bb4b9 12 GPRMCSentence lastPosition;
dan 0:7dec7e9ac085 13
HackerLabATTKit01 16:1bf12f0bb4b9 14 void clearGpsSentence() {
HackerLabATTKit01 16:1bf12f0bb4b9 15 for(int i=0;i<GPSBUFFSIZE;i++) gpsSentence[i] = '\0';
HackerLabATTKit01 16:1bf12f0bb4b9 16 gpsSentenceIndex = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 17 }
HackerLabATTKit01 16:1bf12f0bb4b9 18
HackerLabATTKit01 16:1bf12f0bb4b9 19 int main() {
HackerLabATTKit01 16:1bf12f0bb4b9 20 pc.printf("Where am I? ----------- \n");
HackerLabATTKit01 16:1bf12f0bb4b9 21 clearGpsSentence();
HackerLabATTKit01 16:1bf12f0bb4b9 22 while(1) {
HackerLabATTKit01 16:1bf12f0bb4b9 23 gpsSentence[gpsSentenceIndex] = xgps.getc();
HackerLabATTKit01 16:1bf12f0bb4b9 24 pc.putc(gpsSentence[gpsSentenceIndex]);
HackerLabATTKit01 16:1bf12f0bb4b9 25 gpsSentenceIndex++;
HackerLabATTKit01 16:1bf12f0bb4b9 26 if(gpsSentence[gpsSentenceIndex - 1] == '\n') {
HackerLabATTKit01 16:1bf12f0bb4b9 27 gpsSentence[gpsSentenceIndex] = '\0';
HackerLabATTKit01 16:1bf12f0bb4b9 28 if (parseGPRMCStrToStruct(gpsSentence, &lastPosition) >= 0) {
HackerLabATTKit01 16:1bf12f0bb4b9 29 pc.printf("time: %s Status: %c \n\r" , lastPosition.time, lastPosition.status);
HackerLabATTKit01 16:1bf12f0bb4b9 30 pc.printf("Lat : %s %c \n\r" , lastPosition.latitude, lastPosition.latdir);
HackerLabATTKit01 16:1bf12f0bb4b9 31 pc.printf("Long: %s %c \n\r" , lastPosition.longitude, lastPosition.longdir);
HackerLabATTKit01 16:1bf12f0bb4b9 32 }
HackerLabATTKit01 16:1bf12f0bb4b9 33 clearGpsSentence();
HackerLabATTKit01 16:1bf12f0bb4b9 34 }
HackerLabATTKit01 16:1bf12f0bb4b9 35 }
HackerLabATTKit01 16:1bf12f0bb4b9 36 }
HackerLabATTKit01 16:1bf12f0bb4b9 37
HackerLabATTKit01 16:1bf12f0bb4b9 38
HackerLabATTKit01 16:1bf12f0bb4b9 39 /*include "mbed.h"
HackerLabATTKit01 16:1bf12f0bb4b9 40
HackerLabATTKit01 16:1bf12f0bb4b9 41 DigitalOut rled(LED_RED);
HackerLabATTKit01 16:1bf12f0bb4b9 42 DigitalOut gled(LED_GREEN);
HackerLabATTKit01 16:1bf12f0bb4b9 43 DigitalOut bled(LED_BLUE);
dan 0:7dec7e9ac085 44
dan 0:7dec7e9ac085 45 int main() {
dan 0:7dec7e9ac085 46 while(1) {
HackerLabATTKit01 16:1bf12f0bb4b9 47 rled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 48 gled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 49 bled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 50 wait(0.2);
HackerLabATTKit01 16:1bf12f0bb4b9 51 rled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 52 gled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 53 bled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 54 wait(0.2);
HackerLabATTKit01 16:1bf12f0bb4b9 55 rled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 56 gled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 57 bled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 58 wait(0.2);
HackerLabATTKit01 16:1bf12f0bb4b9 59 rled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 60 gled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 61 bled = 1;
dan 0:7dec7e9ac085 62 wait(0.2);
HackerLabATTKit01 16:1bf12f0bb4b9 63 rled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 64 gled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 65 bled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 66 wait(0.2);
HackerLabATTKit01 16:1bf12f0bb4b9 67 rled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 68 gled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 69 bled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 70 wait(0.2);
HackerLabATTKit01 16:1bf12f0bb4b9 71 rled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 72 gled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 73 bled = 0;
HackerLabATTKit01 16:1bf12f0bb4b9 74 wait(0.2);
HackerLabATTKit01 16:1bf12f0bb4b9 75 rled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 76 gled = 1;
HackerLabATTKit01 16:1bf12f0bb4b9 77 bled = 1;
stevep 4:81cea7a352b0 78 wait(0.2);
stevep 4:81cea7a352b0 79 }
HackerLabATTKit01 16:1bf12f0bb4b9 80 }*/