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

Revision:
24:7477105103e5
Parent:
23:5a7b5db55be5
Child:
25:81c3696ba2c9
--- a/main.cpp	Thu Dec 13 23:56:31 2012 +0000
+++ b/main.cpp	Mon Dec 17 23:42:34 2012 +0000
@@ -1,20 +1,24 @@
+/**
+* HARP Version 2
+*/
+
 #include "mbed.h"
 #include "rtos.h"
 #include "buffered_serial.h"
 #include "ff.h"
 #include "BMP085.h"
-#include "GPS_parser.h"
+#include "nmea_parser.h"
 #include "config.h"
 
 I2C i2c(p9, p10); // sda, scl
 BMP085 alt_sensor(i2c);
 
 Serial pc(USBTX, USBRX);
-BufferedSerial gps(NC, p14);
+BufferedSerial gps;
 AnalogIn gps_battery(p20);
 AnalogIn mbed_battery(p19);
 
-GPS_Parser nmea;
+NmeaParser nmea;
 
 Semaphore parachute_sem(0);
 
@@ -42,7 +46,7 @@
 
     while(true) {
         //gps_led = !gps_led;
-        gps.read_line(buffer);
+        gps.get_line(buffer);
         int line_type = nmea.parse(buffer);
         //pc.puts(buffer);
         // send to log...
@@ -51,13 +55,13 @@
         queue_gps_line.put(message);
 
         // test altitude direction - release parachute thread to run
-        if(line_type == RMC && nmea.get_lock()) {
+        if(line_type == RMC && nmea.quality()) {
             if(UNLOCK_ON_FALL) {
                 if(alt != 0) { // first time
-                    alt = nmea.get_msl_altitude();
+                    alt = nmea.msl_altitude();
                 } else {
                     alt_prev = alt;
-                    alt = nmea.get_msl_altitude();
+                    alt = nmea.msl_altitude();
                     if(alt < alt_prev) // going down
                         parachute_sem.release(); // let the parachute code execute
                 }
@@ -113,13 +117,13 @@
     int bmp_pressure;
 
     if(WAIT_FOR_LOCK) {
-        while(!nmea.get_date())  Thread::wait(100); // wait for lock
+        while(!nmea.date())  Thread::wait(100); // wait for lock
     }
 
     t.start(); // start timer after lock
 
     sensor_line *message = mpool_sensor_line.alloc();
-    sprintf(message->line, "Date: %d, Time: %f\r\nGPS Time (UTC),GPS Battery(V),mbed Battery(V),BMP085 Temperature(C),Pressure,Altitude(ft),GPS Altitude, GPS Course\r\n", nmea.get_date(), nmea.get_time());
+    sprintf(message->line, "Date: %d, Time: %f\r\nGPS Time (UTC),GPS Battery(V),mbed Battery(V),BMP085 Temperature(C),Pressure,Altitude(ft),GPS Altitude, GPS Course\r\n", nmea.date(), nmea.utc_time());
     queue_sensor_line.put(message);
 
     while(true) {
@@ -128,7 +132,7 @@
         sensor_line *message = mpool_sensor_line.alloc();
 
         //timestamp
-        time = nmea.get_time();
+        time = nmea.utc_time();
 
         //gps battery
         gps_battery_voltage = gps_battery.read()*BAT_GPS_MUL;
@@ -141,7 +145,7 @@
         bmp_pressure = alt_sensor.get_pressure();
         bmp_altitude = alt_sensor.get_altitude_ft();
 
-        sprintf(message->line, "%f,%f,%f,%f,%d,%f,%f,%f\r\n", time,gps_battery_voltage,mbed_battery_voltage,bmp_temperature,bmp_pressure,bmp_altitude,nmea.get_altitude_ft(),nmea.get_course_d());
+        sprintf(message->line, "%f,%f,%f,%f,%d,%f,%f,%f\r\n", time,gps_battery_voltage,mbed_battery_voltage,bmp_temperature,bmp_pressure,bmp_altitude,nmea.calc_altitude_ft(),nmea.track());
         queue_sensor_line.put(message);
     }
 }
@@ -164,8 +168,8 @@
         if(distance < distance_fudge_km)
             continue; // dont do anything
 
-        float course = nmea.get_course_d();
-        float course_to = nmea.calc_course_to(target_lat, target_lon);
+        float course = nmea.track();
+        float course_to = nmea.calc_initial_bearing(target_lat, target_lon);
         float course_diff = course_to - course;
         
         if(course == 0.0) // not moving fast enough