Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of GPS by
GPS.h@8:2476bea153a1, 2015-04-27 (annotated)
- Committer:
- Spilly
- Date:
- Mon Apr 27 16:49:11 2015 +0000
- Revision:
- 8:2476bea153a1
- Parent:
- 7:7aac669b0075
BoatProject
Who changed what in which revision?
User | Revision | Line number | New 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 | 6:af055728e564 | 5 | // added commands to the initialization function to set baud rate, set update rate, enabled DGPS WAAS, and set minimum navigation speed |
Spilly | 6:af055728e564 | 6 | // added a function to put the unit into sleep mode |
Spilly | 6:af055728e564 | 7 | // added several zeros after the decimal places to fix weird rounding errors |
Spilly | 6:af055728e564 | 8 | // added information about checksums |
Spilly | 6:af055728e564 | 9 | // |
Spilly | 6:af055728e564 | 10 | // IMPORTANT: |
Spilly | 6:af055728e564 | 11 | // Any changes made to commands sent to GPS unit require corresponding changes to the |
Spilly | 6:af055728e564 | 12 | // checksum at the end of the command |
Spilly | 6:af055728e564 | 13 | // Here is a tool for calculating the checksum: |
Spilly | 6:af055728e564 | 14 | // http://siliconsparrow.com/demos/nmeachecksum.php |
Spilly | 6:af055728e564 | 15 | **************************************************************************************************************************************************************/ |
SamClarke | 1:0a034c2dbea6 | 16 | |
SamClarke | 1:0a034c2dbea6 | 17 | #include "mbed.h" |
SamClarke | 1:0a034c2dbea6 | 18 | #include <string> |
SamClarke | 1:0a034c2dbea6 | 19 | |
SamClarke | 1:0a034c2dbea6 | 20 | #ifndef GPS_H |
SamClarke | 1:0a034c2dbea6 | 21 | #define GPS_H |
SamClarke | 1:0a034c2dbea6 | 22 | |
SamClarke | 1:0a034c2dbea6 | 23 | // EXAMPLE OUTPUTS |
SamClarke | 1:0a034c2dbea6 | 24 | // |
SamClarke | 1:0a034c2dbea6 | 25 | // $GPRMC,064951.000,A,2307.1256,N,12016.4438,E,0.03,165.48,260406,3.05,W,A*2C |
SamClarke | 1:0a034c2dbea6 | 26 | // $GPRMC, time, status, latitude, N/S, longitude, E/W, speed(knots), heading, date, N/A, N/A, MODE*CHECKSUM |
SamClarke | 1:0a034c2dbea6 | 27 | // |
SamClarke | 1:0a034c2dbea6 | 28 | // $GPGGA,064951.000,2307.1256,N,12016.4438,E,1,8,0.95,39.9,M,17.8,M,,*65 |
SamClarke | 1:0a034c2dbea6 | 29 | // $GPGGA, time, latitude, N/S, longitude, E/W, fix, satellites, hdop, altitude, M, geoidal sep , M,,*CHECKSUM |
SamClarke | 1:0a034c2dbea6 | 30 | // $GPGGA, %f, %*f, %*c, %*f, %*c, %d, %d, %*f, %*f, %*c, %*f , %*c,,%*c%*c%*c0 |
SamClarke | 1:0a034c2dbea6 | 31 | |
SamClarke | 1:0a034c2dbea6 | 32 | class GPS |
SamClarke | 1:0a034c2dbea6 | 33 | { |
SamClarke | 1:0a034c2dbea6 | 34 | public: |
SamClarke | 1:0a034c2dbea6 | 35 | |
SamClarke | 1:0a034c2dbea6 | 36 | GPS(PinName tx, PinName rx); |
SamClarke | 1:0a034c2dbea6 | 37 | int parseData(); |
SamClarke | 1:0a034c2dbea6 | 38 | float time; // UTC time |
SamClarke | 2:dcc14e81f8be | 39 | int hours; |
SamClarke | 2:dcc14e81f8be | 40 | int minutes; |
SamClarke | 2:dcc14e81f8be | 41 | float seconds; |
SamClarke | 1:0a034c2dbea6 | 42 | char validity,ns,ew;// RMC data status A = Data Valid; V = Data Not valid; |
SamClarke | 1:0a034c2dbea6 | 43 | float latitude; // |
SamClarke | 1:0a034c2dbea6 | 44 | float longitude; // |
SamClarke | 1:0a034c2dbea6 | 45 | float speed; // speed in knots |
SamClarke | 1:0a034c2dbea6 | 46 | float heading; // heading in degrees derived from previous & current location |
SamClarke | 4:9ac674d05370 | 47 | string date; // |
SamClarke | 4:9ac674d05370 | 48 | int day; |
SamClarke | 4:9ac674d05370 | 49 | int month; |
SamClarke | 4:9ac674d05370 | 50 | int year; |
SamClarke | 1:0a034c2dbea6 | 51 | int fixtype; // 0 = no fix; 1 = fix; 2=differential fix |
SamClarke | 1:0a034c2dbea6 | 52 | int satellites; // number of satellites used |
SamClarke | 1:0a034c2dbea6 | 53 | float altitude; // |
SamClarke | 3:5cb504ce2793 | 54 | string fix; |
SamClarke | 3:5cb504ce2793 | 55 | string cardinal; |
SamClarke | 3:5cb504ce2793 | 56 | float kph; |
Spilly | 7:7aac669b0075 | 57 | |
Spilly | 7:7aac669b0075 | 58 | //added by Ryan |
Spilly | 8:2476bea153a1 | 59 | Serial _UltimateGps; |
Spilly | 7:7aac669b0075 | 60 | int getGPRMC(); |
Spilly | 7:7aac669b0075 | 61 | int getGPGSA(); |
Spilly | 7:7aac669b0075 | 62 | int getGPGGA(); |
Spilly | 7:7aac669b0075 | 63 | void Init(); |
Spilly | 7:7aac669b0075 | 64 | void Sleep(int sleep); |
Spilly | 7:7aac669b0075 | 65 | void coldStart(); |
Spilly | 8:2476bea153a1 | 66 | bool getData(); |
Spilly | 7:7aac669b0075 | 67 | char mode; //manual or automatic |
Spilly | 7:7aac669b0075 | 68 | int status; //same as fixtype |
Spilly | 8:2476bea153a1 | 69 | int NEMACount; |
Spilly | 8:2476bea153a1 | 70 | int sentenceCount; |
Spilly | 8:2476bea153a1 | 71 | int recordFlag; |
Spilly | 7:7aac669b0075 | 72 | float PDOP; //Position Dilution of Precision |
Spilly | 7:7aac669b0075 | 73 | float HDOP; //Horizontal Dilution of Precision |
Spilly | 7:7aac669b0075 | 74 | float VDOP; //Vertical Dilution of Precision |
Spilly | 7:7aac669b0075 | 75 | double degLat; //degrees latitude |
Spilly | 7:7aac669b0075 | 76 | double degLon; //degrees longitude |
SamClarke | 1:0a034c2dbea6 | 77 | private: |
SamClarke | 1:0a034c2dbea6 | 78 | |
SamClarke | 1:0a034c2dbea6 | 79 | float trunc ( float v); |
Spilly | 8:2476bea153a1 | 80 | //void getData(); |
Spilly | 8:2476bea153a1 | 81 | //Serial _UltimateGps; |
SamClarke | 1:0a034c2dbea6 | 82 | char NEMA[256]; |
SamClarke | 1:0a034c2dbea6 | 83 | }; |
SamClarke | 1:0a034c2dbea6 | 84 | #endif |
SamClarke | 1:0a034c2dbea6 | 85 | |
SamClarke | 1:0a034c2dbea6 | 86 | /* |
SamClarke | 1:0a034c2dbea6 | 87 | #define 1HZ_STREAM "$PMTK220,1000*1F\r\n" // 1.0 second interval |
SamClarke | 1:0a034c2dbea6 | 88 | #define 5HZ_STREAM "$PMTK220,200*2C\r\n" // 0.2 second interval |
SamClarke | 1:0a034c2dbea6 | 89 | #define 10HZ_STREAM "$PMTK220,100*2F\r\n" // 0.1 second interval |
SamClarke | 1:0a034c2dbea6 | 90 | |
SamClarke | 1:0a034c2dbea6 | 91 | #define OUTPUT_RMC "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n" |
SamClarke | 1:0a034c2dbea6 | 92 | #define OUTPUT_RMCGGA "$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 | 93 | #define OUTPUT_OFF "$PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n" |
SamClarke | 0:697a7215cc10 | 94 | */ |