diff options
| author | Keith Packard <keithp@keithp.com> | 2009-05-17 23:36:21 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2009-05-17 23:36:21 -0700 | 
| commit | 91b07410122d0eaaf292cdb31c200925d45eaf2c (patch) | |
| tree | 7a5662b499d09855e9cece8d2de379e3556a0156 /aoview/aoview_state.c | |
| parent | 71d1689759829f1bc8550f1a4d8c9f2dc90b2ab4 (diff) | |
Transmit computed ground pressure and acceleration values0.4
These are the last two values relevant to figuring out the state of the
flight computer, and as they are computed by averaging 10 seconds of 100Hz
sample data, they're a lot more accurate than anything the receiver could do
on its own.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'aoview/aoview_state.c')
| -rw-r--r-- | aoview/aoview_state.c | 62 | 
1 files changed, 20 insertions, 42 deletions
| diff --git a/aoview/aoview_state.c b/aoview/aoview_state.c index dda92af9..02ae0307 100644 --- a/aoview/aoview_state.c +++ b/aoview/aoview_state.c @@ -18,14 +18,9 @@  #include "aoview.h"  #include <math.h> -static int	pad_pres; -static int	pad_accel; -static int	pad_pres_total; -static int	pad_accel_total;  static double	pad_lat_total;  static double	pad_lon_total;  static int	pad_alt_total; -static int	npad;  static int	npad_gps;  static int	prev_tick;  static double	prev_accel; @@ -88,40 +83,28 @@ aoview_state_notify(struct aostate *state)  	double	max_accel;  	if (!strcmp(state->state, "pad")) { -		if (npad < NUM_PAD_SAMPLES) { -			pad_accel_total += state->flight_accel; -			pad_pres_total += state->flight_pres; -			if (state->locked) { -				pad_lat_total += state->lat; -				pad_lon_total += state->lon; -				pad_alt_total += state->alt; -				npad_gps++; -			} -			npad++; +		if (state->locked && npad_gps < NUM_PAD_SAMPLES) { +			pad_lat_total += state->lat; +			pad_lon_total += state->lon; +			pad_alt_total += state->alt; +			npad_gps++;  		} -		if (npad <= NUM_PAD_SAMPLES) { -			pad_pres = pad_pres_total / npad; -			pad_accel = pad_accel_total / npad; -			if (npad_gps) { -				pad_lat = pad_lat_total / npad_gps; -				pad_lon = pad_lon_total / npad_gps; -				pad_alt = pad_alt_total / npad_gps; -			} -		} -		if (npad == NUM_PAD_SAMPLES) { -			npad++; -			min_pres = pad_pres; -			min_accel = pad_accel; +		if (state->locked && npad_gps <= NUM_PAD_SAMPLES) { +			pad_lat = pad_lat_total / npad_gps; +			pad_lon = pad_lon_total / npad_gps; +			pad_alt = pad_alt_total / npad_gps;  		} +		min_pres = state->ground_pres; +		min_accel = state->ground_accel;  	}  	if (state->flight_pres < min_pres)  		min_pres = state->flight_pres;  	if (state->flight_accel < min_accel)  		min_accel = state->flight_accel; -	altitude = aoview_pres_to_altitude(state->flight_pres) - aoview_pres_to_altitude(pad_pres); -	accel = (pad_accel - state->flight_accel) / 27.0; +	altitude = aoview_pres_to_altitude(state->flight_pres) - aoview_pres_to_altitude(state->ground_pres); +	accel = (state->ground_accel - state->flight_accel) / 27.0;  	velocity = state->flight_vel / 2700.0; -	max_accel = (pad_accel - min_accel) / 27.0; +	max_accel = (state->ground_accel - min_accel) / 27.0;  	ticks = state->tick - prev_tick;  	temp = ((state->temp / 32767.0 * 3.3) - 0.5) / 0.01;  	battery = (state->batt / 32767.0 * 5.0); @@ -132,20 +115,20 @@ aoview_state_notify(struct aostate *state)  	prev_tick = state->tick;  	aoview_table_start(); -	if (npad >= NUM_PAD_SAMPLES) +	if (npad_gps >= NUM_PAD_SAMPLES)  		aoview_table_add_row("Ground state", "ready");  	else -		aoview_table_add_row("Ground state", "preparing (%d)", -				     NUM_PAD_SAMPLES - npad); +		aoview_table_add_row("Ground state", "waiting for gps (%d)", +				     NUM_PAD_SAMPLES - npad_gps);  	aoview_table_add_row("Rocket state", "%s", state->state);  	aoview_table_add_row("Callsign", "%s", state->callsign);  	aoview_table_add_row("Rocket serial", "%d", state->serial); -	aoview_table_add_row("RSSI", "%ddB", state->rssi); +	aoview_table_add_row("RSSI", "%ddBm", state->rssi);  	aoview_table_add_row("Height", "%dm", altitude);  	aoview_table_add_row("Max height", "%dm",  			     aoview_pres_to_altitude(min_pres) - -			     aoview_pres_to_altitude(pad_pres)); +			     aoview_pres_to_altitude(state->ground_pres));  	aoview_table_add_row("Acceleration", "%gm/s²", accel);  	aoview_table_add_row("Max acceleration", "%gm/s²", max_accel);  	aoview_table_add_row("Velocity", "%gm/s", velocity); @@ -153,7 +136,7 @@ aoview_state_notify(struct aostate *state)  	aoview_table_add_row("Battery", "%gV", battery);  	aoview_table_add_row("Drogue", "%gV", drogue_sense);  	aoview_table_add_row("Main", "%gV", main_sense); -	aoview_table_add_row("Pad altitude", "%dm", aoview_pres_to_altitude(pad_pres)); +	aoview_table_add_row("Pad altitude", "%dm", aoview_pres_to_altitude(state->ground_pres));  	aoview_table_add_row("Satellites", "%d", state->nsat);  	if (state->locked) {  		aoview_state_add_deg("Latitude", state->lat); @@ -181,14 +164,9 @@ aoview_state_notify(struct aostate *state)  void  aoview_state_new(void)  { -	pad_pres = 0; -	pad_accel = 0; -	pad_pres_total = 0; -	pad_accel_total = 0;  	pad_lat_total = 0;  	pad_lon_total = 0;  	pad_alt_total = 0; -	npad = 0;  	npad_gps = 0;  	prev_tick = 0;  	prev_accel = 0; | 
