Leon Wehmeier / Mbed OS fiasco_max32630

Dependencies:   SoftSerial MAX14690 Buffer

Fork of rtos_threading_with_callback by mbed_example

Committer:
lwehmeier
Date:
Fri Mar 30 10:32:10 2018 +0000
Revision:
3:d7ec6dc025b0
implemented basic GPS read support, freed serial connection for uart jpg camera module

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lwehmeier 3:d7ec6dc025b0 1 #include "mbed.h"
lwehmeier 3:d7ec6dc025b0 2 #include "BufferedSerial.h"
lwehmeier 3:d7ec6dc025b0 3 #ifndef MBED_GPS_H
lwehmeier 3:d7ec6dc025b0 4 #define MBED_GPS_H
lwehmeier 3:d7ec6dc025b0 5
lwehmeier 3:d7ec6dc025b0 6 #define NO_LOCK 1
lwehmeier 3:d7ec6dc025b0 7 #define NOT_PARSED 2
lwehmeier 3:d7ec6dc025b0 8 #define GGA 3
lwehmeier 3:d7ec6dc025b0 9 #define GLL 4
lwehmeier 3:d7ec6dc025b0 10 #define RMC 5
lwehmeier 3:d7ec6dc025b0 11 #define VTG 6
lwehmeier 3:d7ec6dc025b0 12
lwehmeier 3:d7ec6dc025b0 13 #define PI (3.141592653589793)
lwehmeier 3:d7ec6dc025b0 14
lwehmeier 3:d7ec6dc025b0 15 /** A GPS interface for reading from a Globalsat EM-406 GPS Module */
lwehmeier 3:d7ec6dc025b0 16 class GPS {
lwehmeier 3:d7ec6dc025b0 17 public:
lwehmeier 3:d7ec6dc025b0 18
lwehmeier 3:d7ec6dc025b0 19 /** Create the GPS interface, connected to the specified serial port
lwehmeier 3:d7ec6dc025b0 20 */
lwehmeier 3:d7ec6dc025b0 21 GPS(PinName tx, PinName rx);
lwehmeier 3:d7ec6dc025b0 22
lwehmeier 3:d7ec6dc025b0 23 /** Sample the incoming GPS data, returning whether there is a lock
lwehmeier 3:d7ec6dc025b0 24 *
lwehmeier 3:d7ec6dc025b0 25 * @return 1 if there was a lock when the sample was taken (and therefore .longitude and .latitude are valid), else 0
lwehmeier 3:d7ec6dc025b0 26 */
lwehmeier 3:d7ec6dc025b0 27 int sample();
lwehmeier 3:d7ec6dc025b0 28 float get_nmea_longitude();
lwehmeier 3:d7ec6dc025b0 29 float get_nmea_latitude();
lwehmeier 3:d7ec6dc025b0 30 float get_dec_longitude();
lwehmeier 3:d7ec6dc025b0 31 float get_dec_latitude();
lwehmeier 3:d7ec6dc025b0 32 float get_msl_altitude();
lwehmeier 3:d7ec6dc025b0 33 float get_course_t();
lwehmeier 3:d7ec6dc025b0 34 float get_course_m();
lwehmeier 3:d7ec6dc025b0 35 float get_speed_k();
lwehmeier 3:d7ec6dc025b0 36 float get_speed_km();
lwehmeier 3:d7ec6dc025b0 37 int get_satelites();
lwehmeier 3:d7ec6dc025b0 38 float get_altitude_ft();
lwehmeier 3:d7ec6dc025b0 39
lwehmeier 3:d7ec6dc025b0 40 // navigational functions
lwehmeier 3:d7ec6dc025b0 41 float calc_course_to(float, float);
lwehmeier 3:d7ec6dc025b0 42 double calc_dist_to_mi(float, float);
lwehmeier 3:d7ec6dc025b0 43 double calc_dist_to_ft(float, float);
lwehmeier 3:d7ec6dc025b0 44 double calc_dist_to_km(float, float);
lwehmeier 3:d7ec6dc025b0 45 double calc_dist_to_m(float, float);
lwehmeier 3:d7ec6dc025b0 46
lwehmeier 3:d7ec6dc025b0 47 void onInterrupt(){
lwehmeier 3:d7ec6dc025b0 48 printf("%d\r\n", _gps.readable());
lwehmeier 3:d7ec6dc025b0 49 }
lwehmeier 3:d7ec6dc025b0 50 #ifdef OPEN_LOG
lwehmeier 3:d7ec6dc025b0 51 void start_log(void);
lwehmeier 3:d7ec6dc025b0 52 void new_file(void);
lwehmeier 3:d7ec6dc025b0 53 void stop_log(void);
lwehmeier 3:d7ec6dc025b0 54 #endif
lwehmeier 3:d7ec6dc025b0 55
lwehmeier 3:d7ec6dc025b0 56 private:
lwehmeier 3:d7ec6dc025b0 57 float nmea_to_dec(float, char);
lwehmeier 3:d7ec6dc025b0 58 float trunc(float v);
lwehmeier 3:d7ec6dc025b0 59 void getline();
lwehmeier 3:d7ec6dc025b0 60 void format_for_log(void);
lwehmeier 3:d7ec6dc025b0 61
lwehmeier 3:d7ec6dc025b0 62 BufferedSerial _gps;
lwehmeier 3:d7ec6dc025b0 63 char msg[1024];
lwehmeier 3:d7ec6dc025b0 64 char bfr[1030];
lwehmeier 3:d7ec6dc025b0 65 bool is_logging;
lwehmeier 3:d7ec6dc025b0 66 #ifdef OPEN_LOG
lwehmeier 3:d7ec6dc025b0 67 Logger _openLog;
lwehmeier 3:d7ec6dc025b0 68 #endif
lwehmeier 3:d7ec6dc025b0 69 // calculated values
lwehmeier 3:d7ec6dc025b0 70 float dec_longitude;
lwehmeier 3:d7ec6dc025b0 71 float dec_latitude;
lwehmeier 3:d7ec6dc025b0 72 float altitude_ft;
lwehmeier 3:d7ec6dc025b0 73
lwehmeier 3:d7ec6dc025b0 74 // GGA - Global Positioning System Fixed Data
lwehmeier 3:d7ec6dc025b0 75 float nmea_longitude;
lwehmeier 3:d7ec6dc025b0 76 float nmea_latitude;
lwehmeier 3:d7ec6dc025b0 77 float utc_time;
lwehmeier 3:d7ec6dc025b0 78 char ns, ew;
lwehmeier 3:d7ec6dc025b0 79 int lock;
lwehmeier 3:d7ec6dc025b0 80 int satelites;
lwehmeier 3:d7ec6dc025b0 81 float hdop;
lwehmeier 3:d7ec6dc025b0 82 float msl_altitude;
lwehmeier 3:d7ec6dc025b0 83 char msl_units;
lwehmeier 3:d7ec6dc025b0 84
lwehmeier 3:d7ec6dc025b0 85 // RMC - Recommended Minimmum Specific GNS Data
lwehmeier 3:d7ec6dc025b0 86 char rmc_status;
lwehmeier 3:d7ec6dc025b0 87 float speed_k;
lwehmeier 3:d7ec6dc025b0 88 float course_d;
lwehmeier 3:d7ec6dc025b0 89 int date;
lwehmeier 3:d7ec6dc025b0 90
lwehmeier 3:d7ec6dc025b0 91 // GLL
lwehmeier 3:d7ec6dc025b0 92 char gll_status;
lwehmeier 3:d7ec6dc025b0 93
lwehmeier 3:d7ec6dc025b0 94 // VTG - Course over ground, ground speed
lwehmeier 3:d7ec6dc025b0 95 float course_t; // ground speed true
lwehmeier 3:d7ec6dc025b0 96 char course_t_unit;
lwehmeier 3:d7ec6dc025b0 97 float course_m; // magnetic
lwehmeier 3:d7ec6dc025b0 98 char course_m_unit;
lwehmeier 3:d7ec6dc025b0 99 char speed_k_unit;
lwehmeier 3:d7ec6dc025b0 100 float speed_km; // speek km/hr
lwehmeier 3:d7ec6dc025b0 101 char speed_km_unit;
lwehmeier 3:d7ec6dc025b0 102 };
lwehmeier 3:d7ec6dc025b0 103
lwehmeier 3:d7ec6dc025b0 104 #endif