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))
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);
}
}
- /* 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;
}
#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)