diff --git a/README.md b/README.md index 1cbd071..d7856e3 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Add it in a way you see fit. > Easy -The separation mechanism isn't super reliable. +The separation mechanism so super reliable that we never witness failures so we have to simulate them to get the experience. Add code to the avionics-mock simulator to, with some random chance, not deploy the drogue chute when the command arrives. diff --git a/flight-computer/src/state_machine.rs b/flight-computer/src/state_machine.rs index 0cba44a..b8d6b54 100644 --- a/flight-computer/src/state_machine.rs +++ b/flight-computer/src/state_machine.rs @@ -10,6 +10,8 @@ pub enum State { Thrusting { last_velocity: f32 }, Coasting, Descend, + MainDescend, + Touchdown, Shutdown, } @@ -21,7 +23,7 @@ impl State { avionics: &mut MessageSender, ) { match self { - State::Idle | State::Shutdown | State::Descend => {} + State::Idle | State::Shutdown | State::Touchdown => {} State::Thrusting { last_velocity } => { if inputs.velocity.down.abs() < *last_velocity { println!("Starting to decelerate"); @@ -36,6 +38,17 @@ impl State { *self = State::Descend; } } + State::Descend => { + if inputs.location.altitude < 3000.0 { + let _ = avionics.send(&AvionicsCommandMessage::DeployMain).await; + *self = State::MainDescend; + } + } + State::MainDescend => { + if inputs.location.altitude < 0.1 && inputs.velocity.down.abs() < 0.1 { + *self = State::Touchdown; + } + } } }