micropeak: Report recorded apogee instead of searching flight data
authorKeith Packard <keithp@keithp.com>
Fri, 11 Jan 2013 05:37:18 +0000 (21:37 -0800)
committerKeith Packard <keithp@keithp.com>
Fri, 11 Jan 2013 05:48:31 +0000 (21:48 -0800)
This makes sure we report the true apogee value instead of looking for
the maximum height value in the flight data, in case the flight
recording ended before the apogee was reached.

Signed-off-by: Keith Packard <keithp@keithp.com>
micropeak/MicroData.java
micropeak/MicroStats.java

index f1204e1111bfdaffeb1080dda8f2395bfd46ea0d..71919ddb625098fc0ea35f9cc9ca201c9e7deb04 100644 (file)
@@ -229,6 +229,18 @@ public class MicroData {
                return altitude(i) - ground_altitude;
        }
 
+       public double apogee_pressure() {
+               return min_pressure;
+       }
+
+       public double apogee_altitude() {
+               return AltosConvert.pressure_to_altitude(apogee_pressure());
+       }
+
+       public double apogee_height() {
+               return apogee_altitude() - ground_altitude;
+       }
+
        static final int speed_avg = 3;
        static final int accel_avg = 5;
 
index 056fac7d1d77d3538663cf79622819f7fafc9de9..90e9dd1f02fe6c588921f6b05f2207ebb4b7f6db 100644 (file)
@@ -58,12 +58,17 @@ public class MicroStats {
        }
 
        void find_apogee() {
-               apogee_height = 0;
+               apogee_height = data.apogee_height();
+               double searched_apogee = 0;
                apogee_time = 0;
                
+               /* This just finds the apogee time -- we've recorded the
+                * peak altitude separately in eeprom, and that could
+                * have occurred after the eeprom was full.
+                */
                for (MicroDataPoint point : data.points()) {
-                       if (point.height > apogee_height) {
-                               apogee_height = point.height;
+                       if (point.height > searched_apogee) {
+                               searched_apogee = point.height;
                                apogee_time = point.time;
                        }
                }