GPS-library with some changes

Dependents:   GPSXbee GPSXbee_1_1 GPSXbee_1_0 GPSXbeeCamera_1_0

Fork of GPS by Sam Clarke

Committer:
Deurklink
Date:
Fri Jul 04 09:51:19 2014 +0000
Revision:
6:4e2a078995df
Parent:
4:85068b8c3f50
-

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SamClarke 1:0a034c2dbea6 1 #include "GPS.h"
SamClarke 1:0a034c2dbea6 2
Deurklink 6:4e2a078995df 3 GPS::GPS(PinName tx, PinName rx) :
Deurklink 6:4e2a078995df 4 time(0),
Deurklink 6:4e2a078995df 5 hours(0),
Deurklink 6:4e2a078995df 6 minutes(0),
Deurklink 6:4e2a078995df 7 seconds(0),
Deurklink 6:4e2a078995df 8 latitude(0),
Deurklink 6:4e2a078995df 9 longitude(0),
Deurklink 6:4e2a078995df 10 speed(0),
Deurklink 6:4e2a078995df 11 heading(0),
Deurklink 6:4e2a078995df 12 date(0),
Deurklink 6:4e2a078995df 13 fixtype(0),
Deurklink 6:4e2a078995df 14 satellites(0),
Deurklink 6:4e2a078995df 15 altitude(0),
Deurklink 6:4e2a078995df 16 _UltimateGps(tx, rx)
SamClarke 1:0a034c2dbea6 17 {
SamClarke 1:0a034c2dbea6 18 _UltimateGps.baud(9600);
SamClarke 1:0a034c2dbea6 19 }
SamClarke 1:0a034c2dbea6 20
SamClarke 1:0a034c2dbea6 21 int GPS::parseData()
SamClarke 1:0a034c2dbea6 22 {
SamClarke 1:0a034c2dbea6 23
SamClarke 1:0a034c2dbea6 24 while(1) {
SamClarke 1:0a034c2dbea6 25 getData();
SamClarke 1:0a034c2dbea6 26 if(sscanf(NEMA, "GPGGA, %*f, %*f, %*c, %*f, %*c, %d, %d, %*f, %f", &fixtype, &satellites, &altitude) >=1);
SamClarke 2:dcc14e81f8be 27 if(sscanf(NEMA, "GPRMC, %2d%2d%f, %c, %f, %c, %f, %c, %f, %f, %d", &hours, &minutes, &seconds, &validity, &latitude, &ns, &longitude, &ew, &speed, &heading, &date) >=1) {
SamClarke 1:0a034c2dbea6 28 if(fixtype == 0) {
SamClarke 1:0a034c2dbea6 29 return 0;
SamClarke 1:0a034c2dbea6 30 }
SamClarke 1:0a034c2dbea6 31 if(ns =='S') {
SamClarke 1:0a034c2dbea6 32 latitude *= -1.0;
SamClarke 1:0a034c2dbea6 33 }
SamClarke 1:0a034c2dbea6 34 if(ew =='W') {
SamClarke 1:0a034c2dbea6 35 longitude *= -1.0;
SamClarke 1:0a034c2dbea6 36 }
SamClarke 1:0a034c2dbea6 37 float degrees = trunc(latitude / 100.0f);
SamClarke 1:0a034c2dbea6 38 float minutes = latitude - (degrees * 100.0f);
SamClarke 1:0a034c2dbea6 39 latitude = degrees + minutes / 60.0f;
SamClarke 1:0a034c2dbea6 40 degrees = trunc(longitude / 100.0f);
SamClarke 1:0a034c2dbea6 41 minutes = longitude - (degrees * 100.0f);
SamClarke 1:0a034c2dbea6 42 longitude = degrees + minutes / 60.0f;
SamClarke 3:5cb504ce2793 43 kph = speed*1.852;
SamClarke 1:0a034c2dbea6 44 return 1;
SamClarke 1:0a034c2dbea6 45 }
SamClarke 1:0a034c2dbea6 46 }
SamClarke 1:0a034c2dbea6 47 }
SamClarke 1:0a034c2dbea6 48
SamClarke 1:0a034c2dbea6 49
SamClarke 1:0a034c2dbea6 50 float GPS::trunc(float v)
SamClarke 1:0a034c2dbea6 51 {
SamClarke 1:0a034c2dbea6 52 if(v < 0.0) {
SamClarke 1:0a034c2dbea6 53 v*= -1.0;
SamClarke 1:0a034c2dbea6 54 v = floor(v);
SamClarke 1:0a034c2dbea6 55 v*=-1.0;
SamClarke 1:0a034c2dbea6 56 } else {
SamClarke 1:0a034c2dbea6 57 v = floor(v);
SamClarke 1:0a034c2dbea6 58 }
SamClarke 1:0a034c2dbea6 59 return v;
SamClarke 1:0a034c2dbea6 60 }
SamClarke 1:0a034c2dbea6 61
SamClarke 1:0a034c2dbea6 62 void GPS::getData()
SamClarke 1:0a034c2dbea6 63 {
SamClarke 1:0a034c2dbea6 64 while(_UltimateGps.getc() != '$');
SamClarke 1:0a034c2dbea6 65 for(int i=0; i<256; i++) {
SamClarke 1:0a034c2dbea6 66 NEMA[i] = _UltimateGps.getc();
SamClarke 1:0a034c2dbea6 67 if(NEMA[i] == '\r') {
SamClarke 1:0a034c2dbea6 68 NEMA[i] = 0;
SamClarke 1:0a034c2dbea6 69 return;
SamClarke 1:0a034c2dbea6 70 }
SamClarke 1:0a034c2dbea6 71 }
SamClarke 1:0a034c2dbea6 72 error("overflowed message limit");
SamClarke 1:0a034c2dbea6 73 }
SamClarke 1:0a034c2dbea6 74
SamClarke 1:0a034c2dbea6 75 void GPS::Init()
SamClarke 1:0a034c2dbea6 76 {
Deurklink 4:85068b8c3f50 77 _UltimateGps.printf("$PMTK220,1000*1F\r\n");
SamClarke 1:0a034c2dbea6 78 wait(1);
SamClarke 1:0a034c2dbea6 79 _UltimateGps.printf("$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n");
SamClarke 1:0a034c2dbea6 80 wait(1);
SamClarke 1:0a034c2dbea6 81 }
Deurklink 6:4e2a078995df 82
Deurklink 6:4e2a078995df 83
Deurklink 6:4e2a078995df 84 bool GPS::readable()
Deurklink 6:4e2a078995df 85 {
Deurklink 6:4e2a078995df 86 if (_UltimateGps.readable())
Deurklink 6:4e2a078995df 87 return true;
Deurklink 6:4e2a078995df 88 else
Deurklink 6:4e2a078995df 89 return false;
Deurklink 6:4e2a078995df 90 }
Deurklink 6:4e2a078995df 91