From 8bd24c726543c4b6227758718a3bd1ff7d9368b5 Mon Sep 17 00:00:00 2001 From: themicp Date: Sat, 8 Apr 2023 14:30:50 +0300 Subject: [PATCH 1/9] Rename 'chute' to 'drogue' --- libraries/fsm.cpp | 32 ++++++++++++++++---------------- libraries/fsm.h | 2 +- libraries/types.cpp | 4 ++-- libraries/types.h | 4 ++-- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/libraries/fsm.cpp b/libraries/fsm.cpp index 1d7dc67..52269b7 100644 --- a/libraries/fsm.cpp +++ b/libraries/fsm.cpp @@ -35,22 +35,22 @@ FSM::FSM(Telemetry* telemetry, IMU* imu_sensor, Altimeter* altimeter, GPSReceive // Ejection Test Transition(STATE::EJECTION_TEST_READY, EVENT::TRIGGER_FTS, STATE::EJECTION_TEST_EJECT), - Transition(STATE::EJECTION_TEST_EJECT, EVENT::CHUTE_EJECTED, STATE::EJECTION_TEST_COMPLETE), + Transition(STATE::EJECTION_TEST_EJECT, EVENT::DROGUE_EJECTED, STATE::EJECTION_TEST_COMPLETE), // Flying Transition(STATE::ASCENDING, EVENT::APOGEE_TIMER_TIMEOUT, STATE::APOGEE_TIMEOUT), Transition(STATE::ASCENDING, EVENT::INIT_CALIBRATION, STATE::CALIBRATION), - Transition(STATE::ASCENDING, EVENT::APOGEE_DETECTED, STATE::DEPLOYING_CHUTE), - Transition(STATE::APOGEE_TIMEOUT, EVENT::APOGEE_DETECTED, STATE::DEPLOYING_CHUTE), - Transition(STATE::DEPLOYING_CHUTE, EVENT::CHUTE_EJECTED, STATE::RECOVERING), + Transition(STATE::ASCENDING, EVENT::APOGEE_DETECTED, STATE::DEPLOYING_DROGUE), + Transition(STATE::APOGEE_TIMEOUT, EVENT::APOGEE_DETECTED, STATE::DEPLOYING_DROGUE), + Transition(STATE::DEPLOYING_DROGUE, EVENT::DROGUE_EJECTED, STATE::RECOVERING), // FTS from all states except IDLE - Transition(STATE::SETUP, EVENT::TRIGGER_FTS, STATE::DEPLOYING_CHUTE), - Transition(STATE::CALIBRATION, EVENT::TRIGGER_FTS, STATE::DEPLOYING_CHUTE), - Transition(STATE::READY, EVENT::TRIGGER_FTS, STATE::DEPLOYING_CHUTE), - Transition(STATE::ASCENDING, EVENT::TRIGGER_FTS, STATE::DEPLOYING_CHUTE), - Transition(STATE::APOGEE_TIMEOUT, EVENT::TRIGGER_FTS, STATE::DEPLOYING_CHUTE), - Transition(STATE::RECOVERING, EVENT::TRIGGER_FTS, STATE::DEPLOYING_CHUTE) + Transition(STATE::SETUP, EVENT::TRIGGER_FTS, STATE::DEPLOYING_DROGUE), + Transition(STATE::CALIBRATION, EVENT::TRIGGER_FTS, STATE::DEPLOYING_DROGUE), + Transition(STATE::READY, EVENT::TRIGGER_FTS, STATE::DEPLOYING_DROGUE), + Transition(STATE::ASCENDING, EVENT::TRIGGER_FTS, STATE::DEPLOYING_DROGUE), + Transition(STATE::APOGEE_TIMEOUT, EVENT::TRIGGER_FTS, STATE::DEPLOYING_DROGUE), + Transition(STATE::RECOVERING, EVENT::TRIGGER_FTS, STATE::DEPLOYING_DROGUE) }; register_state_transitions(flight_state_transitions); @@ -75,7 +75,7 @@ void FSM::process_event(EVENT event) { if (state_transitions[(int)state][(int)event] != STATE::INVALID_STATE) { state = state_transitions[(int)state][(int)event]; - if (state == STATE::DEPLOYING_CHUTE || state == STATE::EJECTION_TEST_EJECT) { + if (state == STATE::DEPLOYING_DROGUE || state == STATE::EJECTION_TEST_EJECT) { ejection_start = millis(); } @@ -147,7 +147,7 @@ void FSM::onEjectionTestReady() {} void FSM::onEjectionTestEject() { telemetry->setRadioThrottle(1000); *loop_frequency = 100; - onDeployingChute(); + onDeployingDrogue(); } void FSM::onEjectionTestComplete() { @@ -174,11 +174,11 @@ void FSM::onApogeeTimeout() { process_event(EVENT::APOGEE_DETECTED); } -void FSM::onDeployingChute() { +void FSM::onDeployingDrogue() { igniter->enable(); if (millis() - ejection_start > EJECTION_TIMEOUT) { igniter->disable(); - process_event(EVENT::CHUTE_EJECTED); + process_event(EVENT::DROGUE_EJECTED); telemetry->setRadioThrottle(0); *loop_frequency = 10; } @@ -259,8 +259,8 @@ void FSM::runCurrentState() { case STATE::APOGEE_TIMEOUT: onApogeeTimeout(); break; - case STATE::DEPLOYING_CHUTE: - onDeployingChute(); + case STATE::DEPLOYING_DROGUE: + onDeployingDrogue(); break; case STATE::RECOVERING: onRecovering(); diff --git a/libraries/fsm.h b/libraries/fsm.h index 7c23b5d..6b9b637 100644 --- a/libraries/fsm.h +++ b/libraries/fsm.h @@ -53,6 +53,6 @@ class FSM { void onEjectionTestComplete(); void onAscending(); void onApogeeTimeout(); - void onDeployingChute(); + void onDeployingDrogue(); void onRecovering(); }; diff --git a/libraries/types.cpp b/libraries/types.cpp index 0071982..4fe6a7e 100644 --- a/libraries/types.cpp +++ b/libraries/types.cpp @@ -17,7 +17,7 @@ static String StateNames[] = { "EJECTION_TEST_COMPLETE", "ASCENDING", "APOGEE_TIMEOUT", - "DEPLOYING_CHUTE", + "DEPLOYING_DROGUE", "RECOVERING" }; @@ -35,7 +35,7 @@ static String EventNames[] = { "APOGEE_TIMER_TIMEOUT", "APOGEE_DETECTED", "TRIGGER_FTS", - "CHUTE_EJECTED", + "DROGUE_EJECTED", "GO_IDLE" }; diff --git a/libraries/types.h b/libraries/types.h index c937b5e..bf306c1 100644 --- a/libraries/types.h +++ b/libraries/types.h @@ -21,7 +21,7 @@ enum class STATE : uint8_t { EJECTION_TEST_COMPLETE, /*!< */ ASCENDING, /*!< The rocket has detected that it is ascending. */ APOGEE_TIMEOUT, /*!< */ - DEPLOYING_CHUTE, /*!< */ + DEPLOYING_DROGUE, /*!< */ RECOVERING, /*!< The recovery process of the rocket has began. */ Count /*!< */ }; @@ -35,7 +35,7 @@ enum class EVENT : uint8_t { APOGEE_TIMER_TIMEOUT, /*!< */ APOGEE_DETECTED, /*!< */ TRIGGER_FTS, /*!< */ - CHUTE_EJECTED, /*!< */ + DROGUE_EJECTED, /*!< */ GO_IDLE, /*!< */ Count /*!< */ }; From d7df06965c1b037608193b14d27edf049136059f Mon Sep 17 00:00:00 2001 From: themicp Date: Sat, 8 Apr 2023 15:25:18 +0300 Subject: [PATCH 2/9] Define the necessary events and states for dual deployment --- libraries/fsm.cpp | 7 +++++-- libraries/types.cpp | 7 ++++++- libraries/types.h | 7 ++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/libraries/fsm.cpp b/libraries/fsm.cpp index 52269b7..c2ccaa7 100644 --- a/libraries/fsm.cpp +++ b/libraries/fsm.cpp @@ -35,14 +35,17 @@ FSM::FSM(Telemetry* telemetry, IMU* imu_sensor, Altimeter* altimeter, GPSReceive // Ejection Test Transition(STATE::EJECTION_TEST_READY, EVENT::TRIGGER_FTS, STATE::EJECTION_TEST_EJECT), - Transition(STATE::EJECTION_TEST_EJECT, EVENT::DROGUE_EJECTED, STATE::EJECTION_TEST_COMPLETE), + Transition(STATE::EJECTION_TEST_EJECT, EVENT::DROGUE_DEPLOYED, STATE::EJECTION_TEST_COMPLETE), // Flying Transition(STATE::ASCENDING, EVENT::APOGEE_TIMER_TIMEOUT, STATE::APOGEE_TIMEOUT), Transition(STATE::ASCENDING, EVENT::INIT_CALIBRATION, STATE::CALIBRATION), Transition(STATE::ASCENDING, EVENT::APOGEE_DETECTED, STATE::DEPLOYING_DROGUE), Transition(STATE::APOGEE_TIMEOUT, EVENT::APOGEE_DETECTED, STATE::DEPLOYING_DROGUE), - Transition(STATE::DEPLOYING_DROGUE, EVENT::DROGUE_EJECTED, STATE::RECOVERING), + Transition(STATE::DEPLOYING_DROGUE, EVENT::DROGUE_DEPLOYED, STATE::WAITING_FOR_MAIN), + Transition(STATE::WAITING_FOR_MAIN, EVENT::MAIN_CHUTE_TIMER_TIMEOUT, STATE::DEPLOYING_MAIN), + Transition(STATE::WAITING_FOR_MAIN, EVENT::REACHED_MAIN_CHUTE_ALTITUDE, STATE::DEPLOYING_MAIN), + Transition(STATE::DEPLOYING_MAIN, EVENT::MAIN_DEPLOYED, STATE::RECOVERING), // FTS from all states except IDLE Transition(STATE::SETUP, EVENT::TRIGGER_FTS, STATE::DEPLOYING_DROGUE), diff --git a/libraries/types.cpp b/libraries/types.cpp index 4fe6a7e..5c0de13 100644 --- a/libraries/types.cpp +++ b/libraries/types.cpp @@ -18,6 +18,8 @@ static String StateNames[] = { "ASCENDING", "APOGEE_TIMEOUT", "DEPLOYING_DROGUE", + "WAITING_FOR_MAIN", + "DEPLOYING_MAIN", "RECOVERING" }; @@ -35,7 +37,10 @@ static String EventNames[] = { "APOGEE_TIMER_TIMEOUT", "APOGEE_DETECTED", "TRIGGER_FTS", - "DROGUE_EJECTED", + "DROGUE_DEPLOYED", + "MAIN_CHUTE_TIMER_TIMEOUT", + "REACHED_MAIN_CHUTE_ALTITUDE", + "MAIN_DEPLOYED", "GO_IDLE" }; diff --git a/libraries/types.h b/libraries/types.h index bf306c1..4f58520 100644 --- a/libraries/types.h +++ b/libraries/types.h @@ -22,6 +22,8 @@ enum class STATE : uint8_t { ASCENDING, /*!< The rocket has detected that it is ascending. */ APOGEE_TIMEOUT, /*!< */ DEPLOYING_DROGUE, /*!< */ + WAITING_FOR_MAIN, /*!< */ + DEPLOYING_MAIN, /*!< */ RECOVERING, /*!< The recovery process of the rocket has began. */ Count /*!< */ }; @@ -35,7 +37,10 @@ enum class EVENT : uint8_t { APOGEE_TIMER_TIMEOUT, /*!< */ APOGEE_DETECTED, /*!< */ TRIGGER_FTS, /*!< */ - DROGUE_EJECTED, /*!< */ + DROGUE_DEPLOYED, /*!< */ + MAIN_CHUTE_TIMER_TIMEOUT, /*!< */ + REACHED_MAIN_CHUTE_ALTITUDE, /*!< */ + MAIN_DEPLOYED, /*!< */ GO_IDLE, /*!< */ Count /*!< */ }; From eae30732fe9b84aaa3a548bb83a0e0103b965895 Mon Sep 17 00:00:00 2001 From: themicp Date: Sat, 8 Apr 2023 15:26:59 +0300 Subject: [PATCH 3/9] Pass two igniter instances to FSM: one for drogue and one for main --- flight-computer.ino | 5 +++-- libraries/fsm.cpp | 22 +++++++++++++++++----- libraries/fsm.h | 5 +++-- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/flight-computer.ino b/flight-computer.ino index 48af264..ade4073 100644 --- a/flight-computer.ino +++ b/flight-computer.ino @@ -8,7 +8,8 @@ LSM9DS1_API imu_sensor = LSM9DS1_API::getInstance(); BMP3XX_API altimeter = BMP3XX_API::getInstance(); Telemetry telemetry = Telemetry::getInstance(); -MosfetIgniter igniter = MosfetIgniter::getInstance(); +MosfetIgniter drogueIgniter(1); +MosfetIgniter mainIgniter(2); Adafruit_GPS_API gps = Adafruit_GPS_API::getInstance(); FSM *fsm; // TODO: improve buzzer code @@ -26,7 +27,7 @@ void setup() { tone(buzzer, 500); #endif - fsm = new FSM(&telemetry, &imu_sensor, &altimeter, &gps, &igniter, &loop_frequency); + fsm = new FSM(&telemetry, &imu_sensor, &altimeter, &gps, &drogueIgniter, &mainIgniter, &loop_frequency); #if BUZZER noTone(buzzer); diff --git a/libraries/fsm.cpp b/libraries/fsm.cpp index c2ccaa7..206d792 100644 --- a/libraries/fsm.cpp +++ b/libraries/fsm.cpp @@ -15,12 +15,20 @@ #define VBATPIN A7 #define EJECTION_TIMEOUT 4000 // ms -FSM::FSM(Telemetry* telemetry, IMU* imu_sensor, Altimeter* altimeter, GPSReceiver* gps, Igniter* igniter, uint8_t* loop_frequency) +FSM::FSM( + Telemetry* telemetry, + IMU* imu_sensor, + Altimeter* altimeter, + GPSReceiver* gps, + Igniter* drogueIgniter, + Igniter* mainIgniter, + uint8_t* loop_frequency) : telemetry(telemetry) , imu_sensor(imu_sensor) , altimeter(altimeter) , gps(gps) - , igniter(igniter) + , drogueIgniter(drogueIgniter) + , mainIgniter(mainIgniter) , loop_frequency(loop_frequency) { Transition flight_state_transitions[] = { @@ -117,9 +125,13 @@ void FSM::onSetup() { gps->setup(); telemetry->send("GPS setup complete."); - telemetry->send("Setting up Igniter.."); - igniter->setup(); - telemetry->send("Igniter setup complete."); + telemetry->send("Setting up Drogue Igniter.."); + drogueIgniter->setup(); + telemetry->send("Drogue Igniter setup complete."); + + telemetry->send("Setting up Main Igniter.."); + mainIgniter->setup(); + telemetry->send("Main Igniter setup complete."); process_event(EVENT::SETUP_COMPLETE); } diff --git a/libraries/fsm.h b/libraries/fsm.h index 6b9b637..7f95eff 100644 --- a/libraries/fsm.h +++ b/libraries/fsm.h @@ -26,7 +26,7 @@ class FSM { void process_event(EVENT event); void runCurrentState(); - FSM(Telemetry* telemetry, IMU* imu_sensor, Altimeter* altimeter, GPSReceiver* gps, Igniter* igniter, uint8_t* loop_frequency); + FSM(Telemetry* telemetry, IMU* imu_sensor, Altimeter* altimeter, GPSReceiver* gps, Igniter* drogueIgniter, Igniter* mainIgniter, uint8_t* loop_frequency); private: STATE state = STATE::SETUP; @@ -36,7 +36,8 @@ class FSM { IMU* imu_sensor; Altimeter* altimeter; GPSReceiver* gps; - Igniter* igniter; + Igniter* drogueIgniter; + Igniter* mainIgniter; uint8_t* loop_frequency; unsigned long launch_time; From 36e185a6c1818fb1715bf44e666305c3cd3608ec Mon Sep 17 00:00:00 2001 From: themicp Date: Sat, 8 Apr 2023 15:27:32 +0300 Subject: [PATCH 4/9] Implement timeout and deployment for main chute --- libraries/fsm.cpp | 39 ++++++++++++++++++++++++++++++++++----- libraries/fsm.h | 4 ++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/libraries/fsm.cpp b/libraries/fsm.cpp index 206d792..57f9068 100644 --- a/libraries/fsm.cpp +++ b/libraries/fsm.cpp @@ -12,8 +12,10 @@ #define GRAVITY 372 // cm/s^2 -- Mars #define GRAVITY 162 // cm/s^2 -- Moon */ +#define MAIN_CHUTE_ALTITUDE 200 // meters +#define MAIN_CHUTE_TIMEOUT 10 // seconds #define VBATPIN A7 -#define EJECTION_TIMEOUT 4000 // ms +#define PYRO_TIMEOUT 4000 // ms FSM::FSM( Telemetry* telemetry, @@ -90,6 +92,10 @@ void FSM::process_event(EVENT event) { ejection_start = millis(); } + if (state == STATE::DEPLOYING_MAIN) { + main_deployment_start = millis(); + } + if (event == EVENT::LAUNCHED) { onLaunched(); } @@ -190,10 +196,27 @@ void FSM::onApogeeTimeout() { } void FSM::onDeployingDrogue() { - igniter->enable(); - if (millis() - ejection_start > EJECTION_TIMEOUT) { - igniter->disable(); - process_event(EVENT::DROGUE_EJECTED); + drogueIgniter->enable(); + if (millis() - ejection_start > PYRO_TIMEOUT) { + drogueIgniter->disable(); + drogue_deployment_time = millis(); + process_event(EVENT::DROGUE_DEPLOYED); + telemetry->setRadioThrottle(0); + *loop_frequency = 10; + } +} + +void FSM::onWaitingForMain() { + if (millis() - drogue_deployment_time >= MAIN_CHUTE_TIMEOUT * 1000) { + process_event(EVENT::MAIN_CHUTE_TIMER_TIMEOUT); + } +} + +void FSM::onDeployingMain() { + mainIgniter->enable(); + if (millis() - main_deployment_start > PYRO_TIMEOUT) { + mainIgniter->disable(); + process_event(EVENT::MAIN_DEPLOYED); telemetry->setRadioThrottle(0); *loop_frequency = 10; } @@ -277,6 +300,12 @@ void FSM::runCurrentState() { case STATE::DEPLOYING_DROGUE: onDeployingDrogue(); break; + case STATE::WAITING_FOR_MAIN: + onWaitingForMain(); + break; + case STATE::DEPLOYING_MAIN: + onDeployingMain(); + break; case STATE::RECOVERING: onRecovering(); break; diff --git a/libraries/fsm.h b/libraries/fsm.h index 7f95eff..745eeb7 100644 --- a/libraries/fsm.h +++ b/libraries/fsm.h @@ -42,6 +42,8 @@ class FSM { unsigned long launch_time; unsigned long ejection_start; + unsigned long main_deployment_start; + unsigned long drogue_deployment_time; float max_agl = 0; void onSetup(); @@ -55,5 +57,7 @@ class FSM { void onAscending(); void onApogeeTimeout(); void onDeployingDrogue(); + void onWaitingForMain(); + void onDeployingMain(); void onRecovering(); }; From 136e572184222d0fea1136b2fe5071041574b820 Mon Sep 17 00:00:00 2001 From: themicp Date: Sat, 8 Apr 2023 15:28:12 +0300 Subject: [PATCH 5/9] MosfetIgniter: allow it to create multiple instances instead of being a singleton --- libraries/mosfet_igniter.cpp | 19 +++++++------------ libraries/mosfet_igniter.h | 8 +++++++- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/libraries/mosfet_igniter.cpp b/libraries/mosfet_igniter.cpp index 941531f..b821b1e 100644 --- a/libraries/mosfet_igniter.cpp +++ b/libraries/mosfet_igniter.cpp @@ -11,29 +11,24 @@ IgniterOptions igniters[2] = { {5, 16}, {6, 15} }; -MosfetIgniter& MosfetIgniter::getInstance() { - static MosfetIgniter instance; - return instance; -} - void MosfetIgniter::setup() { - pinMode(igniters[IGNITER - 1].mosfet_pin, OUTPUT); + pinMode(igniters[igniterChannel - 1].mosfet_pin, OUTPUT); #if IGN_DEBUG - pinMode(igniters[IGNITER - 1].led_pin, OUTPUT); + pinMode(igniters[igniterChannel - 1].led_pin, OUTPUT); #endif - digitalWrite(igniters[IGNITER - 1].mosfet_pin, LOW); + digitalWrite(igniters[igniterChannel - 1].mosfet_pin, LOW); } void MosfetIgniter::enable() { - digitalWrite(igniters[IGNITER - 1].mosfet_pin, HIGH); + digitalWrite(igniters[igniterChannel - 1].mosfet_pin, HIGH); #if IGN_DEBUG - digitalWrite(igniters[IGNITER - 1].led_pin, HIGH); + digitalWrite(igniters[igniterChannel - 1].led_pin, HIGH); #endif } void MosfetIgniter::disable() { - digitalWrite(igniters[IGNITER - 1].mosfet_pin, LOW); + digitalWrite(igniters[igniterChannel - 1].mosfet_pin, LOW); #if IGN_DEBUG - digitalWrite(igniters[IGNITER - 1].led_pin, LOW); + digitalWrite(igniters[igniterChannel - 1].led_pin, LOW); #endif } diff --git a/libraries/mosfet_igniter.h b/libraries/mosfet_igniter.h index 185296b..48adeb2 100644 --- a/libraries/mosfet_igniter.h +++ b/libraries/mosfet_igniter.h @@ -1,9 +1,15 @@ #include "igniter.h" class MosfetIgniter: public Igniter { + private: + int igniterChannel; public: - static MosfetIgniter& getInstance(); + MosfetIgniter(int channel); void setup(); void enable(); void disable(); }; + +inline MosfetIgniter::MosfetIgniter(int channel) + : igniterChannel(channel) +{} \ No newline at end of file From 459dfbb1d62d017dd493a25289aeab6b8b627791 Mon Sep 17 00:00:00 2001 From: themicp Date: Sat, 8 Apr 2023 15:30:01 +0300 Subject: [PATCH 6/9] Remove igniter selection -- both igniters are now used --- libraries/definitions.h | 1 - libraries/types.cpp | 3 +-- libraries/types.h | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/libraries/definitions.h b/libraries/definitions.h index 183dc2a..f8480ec 100644 --- a/libraries/definitions.h +++ b/libraries/definitions.h @@ -1,5 +1,4 @@ #define SERIAL_DEBUG false #define SD_LOGS true #define IGN_DEBUG true -#define IGNITER 1 // 1 or 2 #define BUZZER true diff --git a/libraries/types.cpp b/libraries/types.cpp index 5c0de13..7a1dfb4 100644 --- a/libraries/types.cpp +++ b/libraries/types.cpp @@ -77,8 +77,7 @@ String stringifyTelemetryMessage(TelemetryMessage message) { String(message.free_memory_kb) + "," + String(message.battery_voltage_mv) + "," + String(state_to_str(message.state)) + "," + - String(message.sd_logs_enabled) + "," + - String(message.selected_igniter); + String(message.sd_logs_enabled); if (message.state != STATE::SETUP and message.state != STATE::IDLE and message.state != STATE::CALIBRATION) { message_str += "," + diff --git a/libraries/types.h b/libraries/types.h index 4f58520..710fc52 100644 --- a/libraries/types.h +++ b/libraries/types.h @@ -126,7 +126,6 @@ struct TelemetryMessage { uint16_t battery_voltage_mv; /*!< Voltage of the battery. Usefull in determining battery percentage. */ STATE state; /*!< State of the microcontroller and the rocket in general. */ bool sd_logs_enabled; /*!< True if the logging output will be saved to the SD as well. */ - uint8_t selected_igniter; /*!< */ TelemetryMessagePayload payload; /*!< Data returned from the sensors. */ char debug_message[80]; /*!< Debug message c style string. */ }; From 5f328841625e654bcfd174a61cdb900b68e34cd4 Mon Sep 17 00:00:00 2001 From: themicp Date: Sat, 8 Apr 2023 16:06:29 +0300 Subject: [PATCH 7/9] Restore loop frequency if switching from LAUNCHED to READY states --- libraries/fsm.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/fsm.cpp b/libraries/fsm.cpp index 57f9068..7bbd217 100644 --- a/libraries/fsm.cpp +++ b/libraries/fsm.cpp @@ -157,6 +157,9 @@ void FSM::onCalibration() { } void FSM::onReady() { + telemetry->setRadioThrottle(0); + *loop_frequency = 10; + if (altimeter->agl() > LAUNCH_AGL_THRESHOLD or (imu_sensor->accelerationX() / GRAVITY) * -1 > LAUNCH_ACCELERATION_THRESHOLD) { process_event(EVENT::LAUNCHED); From 6f39d721a7aaa0cac6e84ed6249dfb2a9fb47f4b Mon Sep 17 00:00:00 2001 From: themicp Date: Sat, 8 Apr 2023 16:09:47 +0300 Subject: [PATCH 8/9] Remove selected_igniter from telemetry messages --- libraries/fsm.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/fsm.cpp b/libraries/fsm.cpp index 7bbd217..433f42f 100644 --- a/libraries/fsm.cpp +++ b/libraries/fsm.cpp @@ -250,7 +250,6 @@ void FSM::runCurrentState() { #else message.sd_logs_enabled = false; #endif - message.selected_igniter = IGNITER; if (state != STATE::SETUP and state != STATE::IDLE and state != STATE::CALIBRATION) { payload.agl_cm = altimeter->aglCM(); From 949c1bb3e3336c50766531c6e41f5be6435e0226 Mon Sep 17 00:00:00 2001 From: themicp Date: Sat, 8 Apr 2023 16:19:02 +0300 Subject: [PATCH 9/9] Deploy main when the altitude drops below a threshold --- libraries/fsm.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libraries/fsm.cpp b/libraries/fsm.cpp index 433f42f..cfb7815 100644 --- a/libraries/fsm.cpp +++ b/libraries/fsm.cpp @@ -12,8 +12,8 @@ #define GRAVITY 372 // cm/s^2 -- Mars #define GRAVITY 162 // cm/s^2 -- Moon */ -#define MAIN_CHUTE_ALTITUDE 200 // meters -#define MAIN_CHUTE_TIMEOUT 10 // seconds +#define MAIN_CHUTE_ALTITUDE 600 // meters +#define MAIN_CHUTE_TIMEOUT 50 // seconds #define VBATPIN A7 #define PYRO_TIMEOUT 4000 // ms @@ -210,6 +210,12 @@ void FSM::onDeployingDrogue() { } void FSM::onWaitingForMain() { + float agl = altimeter->agl(); + if (agl <= MAIN_CHUTE_ALTITUDE) { + process_event(EVENT::REACHED_MAIN_CHUTE_ALTITUDE); + return; + } + if (millis() - drogue_deployment_time >= MAIN_CHUTE_TIMEOUT * 1000) { process_event(EVENT::MAIN_CHUTE_TIMER_TIMEOUT); }