Updated version with new commands and sleep mode

Fork of GPS by Sam Clarke

Committer:
Spilly
Date:
Mon Apr 27 16:49:11 2015 +0000
Revision:
8:2476bea153a1
Parent:
7:7aac669b0075
Child:
9:083f6fe8e4c4
BoatProject

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Spilly 6:af055728e564 1 /**************************************************************************************************************************************************************
Spilly 6:af055728e564 2 // This is a modified version of mbed /users/SamClarke/code/GPS/ for MTK3339 GPS module
Spilly 6:af055728e564 3 //
Spilly 6:af055728e564 4 // Changes made by Ryan Spillman:
Spilly 7:7aac669b0075 5 //
Spilly 7:7aac669b0075 6 // Last updated: 4/6/2015
Spilly 7:7aac669b0075 7 //
Spilly 6:af055728e564 8 // added commands to the initialization function to set baud rate, set update rate, enabled DGPS WAAS, and set minimum navigation speed
Spilly 6:af055728e564 9 // added a function to put the unit into sleep mode
Spilly 6:af055728e564 10 // added several zeros after the decimal places to fix weird rounding errors
Spilly 6:af055728e564 11 // added information about checksums
Spilly 7:7aac669b0075 12 // Modified parse data function to get all of the NMEA sentences at once. Previously it only grabbed one sentence each time the function was called
Spilly 7:7aac669b0075 13 // Changed latitude and longitude calculation variables to doubles to decrease math errors
Spilly 8:2476bea153a1 14 // Added function to get GPGSA NMEA sentence (we have HDOP!)
Spilly 6:af055728e564 15 //
Spilly 6:af055728e564 16 // IMPORTANT:
Spilly 6:af055728e564 17 // Any changes made to commands sent to GPS unit require corresponding changes to the
Spilly 6:af055728e564 18 // checksum at the end of the command
Spilly 6:af055728e564 19 // Here is a tool for calculating the checksum:
Spilly 6:af055728e564 20 // http://siliconsparrow.com/demos/nmeachecksum.php
Spilly 6:af055728e564 21 **************************************************************************************************************************************************************/
Spilly 6:af055728e564 22
SamClarke 1:0a034c2dbea6 23 #include "GPS.h"
SamClarke 1:0a034c2dbea6 24 GPS::GPS(PinName tx, PinName rx) : _UltimateGps(tx, rx)
SamClarke 1:0a034c2dbea6 25 {
Spilly 6:af055728e564 26 //_UltimateGps.baud(9600); //use this for default MTK3339 adafruit firmware
Spilly 6:af055728e564 27 _UltimateGps.baud(38400); //Changed firmware of MTK3339 to 38400 baud with update rate of 5Hz (GlobalTopFlashTool to change firmware)
SamClarke 1:0a034c2dbea6 28 }
Spilly 7:7aac669b0075 29 void GPS::coldStart()
Spilly 7:7aac669b0075 30 {
Spilly 7:7aac669b0075 31 _UltimateGps.printf("$PMTK103*30\r\n");
Spilly 7:7aac669b0075 32 }
Spilly 7:7aac669b0075 33 int GPS::getGPGGA()
Spilly 7:7aac669b0075 34 {
Spilly 7:7aac669b0075 35 if(sscanf(NEMA, "GPGGA, %*f, %*f, %*c, %*f, %*c, %d, %d, %*f, %f", &fixtype, &satellites, &altitude) >=1)
Spilly 7:7aac669b0075 36 {
Spilly 7:7aac669b0075 37 //if(fixtype == 0) return 0;
Spilly 7:7aac669b0075 38 return 1;
Spilly 7:7aac669b0075 39 }
Spilly 7:7aac669b0075 40 return 0;
Spilly 7:7aac669b0075 41 }
Spilly 7:7aac669b0075 42 int GPS::getGPGSA()
Spilly 7:7aac669b0075 43 {
Spilly 7:7aac669b0075 44 if(satellites == 4)
Spilly 7:7aac669b0075 45 {
Spilly 7:7aac669b0075 46 if(sscanf(NEMA, "GPGSA, %c, %d, %*c, %*c, %*c, %*c,,,,,,,,,%f, %f, %f", &mode, &status, &PDOP, &HDOP, &VDOP) >=1) return 1;
Spilly 7:7aac669b0075 47 }
Spilly 7:7aac669b0075 48 else if(satellites == 5)
Spilly 7:7aac669b0075 49 {
Spilly 7:7aac669b0075 50 if(sscanf(NEMA, "GPGSA, %c, %d, %*d, %*d, %*d, %*d, %*d,,,,,,,, %f, %f, %f", &mode, &status, &PDOP, &HDOP, &VDOP) >=1) return 1;
Spilly 7:7aac669b0075 51 }
Spilly 7:7aac669b0075 52 else if(satellites == 6)
Spilly 7:7aac669b0075 53 {
Spilly 7:7aac669b0075 54 if(sscanf(NEMA, "GPGSA, %c, %d, %*d, %*d, %*d, %*d, %*d, %*d,,,,,,, %f, %f, %f", &mode, &status, &PDOP, &HDOP, &VDOP) >=1) return 1;
Spilly 7:7aac669b0075 55 }
Spilly 7:7aac669b0075 56 else if(satellites == 7)
Spilly 7:7aac669b0075 57 {
Spilly 7:7aac669b0075 58 if(sscanf(NEMA, "GPGSA, %c, %d, %*d, %*d, %*d, %*d, %*d, %*d, %*d,,,,,, %f, %f, %f", &mode, &status, &PDOP, &HDOP, &VDOP) >=1) return 1;
Spilly 7:7aac669b0075 59 }
Spilly 7:7aac669b0075 60 else if(satellites == 8)
Spilly 7:7aac669b0075 61 {
Spilly 7:7aac669b0075 62 if(sscanf(NEMA, "GPGSA, %c, %d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d,,,,, %f, %f, %f", &mode, &status, &PDOP, &HDOP, &VDOP) >=1) return 1;
Spilly 7:7aac669b0075 63 }
Spilly 7:7aac669b0075 64 else if(satellites == 9)
Spilly 7:7aac669b0075 65 {
Spilly 7:7aac669b0075 66 if(sscanf(NEMA, "GPGSA, %c, %d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d,,,, %f, %f, %f", &mode, &status, &PDOP, &HDOP, &VDOP) >=1) return 1;
Spilly 7:7aac669b0075 67 }
Spilly 7:7aac669b0075 68 else if(satellites == 10)
Spilly 7:7aac669b0075 69 {
Spilly 7:7aac669b0075 70 if(sscanf(NEMA, "GPGSA, %c, %d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d,,, %f, %f, %f", &mode, &status, &PDOP, &HDOP, &VDOP) >=1) return 1;
Spilly 7:7aac669b0075 71 }
Spilly 7:7aac669b0075 72 else if(satellites == 11)
Spilly 7:7aac669b0075 73 {
Spilly 7:7aac669b0075 74 if(sscanf(NEMA, "GPGSA, %c, %d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d,, %f, %f, %f", &mode, &status, &PDOP, &HDOP, &VDOP) >=1) return 1;
Spilly 7:7aac669b0075 75 }
Spilly 7:7aac669b0075 76 else
Spilly 7:7aac669b0075 77 {
Spilly 7:7aac669b0075 78 if(sscanf(NEMA, "GPGSA, %c, %d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %*d, %f, %f, %f", &mode, &status, &PDOP, &HDOP, &VDOP) >=1) return 1;
Spilly 7:7aac669b0075 79 }
Spilly 7:7aac669b0075 80 return 0;
Spilly 7:7aac669b0075 81 }
Spilly 7:7aac669b0075 82 int GPS::getGPRMC()
Spilly 7:7aac669b0075 83 {
Spilly 7:7aac669b0075 84
Spilly 7:7aac669b0075 85 if(sscanf(NEMA, "GPRMC, %2d%2d%f, %c, %f, %c, %f, %c, %f, %f, %2d%2d%2d", &hours, &minutes, &seconds, &validity, &latitude, &ns, &longitude, &ew, &speed, &heading, &day, &month, &year) >=1)
Spilly 7:7aac669b0075 86 {
Spilly 7:7aac669b0075 87 year += 2000;
Spilly 7:7aac669b0075 88 if(ns =='S') {
Spilly 7:7aac669b0075 89 latitude *= -1.00000000000000000f;
Spilly 7:7aac669b0075 90 }
Spilly 7:7aac669b0075 91 if(ew =='W') {
Spilly 7:7aac669b0075 92 longitude *= -1.00000000000000000f;
Spilly 7:7aac669b0075 93 }
Spilly 7:7aac669b0075 94 double degrees = trunc(latitude / 100.0000000000000000f);
Spilly 7:7aac669b0075 95 double minutes = latitude - (degrees * 100.00000000000000000f);
Spilly 7:7aac669b0075 96 degLat = degrees + minutes / 60.00000000000000000f;
Spilly 7:7aac669b0075 97 degrees = trunc(longitude / 100.0000000000000000f);
Spilly 7:7aac669b0075 98 minutes = longitude - (degrees * 100.00000000000000000f);
Spilly 7:7aac669b0075 99 degLon = degrees + minutes / 60.00000000000000000f;
Spilly 7:7aac669b0075 100 if(fixtype == 1) {
Spilly 7:7aac669b0075 101 fix = "Positive";
Spilly 7:7aac669b0075 102 }
Spilly 7:7aac669b0075 103 if(fixtype == 2) {
Spilly 7:7aac669b0075 104 fix = "Differential";
Spilly 7:7aac669b0075 105 }
Spilly 7:7aac669b0075 106 if(heading > 0.00f && heading < 45.00f) {
Spilly 7:7aac669b0075 107 cardinal = "NNE";
Spilly 7:7aac669b0075 108 }
Spilly 7:7aac669b0075 109 if(heading == 45.00f) {
Spilly 7:7aac669b0075 110 cardinal = "NE";
Spilly 7:7aac669b0075 111 }
Spilly 7:7aac669b0075 112 if(heading > 45.00f && heading < 90.00f) {
Spilly 7:7aac669b0075 113 cardinal = "ENE";
Spilly 7:7aac669b0075 114 }
Spilly 7:7aac669b0075 115 if(heading == 90.00f) {
Spilly 7:7aac669b0075 116 cardinal = "E";
Spilly 7:7aac669b0075 117 }
Spilly 7:7aac669b0075 118 if(heading > 90.00f && heading < 135.00f) {
Spilly 7:7aac669b0075 119 cardinal = "ESE";
Spilly 7:7aac669b0075 120 }
Spilly 7:7aac669b0075 121 if(heading == 135.00f) {
Spilly 7:7aac669b0075 122 cardinal = "SE";
Spilly 7:7aac669b0075 123 }
Spilly 7:7aac669b0075 124 if(heading > 135.00f && heading < 180.00f) {
Spilly 7:7aac669b0075 125 cardinal = "SSE";
Spilly 7:7aac669b0075 126 }
Spilly 7:7aac669b0075 127 if(heading == 180.00f) {
Spilly 7:7aac669b0075 128 cardinal = "S";
Spilly 7:7aac669b0075 129 }
Spilly 7:7aac669b0075 130 if(heading > 180.00f && heading < 225.00f) {
Spilly 7:7aac669b0075 131 cardinal = "SSW";
Spilly 7:7aac669b0075 132 }
Spilly 7:7aac669b0075 133 if(heading == 225.00f) {
Spilly 7:7aac669b0075 134 cardinal = "SW";
Spilly 7:7aac669b0075 135 }
Spilly 7:7aac669b0075 136 if(heading > 225.00f && heading < 270.00f) {
Spilly 7:7aac669b0075 137 cardinal = "WSW";
Spilly 7:7aac669b0075 138 }
Spilly 7:7aac669b0075 139 if(heading == 270.00f) {
Spilly 7:7aac669b0075 140 cardinal = "W";
Spilly 7:7aac669b0075 141 }
Spilly 7:7aac669b0075 142 if(heading > 270.00f && heading < 315.00f) {
Spilly 7:7aac669b0075 143 cardinal = "WNW";
Spilly 7:7aac669b0075 144 }
Spilly 7:7aac669b0075 145 if(heading == 315.00f) {
Spilly 7:7aac669b0075 146 cardinal = "NW";
Spilly 7:7aac669b0075 147 }
Spilly 7:7aac669b0075 148 if(heading > 315.00f && heading < 360.00f) {
Spilly 7:7aac669b0075 149 cardinal = "NNW";
Spilly 7:7aac669b0075 150 }
Spilly 7:7aac669b0075 151 if(heading == 360.00f || heading == 0.00f) {
Spilly 7:7aac669b0075 152 cardinal = "N";
Spilly 7:7aac669b0075 153 }
Spilly 7:7aac669b0075 154 kph = speed*1.852f;
Spilly 7:7aac669b0075 155 return 1;
Spilly 7:7aac669b0075 156 }
Spilly 7:7aac669b0075 157 return 0;
Spilly 7:7aac669b0075 158 }
SamClarke 1:0a034c2dbea6 159 int GPS::parseData()
SamClarke 1:0a034c2dbea6 160 {
Spilly 8:2476bea153a1 161 if(getGPGGA())
Spilly 8:2476bea153a1 162 {
Spilly 8:2476bea153a1 163 sentenceCount = sentenceCount + 1;
Spilly 8:2476bea153a1 164 return 1;
Spilly 8:2476bea153a1 165 }
Spilly 8:2476bea153a1 166 else if(getGPRMC())
Spilly 8:2476bea153a1 167 {
Spilly 8:2476bea153a1 168 sentenceCount = sentenceCount + 1;
Spilly 8:2476bea153a1 169 return 1;
Spilly 8:2476bea153a1 170 }
Spilly 8:2476bea153a1 171 else if(getGPGSA())
Spilly 8:2476bea153a1 172 {
Spilly 8:2476bea153a1 173 sentenceCount = sentenceCount + 1;
Spilly 8:2476bea153a1 174 return 1;
Spilly 8:2476bea153a1 175 }
Spilly 8:2476bea153a1 176 return 0;
Spilly 8:2476bea153a1 177 /*
Spilly 7:7aac669b0075 178 getData();
Spilly 7:7aac669b0075 179 if(getGPGGA())
Spilly 7:7aac669b0075 180 {
SamClarke 1:0a034c2dbea6 181 getData();
Spilly 7:7aac669b0075 182 if(getGPGSA())
Spilly 7:7aac669b0075 183 {
Spilly 7:7aac669b0075 184 getData();
Spilly 7:7aac669b0075 185 getGPRMC();
Spilly 7:7aac669b0075 186 return 1;
Spilly 7:7aac669b0075 187 }
Spilly 7:7aac669b0075 188 else
Spilly 7:7aac669b0075 189 {
Spilly 7:7aac669b0075 190 getData();
Spilly 7:7aac669b0075 191 getGPGSA();
SamClarke 1:0a034c2dbea6 192 return 1;
SamClarke 1:0a034c2dbea6 193 }
SamClarke 1:0a034c2dbea6 194 }
Spilly 7:7aac669b0075 195 else if(getGPGSA())
Spilly 7:7aac669b0075 196 {
Spilly 7:7aac669b0075 197 getData();
Spilly 7:7aac669b0075 198 if(getGPGGA())
Spilly 7:7aac669b0075 199 {
Spilly 7:7aac669b0075 200 getData();
Spilly 7:7aac669b0075 201 getGPRMC();
Spilly 7:7aac669b0075 202 return 1;
Spilly 7:7aac669b0075 203 }
Spilly 7:7aac669b0075 204 else
Spilly 7:7aac669b0075 205 {
Spilly 7:7aac669b0075 206 getData();
Spilly 7:7aac669b0075 207 getGPGGA();
Spilly 7:7aac669b0075 208 return 1;
Spilly 7:7aac669b0075 209 }
Spilly 7:7aac669b0075 210 }
Spilly 7:7aac669b0075 211 else
Spilly 7:7aac669b0075 212 {
Spilly 7:7aac669b0075 213 getData();
Spilly 7:7aac669b0075 214 if(getGPGGA())
Spilly 7:7aac669b0075 215 {
Spilly 7:7aac669b0075 216 getData();
Spilly 7:7aac669b0075 217 getGPGSA();
Spilly 7:7aac669b0075 218 return 1;
Spilly 7:7aac669b0075 219 }
Spilly 7:7aac669b0075 220 else if(getGPGSA())
Spilly 7:7aac669b0075 221 {
Spilly 7:7aac669b0075 222 getData();
Spilly 7:7aac669b0075 223 getGPGGA();
Spilly 7:7aac669b0075 224 return 1;
Spilly 7:7aac669b0075 225 }
Spilly 7:7aac669b0075 226 }
Spilly 7:7aac669b0075 227 return 0;
Spilly 8:2476bea153a1 228 */
SamClarke 1:0a034c2dbea6 229 }
SamClarke 1:0a034c2dbea6 230
SamClarke 1:0a034c2dbea6 231
SamClarke 1:0a034c2dbea6 232 float GPS::trunc(float v)
SamClarke 1:0a034c2dbea6 233 {
Spilly 6:af055728e564 234 if(v < 0.0f) {
Spilly 6:af055728e564 235 v*= -1.0f;
SamClarke 1:0a034c2dbea6 236 v = floor(v);
Spilly 6:af055728e564 237 v*=-1.0f;
SamClarke 1:0a034c2dbea6 238 } else {
SamClarke 1:0a034c2dbea6 239 v = floor(v);
SamClarke 1:0a034c2dbea6 240 }
SamClarke 1:0a034c2dbea6 241 return v;
SamClarke 1:0a034c2dbea6 242 }
SamClarke 1:0a034c2dbea6 243
Spilly 8:2476bea153a1 244 bool GPS::getData()
SamClarke 1:0a034c2dbea6 245 {
Spilly 8:2476bea153a1 246 if(!_UltimateGps.readable()) return 0;
Spilly 8:2476bea153a1 247 char tempChar = _UltimateGps.getc();
Spilly 8:2476bea153a1 248 //printf("%c\n", tempChar);
Spilly 8:2476bea153a1 249 if(tempChar == '$')
Spilly 8:2476bea153a1 250 {
Spilly 8:2476bea153a1 251 /*
Spilly 8:2476bea153a1 252 for(int i=0; i<256; i++)
Spilly 8:2476bea153a1 253 {
Spilly 8:2476bea153a1 254 NEMA[i] = _UltimateGps.getc();
Spilly 8:2476bea153a1 255 if(NEMA[i] == '\r')
Spilly 8:2476bea153a1 256 {
Spilly 8:2476bea153a1 257 NEMA[i] = 0;
Spilly 8:2476bea153a1 258 parseData();
Spilly 8:2476bea153a1 259 if(sentenceCount == 3)
Spilly 8:2476bea153a1 260 {
Spilly 8:2476bea153a1 261 sentenceCount = 0;
Spilly 8:2476bea153a1 262 return 1;
Spilly 8:2476bea153a1 263 }
Spilly 8:2476bea153a1 264 return 0;
Spilly 8:2476bea153a1 265 }
Spilly 8:2476bea153a1 266 }
Spilly 8:2476bea153a1 267 */
Spilly 8:2476bea153a1 268
Spilly 8:2476bea153a1 269 for(int i=0; i<256; i++)
Spilly 8:2476bea153a1 270 {
Spilly 8:2476bea153a1 271 NEMA[i] = _UltimateGps.getc();
Spilly 8:2476bea153a1 272 if(NEMA[i] == '\r')
Spilly 8:2476bea153a1 273 {
Spilly 8:2476bea153a1 274 NEMA[i] = 0;
Spilly 8:2476bea153a1 275 parseData();
Spilly 8:2476bea153a1 276 if(_UltimateGps.readable())
Spilly 8:2476bea153a1 277 {
Spilly 8:2476bea153a1 278
Spilly 8:2476bea153a1 279 tempChar = _UltimateGps.getc();
Spilly 8:2476bea153a1 280 if(tempChar != '$')
Spilly 8:2476bea153a1 281 {
Spilly 8:2476bea153a1 282 tempChar = _UltimateGps.getc();
Spilly 8:2476bea153a1 283 }
Spilly 8:2476bea153a1 284 if(tempChar == '$')
Spilly 8:2476bea153a1 285 {
Spilly 8:2476bea153a1 286 for(int i=0; i<256; i++)
Spilly 8:2476bea153a1 287 {
Spilly 8:2476bea153a1 288 NEMA[i] = _UltimateGps.getc();
Spilly 8:2476bea153a1 289 if(NEMA[i] == '\r')
Spilly 8:2476bea153a1 290 {
Spilly 8:2476bea153a1 291 NEMA[i] = 0;
Spilly 8:2476bea153a1 292 parseData();
Spilly 8:2476bea153a1 293 if(_UltimateGps.readable())
Spilly 8:2476bea153a1 294 {
Spilly 8:2476bea153a1 295 tempChar = _UltimateGps.getc();
Spilly 8:2476bea153a1 296 if(tempChar != '$')
Spilly 8:2476bea153a1 297 {
Spilly 8:2476bea153a1 298 tempChar = _UltimateGps.getc();
Spilly 8:2476bea153a1 299 }
Spilly 8:2476bea153a1 300 if(tempChar == '$')
Spilly 8:2476bea153a1 301 {
Spilly 8:2476bea153a1 302 for(int i=0; i<256; i++)
Spilly 8:2476bea153a1 303 {
Spilly 8:2476bea153a1 304 NEMA[i] = _UltimateGps.getc();
Spilly 8:2476bea153a1 305 if(NEMA[i] == '\r')
Spilly 8:2476bea153a1 306 {
Spilly 8:2476bea153a1 307 NEMA[i] = 0;
Spilly 8:2476bea153a1 308 parseData();
Spilly 8:2476bea153a1 309 if(sentenceCount == 3)
Spilly 8:2476bea153a1 310 {
Spilly 8:2476bea153a1 311 sentenceCount = 0;
Spilly 8:2476bea153a1 312 return 1;
Spilly 8:2476bea153a1 313 }
Spilly 8:2476bea153a1 314 return 0;
Spilly 8:2476bea153a1 315 }
Spilly 8:2476bea153a1 316 }
Spilly 8:2476bea153a1 317 }
Spilly 8:2476bea153a1 318
Spilly 8:2476bea153a1 319 else
Spilly 8:2476bea153a1 320 {
Spilly 8:2476bea153a1 321 return 0;
Spilly 8:2476bea153a1 322 }
Spilly 8:2476bea153a1 323 }
Spilly 8:2476bea153a1 324 if(sentenceCount == 3)
Spilly 8:2476bea153a1 325 {
Spilly 8:2476bea153a1 326 sentenceCount = 0;
Spilly 8:2476bea153a1 327 return 1;
Spilly 8:2476bea153a1 328 }
Spilly 8:2476bea153a1 329 return 0;
Spilly 8:2476bea153a1 330 }
Spilly 8:2476bea153a1 331 }
Spilly 8:2476bea153a1 332 }
Spilly 8:2476bea153a1 333 }
Spilly 8:2476bea153a1 334 if(sentenceCount == 3)
Spilly 8:2476bea153a1 335 {
Spilly 8:2476bea153a1 336 sentenceCount = 0;
Spilly 8:2476bea153a1 337 return 1;
Spilly 8:2476bea153a1 338 }
Spilly 8:2476bea153a1 339 return 0;
Spilly 8:2476bea153a1 340 }
Spilly 8:2476bea153a1 341 }
Spilly 8:2476bea153a1 342
Spilly 8:2476bea153a1 343 }
Spilly 8:2476bea153a1 344 return 0;
Spilly 8:2476bea153a1 345 /*
Spilly 8:2476bea153a1 346 if(tempChar == '$')
Spilly 8:2476bea153a1 347 {
Spilly 8:2476bea153a1 348 //printf("start\n");
Spilly 8:2476bea153a1 349 NEMACount = 0;
Spilly 8:2476bea153a1 350 recordFlag = 1;
Spilly 8:2476bea153a1 351 }
Spilly 8:2476bea153a1 352 else if(recordFlag && (tempChar == '\r'))
Spilly 8:2476bea153a1 353 {
Spilly 8:2476bea153a1 354 NEMA[NEMACount] = 0;
Spilly 8:2476bea153a1 355 parseData();
Spilly 8:2476bea153a1 356 recordFlag = 0;
Spilly 8:2476bea153a1 357 //return 1;
Spilly 8:2476bea153a1 358 if(sentenceCount == 3)
Spilly 8:2476bea153a1 359 {
Spilly 8:2476bea153a1 360 sentenceCount = 0;
Spilly 8:2476bea153a1 361 return 1;
Spilly 8:2476bea153a1 362 }
Spilly 8:2476bea153a1 363 }
Spilly 8:2476bea153a1 364 else if(recordFlag)
Spilly 8:2476bea153a1 365 {
Spilly 8:2476bea153a1 366 //printf("count = %d\n", NEMACount);
Spilly 8:2476bea153a1 367 NEMA[NEMACount] = tempChar;
Spilly 8:2476bea153a1 368 NEMACount = NEMACount + 1;
Spilly 8:2476bea153a1 369 }
Spilly 8:2476bea153a1 370
Spilly 8:2476bea153a1 371 return 0;
Spilly 8:2476bea153a1 372 */
Spilly 8:2476bea153a1 373 /*
SamClarke 1:0a034c2dbea6 374 while(_UltimateGps.getc() != '$');
SamClarke 1:0a034c2dbea6 375 for(int i=0; i<256; i++) {
SamClarke 1:0a034c2dbea6 376 NEMA[i] = _UltimateGps.getc();
SamClarke 1:0a034c2dbea6 377 if(NEMA[i] == '\r') {
SamClarke 1:0a034c2dbea6 378 NEMA[i] = 0;
SamClarke 1:0a034c2dbea6 379 return;
SamClarke 1:0a034c2dbea6 380 }
SamClarke 1:0a034c2dbea6 381 }
SamClarke 1:0a034c2dbea6 382 error("overflowed message limit");
Spilly 8:2476bea153a1 383 */
SamClarke 1:0a034c2dbea6 384 }
SamClarke 1:0a034c2dbea6 385
SamClarke 1:0a034c2dbea6 386 void GPS::Init()
SamClarke 1:0a034c2dbea6 387 {
Spilly 7:7aac669b0075 388 //don't need to send baud rate command because it is already set to 38400 in firmware
Spilly 7:7aac669b0075 389 //_UltimateGps.printf("$PMTK251,38400*27\r\n"); //set baud (any higher and the serial buffer overflows)
Spilly 7:7aac669b0075 390
Spilly 7:7aac669b0075 391 //Note: SBAS can only be enabled when update rate is less than or equal to 5Hz.
Spilly 7:7aac669b0075 392 //_UltimateGps.printf("$PMTK220,100*2F\r\n"); //10 Hz update
Spilly 8:2476bea153a1 393 //_UltimateGps.printf("$PMTK220,200*2C\r\n"); //5 Hz udpate
Spilly 8:2476bea153a1 394 _UltimateGps.printf("$PMTK220,1000*1f\r\n"); //1 Hz udpate
Spilly 7:7aac669b0075 395
Spilly 7:7aac669b0075 396 _UltimateGps.printf("$PMTK225,0*2bt\r\n"); //disable always locate (datasheet indicates that this negatively affects accuracy)
Spilly 7:7aac669b0075 397 _UltimateGps.printf("$PMTK301,2*2et\r\n"); //set DGPS to use WAAS
Spilly 7:7aac669b0075 398
Spilly 7:7aac669b0075 399 //_UltimateGps.printf("$PMTK386,0.8*35\r\n"); //set Nav Speed threshold to 0.8 m/s
Spilly 7:7aac669b0075 400 //_UltimateGps.printf("$PMTK386,0.2*3f\r\n"); //set Nav Speed threshold to 0.2 m/s
Spilly 7:7aac669b0075 401 _UltimateGps.printf("$PMTK386,0*23\r\n"); //disable Nav Speed threshold
Spilly 7:7aac669b0075 402
Spilly 7:7aac669b0075 403 //_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"); //GPRMC and GPGGA
Spilly 7:7aac669b0075 404 //_UltimateGps.printf("$PMTK314,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n"); //GPRMC and GPGSA
Spilly 7:7aac669b0075 405 _UltimateGps.printf("$PMTK314,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n"); //GPRMC, GPGGA, and GPGSA
Spilly 8:2476bea153a1 406 //_UltimateGps.attach(this, &GPS::GPSInt);
Spilly 6:af055728e564 407 }
Spilly 6:af055728e564 408
Spilly 6:af055728e564 409 void GPS::Sleep(int sleep)
Spilly 6:af055728e564 410 {
Spilly 6:af055728e564 411 if(sleep == 1)
Spilly 6:af055728e564 412 {
Spilly 6:af055728e564 413 _UltimateGps.printf("$$PMTK161,0*28\r\n"); //go to sleep
Spilly 6:af055728e564 414 }
Spilly 6:af055728e564 415 else
Spilly 6:af055728e564 416 {
Spilly 7:7aac669b0075 417 _UltimateGps.printf("$$PMTK161,1*28\r\n"); //wake up
Spilly 7:7aac669b0075 418
Spilly 7:7aac669b0075 419 /*unit goes back to default config when put to sleep*/
Spilly 7:7aac669b0075 420
Spilly 7:7aac669b0075 421 //Note: SBAS can only be enabled when update rate is less than or equal to 5Hz.
Spilly 7:7aac669b0075 422 //_UltimateGps.printf("$PMTK220,100*2F\r\n"); //10 Hz update
Spilly 8:2476bea153a1 423 //_UltimateGps.printf("$PMTK220,200*2C\r\n"); //5 Hz udpate
Spilly 8:2476bea153a1 424 _UltimateGps.printf("$PMTK220,1000*1f\r\n"); //1 Hz udpate
Spilly 7:7aac669b0075 425
Spilly 7:7aac669b0075 426 _UltimateGps.printf("$PMTK225,0*2bt\r\n"); //disable always locate (datasheet indicates that this negatively affects accuracy)
Spilly 7:7aac669b0075 427 _UltimateGps.printf("$PMTK301,2*2et\r\n"); //set DGPS to use WAAS
Spilly 7:7aac669b0075 428
Spilly 7:7aac669b0075 429 //_UltimateGps.printf("$PMTK386,0.8*35\r\n"); //set Nav Speed threshold to 0.8 m/s
Spilly 7:7aac669b0075 430 //_UltimateGps.printf("$PMTK386,0.2*3f\r\n"); //set Nav Speed threshold to 0.2 m/s
Spilly 7:7aac669b0075 431 _UltimateGps.printf("$PMTK386,0*23\r\n"); //disable Nav Speed threshold
Spilly 7:7aac669b0075 432
Spilly 7:7aac669b0075 433 //_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"); //GPRMC and GPGGA
Spilly 7:7aac669b0075 434 //_UltimateGps.printf("$PMTK314,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n"); //GPRMC and GPGSA
Spilly 7:7aac669b0075 435 _UltimateGps.printf("$PMTK314,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n"); //GPRMC, GPGGA, and GPGSA
Spilly 6:af055728e564 436 }
SamClarke 1:0a034c2dbea6 437 }