1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-25 17:25:18 +03:00

rc curves generation simplified

This commit is contained in:
Pawel Spychalski (DzikuVx) 2016-05-13 21:50:03 +02:00
parent 122c3f5a29
commit 7eb2419ef9
5 changed files with 17 additions and 15 deletions

View file

@ -732,8 +732,7 @@ static bool isEEPROMContentValid(void)
void activateControlRateConfig(void) void activateControlRateConfig(void)
{ {
generatePitchRollCurve(currentControlRateProfile); generateRcCurves(currentControlRateProfile);
generateYawCurve(currentControlRateProfile);
generateThrottleCurve(currentControlRateProfile, &masterConfig.escAndServoConfig); generateThrottleCurve(currentControlRateProfile, &masterConfig.escAndServoConfig);
} }

View file

@ -459,13 +459,13 @@ void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t adjustm
case ADJUSTMENT_RC_RATE: case ADJUSTMENT_RC_RATE:
newValue = constrain((int)controlRateConfig->rcRate8 + delta, 0, 250); // FIXME magic numbers repeated in serial_cli.c newValue = constrain((int)controlRateConfig->rcRate8 + delta, 0, 250); // FIXME magic numbers repeated in serial_cli.c
controlRateConfig->rcRate8 = newValue; controlRateConfig->rcRate8 = newValue;
generatePitchRollCurve(controlRateConfig); generateRcCurves(controlRateConfig);
blackboxLogInflightAdjustmentEvent(ADJUSTMENT_RC_RATE, newValue); blackboxLogInflightAdjustmentEvent(ADJUSTMENT_RC_RATE, newValue);
break; break;
case ADJUSTMENT_RC_EXPO: case ADJUSTMENT_RC_EXPO:
newValue = constrain((int)controlRateConfig->rcExpo8 + delta, 0, 100); // FIXME magic numbers repeated in serial_cli.c newValue = constrain((int)controlRateConfig->rcExpo8 + delta, 0, 100); // FIXME magic numbers repeated in serial_cli.c
controlRateConfig->rcExpo8 = newValue; controlRateConfig->rcExpo8 = newValue;
generatePitchRollCurve(controlRateConfig); generateRcCurves(controlRateConfig);
blackboxLogInflightAdjustmentEvent(ADJUSTMENT_RC_EXPO, newValue); blackboxLogInflightAdjustmentEvent(ADJUSTMENT_RC_EXPO, newValue);
break; break;
case ADJUSTMENT_THROTTLE_EXPO: case ADJUSTMENT_THROTTLE_EXPO:

View file

@ -33,17 +33,21 @@ static int16_t lookupYawRC[YAW_LOOKUP_LENGTH]; // lookup table for
static int16_t lookupThrottleRC[THROTTLE_LOOKUP_LENGTH]; // lookup table for expo & mid THROTTLE static int16_t lookupThrottleRC[THROTTLE_LOOKUP_LENGTH]; // lookup table for expo & mid THROTTLE
int16_t lookupThrottleRCMid; // THROTTLE curve mid point int16_t lookupThrottleRCMid; // THROTTLE curve mid point
void generatePitchRollCurve(controlRateConfig_t *controlRateConfig) int16_t computeRcCurvePoint(uint8_t expo, uint8_t i)
{ {
for (int i = 0; i < PITCH_LOOKUP_LENGTH; i++) { return (2500 + expo * (i * i - 25)) * i / 25;
lookupPitchRollRC[i] = (2500 + controlRateConfig->rcExpo8 * (i * i - 25)) * i * (int32_t) controlRateConfig->rcRate8 / 2500;
}
} }
void generateYawCurve(controlRateConfig_t *controlRateConfig) void generateRcCurves(controlRateConfig_t *controlRateConfig)
{ {
for (int i = 0; i < YAW_LOOKUP_LENGTH; i++) { uint8_t i;
lookupYawRC[i] = (2500 + controlRateConfig->rcYawExpo8 * (i * i - 25)) * i / 25;
for (i = 0; i < PITCH_LOOKUP_LENGTH; i++) {
lookupPitchRollRC[i] = computeRcCurvePoint(controlRateConfig->rcExpo8, i);
}
for (i = 0; i < YAW_LOOKUP_LENGTH; i++) {
lookupYawRC[i] = computeRcCurvePoint(controlRateConfig->rcYawExpo8, i);
} }
} }

View file

@ -17,8 +17,7 @@
#pragma once #pragma once
void generatePitchRollCurve(controlRateConfig_t *controlRateConfig); void generateRcCurves(controlRateConfig_t *controlRateConfig);
void generateYawCurve(controlRateConfig_t *controlRateConfig);
void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoConfig_t *escAndServoConfig); void generateThrottleCurve(controlRateConfig_t *controlRateConfig, escAndServoConfig_t *escAndServoConfig);
int16_t rcLookupPitchRoll(int32_t tmp); int16_t rcLookupPitchRoll(int32_t tmp);

View file

@ -186,7 +186,7 @@ static int callCounts[CALL_COUNT_ITEM_COUNT];
#define CALL_COUNTER(item) (callCounts[item]) #define CALL_COUNTER(item) (callCounts[item])
extern "C" { extern "C" {
void generatePitchRollCurve(controlRateConfig_t *) { void generateRcCurves(controlRateConfig_t *) {
callCounts[COUNTER_GENERATE_PITCH_ROLL_CURVE]++; callCounts[COUNTER_GENERATE_PITCH_ROLL_CURVE]++;
} }
@ -714,4 +714,4 @@ int16_t heading;
uint8_t stateFlags = 0; uint8_t stateFlags = 0;
int16_t rcData[MAX_SUPPORTED_RC_CHANNEL_COUNT]; int16_t rcData[MAX_SUPPORTED_RC_CHANNEL_COUNT];
rxRuntimeConfig_t rxRuntimeConfig; rxRuntimeConfig_t rxRuntimeConfig;
} }