mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-25 17:25:20 +03:00
Disabling of 3D Feature on switch
This commit is contained in:
parent
03cc5fa438
commit
fa63ab52e1
7 changed files with 26 additions and 11 deletions
BIN
.testThrottle.c.swp
Normal file
BIN
.testThrottle.c.swp
Normal file
Binary file not shown.
|
@ -822,18 +822,18 @@ void mixTable(void)
|
||||||
int16_t throttleMin, throttleMax;
|
int16_t throttleMin, throttleMax;
|
||||||
static int16_t throttlePrevious = 0; // Store the last throttle direction for deadband transitions
|
static int16_t throttlePrevious = 0; // Store the last throttle direction for deadband transitions
|
||||||
|
|
||||||
// Find min and max throttle based on condition. Use rcData for 3D to prevent loss of power due to min_check
|
// Find min and max throttle based on condition.
|
||||||
if (feature(FEATURE_3D)) {
|
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 (!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
|
if ((rcCommand[THROTTLE] <= (rxConfig->midrc - flight3DConfig->deadband3d_throttle))) { // Out of band handling
|
||||||
throttleMax = flight3DConfig->deadband3d_low;
|
throttleMax = flight3DConfig->deadband3d_low;
|
||||||
throttleMin = escAndServoConfig->minthrottle;
|
throttleMin = escAndServoConfig->minthrottle;
|
||||||
throttlePrevious = throttle = rcData[THROTTLE];
|
throttlePrevious = throttle = rcCommand[THROTTLE];
|
||||||
} else if (rcData[THROTTLE] >= (rxConfig->midrc + flight3DConfig->deadband3d_throttle)) { // Positive handling
|
} else if (rcCommand[THROTTLE] >= (rxConfig->midrc + flight3DConfig->deadband3d_throttle)) { // Positive handling
|
||||||
throttleMax = escAndServoConfig->maxthrottle;
|
throttleMax = escAndServoConfig->maxthrottle;
|
||||||
throttleMin = flight3DConfig->deadband3d_high;
|
throttleMin = flight3DConfig->deadband3d_high;
|
||||||
throttlePrevious = throttle = rcData[THROTTLE];
|
throttlePrevious = throttle = rcCommand[THROTTLE];
|
||||||
} else if ((throttlePrevious <= (rxConfig->midrc - flight3DConfig->deadband3d_throttle))) { // Deadband handling from negative to positive
|
} else if ((throttlePrevious <= (rxConfig->midrc - flight3DConfig->deadband3d_throttle))) { // Deadband handling from negative to positive
|
||||||
throttle = throttleMax = flight3DConfig->deadband3d_low;
|
throttle = throttleMax = flight3DConfig->deadband3d_low;
|
||||||
throttleMin = escAndServoConfig->minthrottle;
|
throttleMin = escAndServoConfig->minthrottle;
|
||||||
|
|
|
@ -49,7 +49,8 @@ typedef enum {
|
||||||
BOXBLACKBOX,
|
BOXBLACKBOX,
|
||||||
BOXFAILSAFE,
|
BOXFAILSAFE,
|
||||||
BOXAIRMODE,
|
BOXAIRMODE,
|
||||||
BOXACROPLUS,
|
BOXACROPLUS,
|
||||||
|
BOX3DDISABLESWITCH,
|
||||||
CHECKBOX_ITEM_COUNT
|
CHECKBOX_ITEM_COUNT
|
||||||
} boxId_e;
|
} boxId_e;
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
#include "io/rc_curves.h"
|
#include "io/rc_curves.h"
|
||||||
|
|
||||||
|
#include "config/config.h"
|
||||||
|
|
||||||
int16_t lookupPitchRollRC[PITCH_LOOKUP_LENGTH]; // lookup table for expo & RC rate PITCH+ROLL
|
int16_t lookupPitchRollRC[PITCH_LOOKUP_LENGTH]; // lookup table for expo & RC rate PITCH+ROLL
|
||||||
int16_t lookupYawRC[YAW_LOOKUP_LENGTH]; // lookup table for expo & RC rate YAW
|
int16_t lookupYawRC[YAW_LOOKUP_LENGTH]; // lookup table for expo & RC rate YAW
|
||||||
int16_t lookupThrottleRC[THROTTLE_LOOKUP_LENGTH]; // lookup table for expo & mid THROTTLE
|
int16_t lookupThrottleRC[THROTTLE_LOOKUP_LENGTH]; // lookup table for expo & mid THROTTLE
|
||||||
|
@ -48,6 +50,7 @@ void generateYawCurve(controlRateConfig_t *controlRateConfig)
|
||||||
void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoConfig_t *escAndServoConfig)
|
void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoConfig_t *escAndServoConfig)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
uint16_t minThrottle = (feature(FEATURE_3D && IS_RC_MODE_ACTIVE(BOX3DDISABLESWITCH)) ? PWM_RANGE_MIN : escAndServoConfig->minthrottle);
|
||||||
|
|
||||||
for (i = 0; i < THROTTLE_LOOKUP_LENGTH; i++) {
|
for (i = 0; i < THROTTLE_LOOKUP_LENGTH; i++) {
|
||||||
int16_t tmp = 10 * i - controlRateConfig->thrMid8;
|
int16_t tmp = 10 * i - controlRateConfig->thrMid8;
|
||||||
|
@ -57,6 +60,6 @@ void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoCo
|
||||||
if (tmp < 0)
|
if (tmp < 0)
|
||||||
y = controlRateConfig->thrMid8;
|
y = controlRateConfig->thrMid8;
|
||||||
lookupThrottleRC[i] = 10 * controlRateConfig->thrMid8 + tmp * (100 - controlRateConfig->thrExpo8 + (int32_t) controlRateConfig->thrExpo8 * (tmp * tmp) / (y * y)) / 10;
|
lookupThrottleRC[i] = 10 * controlRateConfig->thrMid8 + tmp * (100 - controlRateConfig->thrExpo8 + (int32_t) controlRateConfig->thrExpo8 * (tmp * tmp) / (y * y)) / 10;
|
||||||
lookupThrottleRC[i] = escAndServoConfig->minthrottle + (int32_t) (escAndServoConfig->maxthrottle - escAndServoConfig->minthrottle) * lookupThrottleRC[i] / 1000; // [MINTHROTTLE;MAXTHROTTLE]
|
lookupThrottleRC[i] = minThrottle + (int32_t) (escAndServoConfig->maxthrottle - minThrottle) * lookupThrottleRC[i] / 1000; // [MINTHROTTLE;MAXTHROTTLE]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,6 +217,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT + 1] = {
|
||||||
{ BOXFAILSAFE, "FAILSAFE;", 27 },
|
{ BOXFAILSAFE, "FAILSAFE;", 27 },
|
||||||
{ BOXAIRMODE, "AIR MODE;", 28 },
|
{ BOXAIRMODE, "AIR MODE;", 28 },
|
||||||
{ BOXACROPLUS, "ACRO PLUS;", 29 },
|
{ BOXACROPLUS, "ACRO PLUS;", 29 },
|
||||||
|
{ BOX3DDISABLESWITCH, "DISABLE 3D SWITCH;", 30},
|
||||||
{ CHECKBOX_ITEM_COUNT, NULL, 0xFF }
|
{ CHECKBOX_ITEM_COUNT, NULL, 0xFF }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -544,7 +545,7 @@ void mspInit(serialConfig_t *serialConfig)
|
||||||
|
|
||||||
activeBoxIds[activeBoxIdCount++] = BOXAIRMODE;
|
activeBoxIds[activeBoxIdCount++] = BOXAIRMODE;
|
||||||
activeBoxIds[activeBoxIdCount++] = BOXACROPLUS;
|
activeBoxIds[activeBoxIdCount++] = BOXACROPLUS;
|
||||||
|
activeBoxIds[activeBoxIdCount++] = BOX3DDISABLESWITCH;
|
||||||
|
|
||||||
if (sensors(SENSOR_BARO)) {
|
if (sensors(SENSOR_BARO)) {
|
||||||
activeBoxIds[activeBoxIdCount++] = BOXBARO;
|
activeBoxIds[activeBoxIdCount++] = BOXBARO;
|
||||||
|
|
|
@ -270,11 +270,21 @@ void annexCode(void)
|
||||||
rcCommand[axis] = -rcCommand[axis];
|
rcCommand[axis] = -rcCommand[axis];
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = constrain(rcData[THROTTLE], masterConfig.rxConfig.mincheck, PWM_RANGE_MAX);
|
if (feature(FEATURE_3D)) {
|
||||||
tmp = (uint32_t)(tmp - masterConfig.rxConfig.mincheck) * PWM_RANGE_MIN / (PWM_RANGE_MAX - masterConfig.rxConfig.mincheck);
|
tmp = constrain(rcData[THROTTLE], PWM_RANGE_MIN, PWM_RANGE_MAX);
|
||||||
|
tmp = (uint32_t)(tmp - PWM_RANGE_MIN);
|
||||||
|
} else {
|
||||||
|
tmp = constrain(rcData[THROTTLE], masterConfig.rxConfig.mincheck, PWM_RANGE_MAX);
|
||||||
|
tmp = (uint32_t)(tmp - masterConfig.rxConfig.mincheck) * PWM_RANGE_MIN / (PWM_RANGE_MAX - masterConfig.rxConfig.mincheck);
|
||||||
|
}
|
||||||
tmp2 = tmp / 100;
|
tmp2 = tmp / 100;
|
||||||
rcCommand[THROTTLE] = lookupThrottleRC[tmp2] + (tmp - tmp2 * 100) * (lookupThrottleRC[tmp2 + 1] - lookupThrottleRC[tmp2]) / 100; // [0;1000] -> expo -> [MINTHROTTLE;MAXTHROTTLE]
|
rcCommand[THROTTLE] = lookupThrottleRC[tmp2] + (tmp - tmp2 * 100) * (lookupThrottleRC[tmp2 + 1] - lookupThrottleRC[tmp2]) / 100; // [0;1000] -> expo -> [MINTHROTTLE;MAXTHROTTLE]
|
||||||
|
|
||||||
|
if (IS_RC_MODE_ACTIVE(BOX3DDISABLESWITCH) && !failsafeIsActive()) {
|
||||||
|
fix12_t throttleScaler = qConstruct(rcCommand[THROTTLE] - 1000, 1000);
|
||||||
|
rcCommand[THROTTLE] = masterConfig.rxConfig.midrc + qMultiply(throttleScaler, PWM_RANGE_MAX - masterConfig.rxConfig.midrc);
|
||||||
|
}
|
||||||
|
|
||||||
if (FLIGHT_MODE(HEADFREE_MODE)) {
|
if (FLIGHT_MODE(HEADFREE_MODE)) {
|
||||||
float radDiff = degreesToRadians(DECIDEGREES_TO_DEGREES(attitude.values.yaw) - headFreeModeHold);
|
float radDiff = degreesToRadians(DECIDEGREES_TO_DEGREES(attitude.values.yaw) - headFreeModeHold);
|
||||||
float cosDiff = cos_approx(radDiff);
|
float cosDiff = cos_approx(radDiff);
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
#define FC_VERSION_MAJOR 2 // increment when a major release is made (big new feature, etc)
|
#define FC_VERSION_MAJOR 2 // increment when a major release is made (big new feature, etc)
|
||||||
#define FC_VERSION_MINOR 5 // increment when a minor release is made (small new feature, change etc)
|
#define FC_VERSION_MINOR 5 // increment when a minor release is made (small new feature, change etc)
|
||||||
#define FC_VERSION_PATCH_LEVEL 3 // increment when a bug is fixed
|
#define FC_VERSION_PATCH_LEVEL 4 // increment when a bug is fixed
|
||||||
|
|
||||||
#define STR_HELPER(x) #x
|
#define STR_HELPER(x) #x
|
||||||
#define STR(x) STR_HELPER(x)
|
#define STR(x) STR_HELPER(x)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue