Commit 79c6eefe authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #4766 from nanthony21/expoSlider

Exponential Slider
parents f21eb645 1cdfd636
...@@ -55,7 +55,7 @@ Joystick::Joystick(const QString& name, int axisCount, int buttonCount, int hatC ...@@ -55,7 +55,7 @@ Joystick::Joystick(const QString& name, int axisCount, int buttonCount, int hatC
, _rgButtonValues(NULL) , _rgButtonValues(NULL)
, _lastButtonBits(0) , _lastButtonBits(0)
, _throttleMode(ThrottleModeCenterZero) , _throttleMode(ThrottleModeCenterZero)
, _exponential(false) , _exponential(0)
, _accumulator(false) , _accumulator(false)
, _deadband(false) , _deadband(false)
, _activeVehicle(NULL) , _activeVehicle(NULL)
...@@ -109,7 +109,7 @@ void Joystick::_setDefaultCalibration(void) { ...@@ -109,7 +109,7 @@ void Joystick::_setDefaultCalibration(void) {
_rgFunctionAxis[yawFunction] = 0; _rgFunctionAxis[yawFunction] = 0;
_rgFunctionAxis[throttleFunction] = 1; _rgFunctionAxis[throttleFunction] = 1;
_exponential = false; _exponential = 0;
_accumulator = false; _accumulator = false;
_deadband = false; _deadband = false;
_throttleMode = ThrottleModeCenterZero; _throttleMode = ThrottleModeCenterZero;
...@@ -162,7 +162,7 @@ void Joystick::_loadSettings(void) ...@@ -162,7 +162,7 @@ void Joystick::_loadSettings(void)
qCDebug(JoystickLog) << "_loadSettings " << _name; qCDebug(JoystickLog) << "_loadSettings " << _name;
_calibrated = settings.value(_calibratedSettingsKey, false).toBool(); _calibrated = settings.value(_calibratedSettingsKey, false).toBool();
_exponential = settings.value(_exponentialSettingsKey, false).toBool(); _exponential = settings.value(_exponentialSettingsKey, 0).toFloat();
_accumulator = settings.value(_accumulatorSettingsKey, false).toBool(); _accumulator = settings.value(_accumulatorSettingsKey, false).toBool();
_deadband = settings.value(_deadbandSettingsKey, false).toBool(); _deadband = settings.value(_deadbandSettingsKey, false).toBool();
...@@ -443,16 +443,14 @@ void Joystick::run(void) ...@@ -443,16 +443,14 @@ void Joystick::run(void)
yaw = std::max(-1.0f, std::min(tanf(asinf(yaw_limited)), 1.0f)); yaw = std::max(-1.0f, std::min(tanf(asinf(yaw_limited)), 1.0f));
throttle = std::max(-1.0f, std::min(tanf(asinf(throttle_limited)), 1.0f)); throttle = std::max(-1.0f, std::min(tanf(asinf(throttle_limited)), 1.0f));
if ( _exponential ) { if ( _exponential != 0 ) {
// Exponential (0% to -50% range like most RC radios) // Exponential (0% to -50% range like most RC radios)
// 0 for no exponential //_exponential is set by a slider in joystickConfig.qml
// -0.5 for strong exponential
float expo = -0.35f;
// Calculate new RPY with exponential applied // Calculate new RPY with exponential applied
roll = -expo*powf(roll,3) + (1+expo)*roll; roll = -_exponential*powf(roll,3) + (1+_exponential)*roll;
pitch = -expo*powf(pitch,3) + (1+expo)*pitch; pitch = -_exponential*powf(pitch,3) + (1+_exponential)*pitch;
yaw = -expo*powf(yaw,3) + (1+expo)*yaw; yaw = -_exponential*powf(yaw,3) + (1+_exponential)*yaw;
} }
// Adjust throttle to 0:1 range // Adjust throttle to 0:1 range
...@@ -682,12 +680,12 @@ void Joystick::setThrottleMode(int mode) ...@@ -682,12 +680,12 @@ void Joystick::setThrottleMode(int mode)
emit throttleModeChanged(_throttleMode); emit throttleModeChanged(_throttleMode);
} }
bool Joystick::exponential(void) float Joystick::exponential(void)
{ {
return _exponential; return _exponential;
} }
void Joystick::setExponential(bool expo) void Joystick::setExponential(float expo)
{ {
_exponential = expo; _exponential = expo;
......
...@@ -72,7 +72,7 @@ public: ...@@ -72,7 +72,7 @@ public:
Q_INVOKABLE QString getButtonAction(int button); Q_INVOKABLE QString getButtonAction(int button);
Q_PROPERTY(int throttleMode READ throttleMode WRITE setThrottleMode NOTIFY throttleModeChanged) Q_PROPERTY(int throttleMode READ throttleMode WRITE setThrottleMode NOTIFY throttleModeChanged)
Q_PROPERTY(bool exponential READ exponential WRITE setExponential NOTIFY exponentialChanged) Q_PROPERTY(float exponential READ exponential WRITE setExponential NOTIFY exponentialChanged)
Q_PROPERTY(bool accumulator READ accumulator WRITE setAccumulator NOTIFY accumulatorChanged) Q_PROPERTY(bool accumulator READ accumulator WRITE setAccumulator NOTIFY accumulatorChanged)
Q_PROPERTY(bool requiresCalibration READ requiresCalibration CONSTANT) Q_PROPERTY(bool requiresCalibration READ requiresCalibration CONSTANT)
...@@ -106,8 +106,8 @@ public: ...@@ -106,8 +106,8 @@ public:
int throttleMode(void); int throttleMode(void);
void setThrottleMode(int mode); void setThrottleMode(int mode);
bool exponential(void); float exponential(void);
void setExponential(bool expo); void setExponential(float expo);
bool accumulator(void); bool accumulator(void);
void setAccumulator(bool accu); void setAccumulator(bool accu);
...@@ -141,7 +141,7 @@ signals: ...@@ -141,7 +141,7 @@ signals:
void throttleModeChanged(int mode); void throttleModeChanged(int mode);
void exponentialChanged(bool exponential); void exponentialChanged(float exponential);
void accumulatorChanged(bool accumulator); void accumulatorChanged(bool accumulator);
...@@ -206,7 +206,7 @@ protected: ...@@ -206,7 +206,7 @@ protected:
ThrottleMode_t _throttleMode; ThrottleMode_t _throttleMode;
bool _exponential; float _exponential;
bool _accumulator; bool _accumulator;
bool _deadband; bool _deadband;
......
...@@ -13,6 +13,7 @@ import QtQuick.Controls.Styles 1.4 ...@@ -13,6 +13,7 @@ import QtQuick.Controls.Styles 1.4
import QGroundControl.Palette 1.0 import QGroundControl.Palette 1.0
import QGroundControl.ScreenTools 1.0 import QGroundControl.ScreenTools 1.0
import QtQuick.Controls.Private 1.0
Slider { Slider {
property var _qgcPal: QGCPalette { colorGroupEnabled: enabled } property var _qgcPal: QGCPalette { colorGroupEnabled: enabled }
......
...@@ -456,12 +456,25 @@ SetupPage { ...@@ -456,12 +456,25 @@ SetupPage {
Column { Column {
spacing: ScreenTools.defaultFontPixelHeight / 3 spacing: ScreenTools.defaultFontPixelHeight / 3
QGCCheckBox { QGCLabel {
id: exponential id: expoSliderLabel
checked: _activeJoystick ? _activeJoystick.exponential : false text: qsTr("Exponential:")
text: qsTr("Use exponential curve on roll, pitch, yaw") }
Row {
QGCSlider {
id: expoSlider
minimumValue: 0
maximumValue: 0.75
onClicked: _activeJoystick.exponential = checked Component.onCompleted: value=-_activeJoystick.exponential
onValueChanged: _activeJoystick.exponential=-value
}
QGCLabel {
id: expoSliderIndicator
text: expoSlider.value.toFixed(2)
}
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment