Generation 3 of the Harp project

Dependencies:   Servo TMP36 GZ buffered-serial1 chan_fatfs_sd nmea_parser watchdog mbed-rtos mbed

Fork of HARP2 by Tyler Weaver

Files at this revision

API Documentation at this revision

Comitter:
tylerjw
Date:
Wed Feb 22 05:24:47 2012 +0000
Parent:
2:0c9ade531a5b
Child:
4:d47805009bbd
Commit message:
0.2 fixed bugs

Changed in this revision

GPS/GPS.cpp Show annotated file Show diff for this revision Revisions of this file
GPS/GPS.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/GPS/GPS.cpp	Wed Feb 22 04:37:13 2012 +0000
+++ b/GPS/GPS.cpp	Wed Feb 22 05:24:47 2012 +0000
@@ -51,25 +51,25 @@
 
         // Check if it is a GPGGA msg (matches both locked and non-locked msg)
         if (sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d,%d,%f,%f,%c", &utc_time, &nmea_latitude, &ns, &nmea_longitude, &ew, &lock, &satelites, &hdop, &msl_altitude, &msl_units) >= 1) {
-            line_parsed = 1;
+            line_parsed = GGA;
         }
         // Check if it is a GPRMC msg
         else if (sscanf(msg, "GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%d", &utc_time, &rmc_status, &nmea_latitude, &ns, &nmea_longitude, &ew, &speed_k, &course_d, &date) >= 1) {
-            line_parsed = 1;
+            line_parsed = RMC;
         }
         // GLL - Geographic Position-Lat/Lon
         else if (sscanf(msg, "GPGLL,%f,%c,%f,%c,%f,%c", &nmea_latitude, &ns, &nmea_longitude, &ew, &utc_time, &gll_status) >= 1) {
-            line_parsed = 1;
+            line_parsed = GLL;
         }
         // VTG-Course Over Ground and Ground Speed
         else if (sscanf(msg, "GPVTG,%f,%c,%f,%c,%f,%c,%f,%c", &course_t, &course_t_unit, &course_m, &course_m_unit, &speed_k, &speed_k_unit, &speed_km, &speed_km_unit) >= 1) {
-            line_parsed = 1;
+            line_parsed = VTG;
         }
     }
     if (!lock) {
         return NO_LOCK;
     } else if (line_parsed) {
-        return PARSED;
+        return line_parsed;
     } else {
         return NOT_PARSED;
     }
@@ -139,5 +139,33 @@
     if (!lock)
         return 0.0;
     else
-        return nmea_latitude;
+        return dec_latitude;
+}
+
+float GPS::get_course_t() {
+    if (!lock)
+        return 0.0;
+    else
+        return course_t;
 }
+
+float GPS::get_course_m() {
+    if (!lock)
+        return 0.0;
+    else
+        return course_m;
+}
+
+float GPS::get_speed_k() {
+    if (!lock)
+        return 0.0;
+    else
+        return speed_k;
+}
+
+float GPS::get_speed_km() {
+    if (!lock)
+        return 0.0;
+    else
+        return speed_km;
+}
\ No newline at end of file
--- a/GPS/GPS.h	Wed Feb 22 04:37:13 2012 +0000
+++ b/GPS/GPS.h	Wed Feb 22 05:24:47 2012 +0000
@@ -27,7 +27,10 @@
 
 #define NO_LOCK     1
 #define NOT_PARSED  2
-#define PARSED      3
+#define GGA         3
+#define GLL         4
+#define RMC         5
+#define VTG         6
 
 /**  A GPS interface for reading from a Globalsat EM-406 GPS Module */
 class GPS {
@@ -47,6 +50,10 @@
     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();
     
     
--- a/main.cpp	Wed Feb 22 04:37:13 2012 +0000
+++ b/main.cpp	Wed Feb 22 05:24:47 2012 +0000
@@ -8,10 +8,25 @@
     int gps_message;
     while (1) {
         gps_message = gps.sample();
-        if (gps_message == PARSED) {
-            pc.printf("I'm at %f, %f\n", gps.get_dec_longitude(), gps.get_dec_latitude());
+        if (gps_message == GGA) {
+            pc.printf("Responding to GGA message.\n");
+            pc.printf("I'm at %f, %f\n", gps.get_dec_latitude(), gps.get_dec_longitude());
             pc.printf("%d satelites used\n", gps.get_satelites());
             pc.printf("altitude = %f M\n\n", gps.get_msl_altitude());
+        } else if (gps_message == VTG) {
+            pc.printf("Responding to VTG message.\n");
+            pc.printf("True heading = %f deg\n", gps.get_course_t());
+            pc.printf("Magnetic heading = %f deg\n", gps.get_course_m());
+            pc.printf("Speed = %f knots\n", gps.get_speed_k());
+            pc.printf("Speed = %f Km/hr\n\n", gps.get_speed_km());
+        } else if (gps_message == GLL) {
+            pc.printf("Responding to GLL message.\n");
+            pc.printf("I'm at %f, %f\n", gps.get_dec_latitude(), gps.get_dec_longitude());
+        } else if (gps_message == RMC) {
+            pc.printf("Responding to RMC message.\n");
+            pc.printf("I'm at %f, %f\n", gps.get_dec_latitude(), gps.get_dec_longitude());
+            pc.printf("True heading = %f deg\n", gps.get_course_t());
+            pc.printf("Speed = %f knots\n\n", gps.get_speed_k());
         } else if (gps_message == NO_LOCK) {
             pc.printf("Oh Dear! No lock :(\n");
         }