Code for autonomous rover for Sparkfun AVC. DataBus won 3rd in 2012 and the same code was used on Troubled Child, a 1986 Jeep Grand Wagoneer to win 1st in 2014.

Dependencies:   mbed Watchdog SDFileSystem DigoleSerialDisp

Committer:
shimniok
Date:
Thu Jun 06 13:40:23 2013 +0000
Revision:
2:fbc6e3cf3ed8
Parent:
0:a6a169de725f
Sort-of working version, still some errors with estimation. Added clamp() function.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shimniok 0:a6a169de725f 1 #ifndef __SIRF3_H__
shimniok 0:a6a169de725f 2 #define __SIRF3_H__
shimniok 0:a6a169de725f 3
shimniok 0:a6a169de725f 4 #include "mbed.h"
shimniok 0:a6a169de725f 5 #include "GPS.h"
shimniok 0:a6a169de725f 6 #include "TinyGPS.h"
shimniok 0:a6a169de725f 7
shimniok 0:a6a169de725f 8 class Sirf3: public GPS {
shimniok 0:a6a169de725f 9 public:
shimniok 0:a6a169de725f 10 /**
shimniok 0:a6a169de725f 11 * create a new SiRF III interface
shimniok 0:a6a169de725f 12 */
shimniok 0:a6a169de725f 13 Sirf3(PinName tx, PinName rx);
shimniok 0:a6a169de725f 14
shimniok 0:a6a169de725f 15 /**
shimniok 0:a6a169de725f 16 * Initalize everything necessary for the GPS to collect the required data
shimniok 0:a6a169de725f 17 */
shimniok 0:a6a169de725f 18 virtual void init(void);
shimniok 0:a6a169de725f 19
shimniok 0:a6a169de725f 20 /**
shimniok 0:a6a169de725f 21 * Set baud rate
shimniok 0:a6a169de725f 22 */
shimniok 0:a6a169de725f 23 virtual void setBaud(int baud);
shimniok 0:a6a169de725f 24
shimniok 0:a6a169de725f 25 /**
shimniok 0:a6a169de725f 26 * return serial object
shimniok 0:a6a169de725f 27 */
shimniok 0:a6a169de725f 28 virtual Serial *getSerial(void);
shimniok 0:a6a169de725f 29
shimniok 0:a6a169de725f 30 /**
shimniok 0:a6a169de725f 31 * Disable serial data collection
shimniok 0:a6a169de725f 32 */
shimniok 0:a6a169de725f 33 virtual void disable(void);
shimniok 0:a6a169de725f 34
shimniok 0:a6a169de725f 35 /**
shimniok 0:a6a169de725f 36 * Enable serial data collection
shimniok 0:a6a169de725f 37 */
shimniok 0:a6a169de725f 38 virtual void enable(void);
shimniok 0:a6a169de725f 39
shimniok 0:a6a169de725f 40 /**
shimniok 0:a6a169de725f 41 * Enable verbose messages for debugging
shimniok 0:a6a169de725f 42 */
shimniok 0:a6a169de725f 43 virtual void enableVerbose(void);
shimniok 0:a6a169de725f 44
shimniok 0:a6a169de725f 45 /**
shimniok 0:a6a169de725f 46 * Disable verbose messages for debugging
shimniok 0:a6a169de725f 47 */
shimniok 0:a6a169de725f 48 virtual void disableVerbose(void);
shimniok 0:a6a169de725f 49
shimniok 0:a6a169de725f 50 /**
shimniok 2:fbc6e3cf3ed8 51 * stub function for compatibility
shimniok 2:fbc6e3cf3ed8 52 */
shimniok 2:fbc6e3cf3ed8 53 int getAvailable(void);
shimniok 2:fbc6e3cf3ed8 54
shimniok 2:fbc6e3cf3ed8 55 /**
shimniok 2:fbc6e3cf3ed8 56 * stub function for compatibility
shimniok 2:fbc6e3cf3ed8 57 * Configure GPS update rate (doesn't do anything on Sirf3)
shimniok 2:fbc6e3cf3ed8 58 */
shimniok 2:fbc6e3cf3ed8 59 void setUpdateRate(int rate);
shimniok 2:fbc6e3cf3ed8 60
shimniok 2:fbc6e3cf3ed8 61 /**
shimniok 0:a6a169de725f 62 * get latitude
shimniok 0:a6a169de725f 63 */
shimniok 0:a6a169de725f 64 virtual double latitude(void);
shimniok 0:a6a169de725f 65
shimniok 0:a6a169de725f 66 /**
shimniok 0:a6a169de725f 67 * get longitude
shimniok 0:a6a169de725f 68 */
shimniok 0:a6a169de725f 69 virtual double longitude(void);
shimniok 0:a6a169de725f 70
shimniok 0:a6a169de725f 71 /**
shimniok 0:a6a169de725f 72 * Get Horizontal Dilution of Precision
shimniok 0:a6a169de725f 73 * @return float horizontal dilution of precision
shimniok 0:a6a169de725f 74 */
shimniok 0:a6a169de725f 75 virtual float hdop(void);
shimniok 0:a6a169de725f 76
shimniok 0:a6a169de725f 77 /**
shimniok 0:a6a169de725f 78 * get count of active satellites
shimniok 0:a6a169de725f 79 */
shimniok 0:a6a169de725f 80 virtual int sat_count(void);
shimniok 0:a6a169de725f 81
shimniok 0:a6a169de725f 82 /**
shimniok 0:a6a169de725f 83 * get speed in m/s
shimniok 0:a6a169de725f 84 */
shimniok 0:a6a169de725f 85 virtual float speed_mps(void);
shimniok 0:a6a169de725f 86
shimniok 0:a6a169de725f 87 /**
shimniok 0:a6a169de725f 88 * get heading in degrees
shimniok 0:a6a169de725f 89 */
shimniok 0:a6a169de725f 90 virtual float heading_deg(void);
shimniok 0:a6a169de725f 91
shimniok 0:a6a169de725f 92 /**
shimniok 0:a6a169de725f 93 * determine if data is available to be used
shimniok 0:a6a169de725f 94 */
shimniok 0:a6a169de725f 95 virtual bool available(void);
shimniok 0:a6a169de725f 96
shimniok 0:a6a169de725f 97 /**
shimniok 0:a6a169de725f 98 * reset the data available flag
shimniok 0:a6a169de725f 99 */
shimniok 0:a6a169de725f 100 virtual void reset_available(void);
shimniok 0:a6a169de725f 101
shimniok 0:a6a169de725f 102 private:
shimniok 0:a6a169de725f 103 void recv_handler(void);
shimniok 2:fbc6e3cf3ed8 104 void ggaMessage(bool enable);
shimniok 0:a6a169de725f 105 void gsaMessage(bool enable);
shimniok 0:a6a169de725f 106 void gsvMessage(bool enable);
shimniok 2:fbc6e3cf3ed8 107 void gllMessage(bool enable);
shimniok 2:fbc6e3cf3ed8 108 void rmcMessage(bool enable);
shimniok 2:fbc6e3cf3ed8 109 void vtgMessage(bool enable);
shimniok 0:a6a169de725f 110 Serial serial;
shimniok 0:a6a169de725f 111 TinyGPS nmea;
shimniok 0:a6a169de725f 112 };
shimniok 0:a6a169de725f 113
shimniok 0:a6a169de725f 114 #endif