From 633d8d496964d445567671e05ea8b6c96c03a7a0 Mon Sep 17 00:00:00 2001 From: Vladimir Zidar Date: Tue, 10 May 2016 23:00:12 +0200 Subject: [PATCH] LP-309 Arming should be done at armingInputLevel edge (crossing ARMED_THRESHOLD) instead of level to avoid unwanted re-arming after timeout. --- flight/modules/ManualControl/armhandler.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/flight/modules/ManualControl/armhandler.c b/flight/modules/ManualControl/armhandler.c index 6157339a5..6be9a43ed 100644 --- a/flight/modules/ManualControl/armhandler.c +++ b/flight/modules/ManualControl/armhandler.c @@ -195,12 +195,22 @@ void armHandler(bool newinit, FrameType_t frameType) bool manualArm = false; bool manualDisarm = false; - if (armingInputLevel <= -ARMED_THRESHOLD) { + static FlightModeSettingsArmingOptions previousArmingSettings = -1; + static float previousArmingInputLevel = 0.0f; + + if (previousArmingSettings != settings.Arming) { + previousArmingSettings = settings.Arming; + previousArmingInputLevel = 0.0f; + } + + if ((armingInputLevel <= -ARMED_THRESHOLD) && (previousArmingInputLevel > -ARMED_THRESHOLD)) { manualArm = true; - } else if (armingInputLevel >= +ARMED_THRESHOLD) { + } else if ((armingInputLevel >= +ARMED_THRESHOLD) && (previousArmingInputLevel < +ARMED_THRESHOLD)) { manualDisarm = true; } + previousArmingInputLevel = armingInputLevel; + switch (armState) { case ARM_STATE_DISARMED: setArmedIfChanged(FLIGHTSTATUS_ARMED_DISARMED);