This library (beta release) parses the GPS data coming from the TD1204. Beware, not all functionality has been fully tested.
Diff: GPS.h
- Revision:
- 0:67f22e813b74
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GPS.h Wed May 18 14:47:17 2016 +0000 @@ -0,0 +1,103 @@ +#include "mbed.h" + +#ifndef MBED_GPS_H +#define MBED_GPS_H + +#define NO_LOCK 1 +#define NOT_PARSED 2 +#define GGA 3 +#define GLL 4 +#define RMC 5 +#define VTG 6 +#define ESTIMATE 7 +#define GSA 8 + +#define PI (3.141592653589793) + +/** A GPS interface for reading from a Globalsat EM-406 GPS Module */ +class GPS { +public: + + /** Create the GPS interface, connected to the specified serial port + */ + GPS(PinName tx, PinName rx); + + /** Sample the incoming GPS data, returning whether there is a lock + * + * @return 1 if there was a lock when the sample was taken (and therefore .longitude and .latitude are valid), else 0 + */ + int sample(); + char operating_mode; + int navigation_mode; + int satellites[12]; + float pdop; + float hdop; + float vdop; + char gprmc_status; + + float get_nmea_longitude(); + float get_nmea_latitude(); + float get_dec_longitude(); + float get_dec_latitude(); + float get_msl_altitude(); + float get_course_t(); + float get_course_m(); + float get_speed_k(); + float get_speed_km(); + int get_satelites(); + float get_altitude_ft(); + char * get_nmea_to_td(); + char tdformat[32]; + + // navigational functions + float calc_course_to(float, float); + double calc_dist_to_mi(float, float); + double calc_dist_to_ft(float, float); + double calc_dist_to_km(float, float); + double calc_dist_to_m(float, float); + +private: + float nmea_to_dec(float, char); + float trunc(float v); + void getline(); + void format_for_log(void); + + Serial _gps; + char msg[1024]; + char bfr[1030]; + + // calculated values + float dec_longitude; + float dec_latitude; + float altitude_ft; + + // GGA - Global Positioning System Fixed Data + float nmea_longitude; + float nmea_latitude; + float utc_time; + char ns, ew; + int lock; + int satelites; + float msl_altitude; + char msl_units; + + // RMC - Recommended Minimmum Specific GNS Data + char rmc_status; + float speed_k; + float course_d; + int date; + + // GLL + char gll_status; + + // VTG - Course over ground, ground speed + float course_t; // ground speed true + char course_t_unit; + float course_m; // magnetic + char course_m_unit; + char speed_k_unit; + float speed_km; // speek km/hr + char speed_km_unit; +}; + +#endif