summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-10-13 22:05:20 -0700
committerKeith Packard <keithp@keithp.com>2013-10-13 22:05:20 -0700
commit1bd9786802751391cca3b83ac3045029e00e39ee (patch)
treed154e47d76517cb86eca380ad0dde7b22b322a57
parente0e98597887a970f31b33895adb77d35e06b34ff (diff)
altos/micropeak: Increase boost detect to 30m
This meant increasing the data buffering as well so that we could reliably capture the flight data back to the ground, even for slow flights. And, with the buffer extra large, we work backwards from the current buffer location to find the last ground location rather than working forwards from the first buffered location. This ensures that we don't capture noise before boost and instead capture a nice flight curve instead. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/core/ao_microflight.c12
-rw-r--r--src/product/ao_micropeak.h6
2 files changed, 9 insertions, 9 deletions
diff --git a/src/core/ao_microflight.c b/src/core/ao_microflight.c
index 714bb90a..f680e400 100644
--- a/src/core/ao_microflight.c
+++ b/src/core/ao_microflight.c
@@ -33,7 +33,7 @@ ao_microsample(void)
ao_microkalman_correct();
}
-#define NUM_PA_HIST 16
+#define NUM_PA_HIST (GROUND_AVG)
#define SKIP_PA_HIST(i,j) (((i) + (j)) & (NUM_PA_HIST - 1))
@@ -60,11 +60,11 @@ ao_microflight(void)
h = 0;
for (;;) {
time += SAMPLE_SLEEP;
- if (sample_count == 0)
+ if ((sample_count & 0x1f) == 0)
ao_led_on(AO_LED_REPORT);
ao_delay_until(time);
ao_microsample();
- if (sample_count == 0)
+ if ((sample_count & 0x1f) == 0)
ao_led_off(AO_LED_REPORT);
pa_hist[h] = pa;
h = SKIP_PA_HIST(h,1);
@@ -85,10 +85,10 @@ ao_microflight(void)
}
}
- /* Go back and find the first sample a decent interval above the ground */
+ /* Go back and find the last sample close to the ground */
pa_min = pa_ground - LAND_DETECT;
- for (i = SKIP_PA_HIST(h,2); i != h; i = SKIP_PA_HIST(i,2)) {
- if (pa_hist[i] < pa_min)
+ for (i = SKIP_PA_HIST(h,-2); i != SKIP_PA_HIST(h,2); i = SKIP_PA_HIST(i,-2)) {
+ if (pa_hist[i] >= pa_min)
break;
}
diff --git a/src/product/ao_micropeak.h b/src/product/ao_micropeak.h
index 3e3dec15..0cefca6f 100644
--- a/src/product/ao_micropeak.h
+++ b/src/product/ao_micropeak.h
@@ -20,12 +20,12 @@
#define SAMPLE_SLEEP AO_MS_TO_TICKS(96)
-/* 16 sample, or about two seconds worth */
-#define GROUND_AVG_SHIFT 4
+/* 64 sample, or about six seconds worth */
+#define GROUND_AVG_SHIFT 6
#define GROUND_AVG (1 << GROUND_AVG_SHIFT)
/* Pressure change (in Pa) to detect boost */
-#define BOOST_DETECT 120 /* 10m at sea level, 12m at 2000m */
+#define BOOST_DETECT 360 /* 30m at sea level, 36m at 2000m */
/* Wait after power on before doing anything to give the user time to assemble the rocket */
#define BOOST_DELAY AO_SEC_TO_TICKS(60)