From a88fb685fab77cc70ec0f17926dfb7d0d0b06002 Mon Sep 17 00:00:00 2001 From: borisbstyle Date: Tue, 9 Feb 2016 09:39:22 +0100 Subject: [PATCH] 3D prevent negative arming // Reverse logic --- src/main/flight/mixer.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index b3e1e6f669..3ed612dc03 100755 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -785,6 +785,8 @@ void mixTable(void) // Find min and max throttle based on condition. Use rcData for 3D to prevent loss of power due to min_check if (feature(FEATURE_3D)) { + if (!ARMING_FLAG(ARMED)) throttlePrevious = rxConfig->midrc; // When disarmed set to mid_rc. It always results in positive direction after arming. + if ((rcData[THROTTLE] <= (rxConfig->midrc - flight3DConfig->deadband3d_throttle))) { // Out of band handling throttleMax = flight3DConfig->deadband3d_low; throttleMin = escAndServoConfig->minthrottle; @@ -818,6 +820,7 @@ void mixTable(void) if ((mixReduction > (mixerConfig->airmode_saturation_limit / 100.0f)) && IS_RC_MODE_ACTIVE(BOXAIRMODE)) { throttleMin = throttleMax = throttleMin + (throttleRange / 2); } + } else { motorLimitReached = false; throttleMin = throttleMin + (rollPitchYawMixRange / 2); @@ -832,10 +835,10 @@ void mixTable(void) if (isFailsafeActive) { motor[i] = constrain(motor[i], escAndServoConfig->mincommand, escAndServoConfig->maxthrottle); } else if (feature(FEATURE_3D)) { - if (throttlePrevious >= (rxConfig->midrc + flight3DConfig->deadband3d_throttle)) { - motor[i] = constrain(motor[i], flight3DConfig->deadband3d_high, escAndServoConfig->maxthrottle); - } else { + if (throttlePrevious <= (rxConfig->midrc - flight3DConfig->deadband3d_throttle)) { motor[i] = constrain(motor[i], escAndServoConfig->minthrottle, flight3DConfig->deadband3d_low); + } else { + motor[i] = constrain(motor[i], flight3DConfig->deadband3d_high, escAndServoConfig->maxthrottle); } } else { motor[i] = constrain(motor[i], escAndServoConfig->minthrottle, escAndServoConfig->maxthrottle);