mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-14 11:59:51 +03:00
Rate dynamics sliders
This commit is contained in:
parent
6b27637214
commit
a4aa4ee6f4
6 changed files with 190 additions and 82 deletions
|
@ -1353,6 +1353,24 @@
|
||||||
"pidTuning_RatesAndExpo": {
|
"pidTuning_RatesAndExpo": {
|
||||||
"message": "Rates & Expo"
|
"message": "Rates & Expo"
|
||||||
},
|
},
|
||||||
|
"pidTuning_RateDynamics": {
|
||||||
|
"message": "Rate Dynamics"
|
||||||
|
},
|
||||||
|
"pidTuning_RateDynamics_Sensitivity": {
|
||||||
|
"message": "Sensitivity"
|
||||||
|
},
|
||||||
|
"pidTuning_RateDynamics_Correction": {
|
||||||
|
"message": "Correction"
|
||||||
|
},
|
||||||
|
"pidTuning_RateDynamics_Weight": {
|
||||||
|
"message": "Weight"
|
||||||
|
},
|
||||||
|
"pidTuning_RateDynamics_Center": {
|
||||||
|
"message": "Center"
|
||||||
|
},
|
||||||
|
"pidTuning_RateDynamics_End": {
|
||||||
|
"message": "End"
|
||||||
|
},
|
||||||
"pidTuning_RollPitchRate": {
|
"pidTuning_RollPitchRate": {
|
||||||
"message": "ROLL & PITCH rate"
|
"message": "ROLL & PITCH rate"
|
||||||
},
|
},
|
||||||
|
|
84
js/gui.js
84
js/gui.js
|
@ -394,5 +394,89 @@ GUI_control.prototype.renderLogicConditionSelect = function ($container, logicCo
|
||||||
$select.val(current).change(onChange);
|
$select.val(current).change(onChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GUI_control.prototype.sliderize = function ($input, value, min, max) {
|
||||||
|
let scaledMax;
|
||||||
|
let scaledMin;
|
||||||
|
let scalingThreshold;
|
||||||
|
|
||||||
|
if ($input.data('normal-max')) {
|
||||||
|
scaledMax = max * 2;
|
||||||
|
scalingThreshold = Math.round(scaledMax * 0.8);
|
||||||
|
scaledMin = min *2;
|
||||||
|
} else {
|
||||||
|
scaledMax = max;
|
||||||
|
scaledMin = min;
|
||||||
|
scalingThreshold = scaledMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
let $range = $('<input type="range" min="' + scaledMin + '" max="' + scaledMax + '" value="' + value + '"/>');
|
||||||
|
if ($input.data('step')) {
|
||||||
|
$range.attr('step', $input.data('step'));
|
||||||
|
}
|
||||||
|
$range.css({
|
||||||
|
'display': 'block',
|
||||||
|
'flex-grow': 100,
|
||||||
|
'margin-left': '1em',
|
||||||
|
'margin-right': '1em',
|
||||||
|
});
|
||||||
|
|
||||||
|
$input.attr('min', min);
|
||||||
|
$input.attr('max', max);
|
||||||
|
$input.val(parseInt(value));
|
||||||
|
$input.css({
|
||||||
|
'width': 'auto',
|
||||||
|
'min-width': '75px',
|
||||||
|
});
|
||||||
|
|
||||||
|
$input.parent().css({
|
||||||
|
'display': 'flex',
|
||||||
|
'width': '100%'
|
||||||
|
});
|
||||||
|
$range.insertAfter($input);
|
||||||
|
|
||||||
|
$input.parent().find('.helpicon').css({
|
||||||
|
'top': '5px',
|
||||||
|
'left': '-10px'
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update slider to input
|
||||||
|
*/
|
||||||
|
$range.on('input', function() {
|
||||||
|
let val = $(this).val();
|
||||||
|
let normalMax = parseInt($input.data('normal-max'));
|
||||||
|
|
||||||
|
if (normalMax) {
|
||||||
|
if (val <= scalingThreshold) {
|
||||||
|
val = scaleRangeInt(val, scaledMin, scalingThreshold, min, normalMax);
|
||||||
|
} else {
|
||||||
|
val = scaleRangeInt(val, scalingThreshold + 1, scaledMax, normalMax + 1, max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$input.val(val);
|
||||||
|
});
|
||||||
|
|
||||||
|
$input.on('change', function() {
|
||||||
|
|
||||||
|
let val = $(this).val();
|
||||||
|
let newVal;
|
||||||
|
let normalMax = parseInt($input.data('normal-max'));
|
||||||
|
if (normalMax) {
|
||||||
|
if (val <= normalMax) {
|
||||||
|
newVal = scaleRangeInt(val, min, normalMax, scaledMin, scalingThreshold);
|
||||||
|
} else {
|
||||||
|
newVal = scaleRangeInt(val, normalMax + 1, max, scalingThreshold + 1, scaledMax);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newVal = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
$range.val(newVal);
|
||||||
|
});
|
||||||
|
|
||||||
|
$input.trigger('change');
|
||||||
|
};
|
||||||
|
|
||||||
// initialize object into GUI variable
|
// initialize object into GUI variable
|
||||||
var GUI = new GUI_control();
|
var GUI = new GUI_control();
|
||||||
|
|
|
@ -85,88 +85,7 @@ var Settings = (function () {
|
||||||
input.attr('maxlength', s.setting.max);
|
input.attr('maxlength', s.setting.max);
|
||||||
} else if (input.data('presentation') == 'range') {
|
} else if (input.data('presentation') == 'range') {
|
||||||
|
|
||||||
let scaledMax;
|
GUI.sliderize(input, s.value, s.setting.min, s.setting.max);
|
||||||
let scaledMin;
|
|
||||||
let scalingThreshold;
|
|
||||||
|
|
||||||
if (input.data('normal-max')) {
|
|
||||||
scaledMax = s.setting.max * 2;
|
|
||||||
scalingThreshold = Math.round(scaledMax * 0.8);
|
|
||||||
scaledMin = s.setting.min *2;
|
|
||||||
} else {
|
|
||||||
scaledMax = s.setting.max;
|
|
||||||
scaledMin = s.setting.min;
|
|
||||||
scalingThreshold = scaledMax;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
let $range = $('<input type="range" min="' + scaledMin + '" max="' + scaledMax + '" value="' + s.value + '"/>');
|
|
||||||
if (input.data('step')) {
|
|
||||||
$range.attr('step', input.data('step'));
|
|
||||||
}
|
|
||||||
$range.css({
|
|
||||||
'display': 'block',
|
|
||||||
'flex-grow': 100,
|
|
||||||
'margin-left': '1em',
|
|
||||||
'margin-right': '1em',
|
|
||||||
});
|
|
||||||
|
|
||||||
input.attr('min', s.setting.min);
|
|
||||||
input.attr('max', s.setting.max);
|
|
||||||
input.val(parseInt(s.value));
|
|
||||||
input.css({
|
|
||||||
'width': 'auto',
|
|
||||||
'min-width': '75px',
|
|
||||||
});
|
|
||||||
|
|
||||||
input.parent().css({
|
|
||||||
'display': 'flex',
|
|
||||||
'width': '100%'
|
|
||||||
});
|
|
||||||
$range.insertAfter(input);
|
|
||||||
|
|
||||||
input.parent().find('.helpicon').css({
|
|
||||||
'top': '5px',
|
|
||||||
'left': '-10px'
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Update slider to input
|
|
||||||
*/
|
|
||||||
$range.on('input', function() {
|
|
||||||
let val = $(this).val();
|
|
||||||
let normalMax = parseInt(input.data('normal-max'));
|
|
||||||
|
|
||||||
if (normalMax) {
|
|
||||||
if (val <= scalingThreshold) {
|
|
||||||
val = scaleRangeInt(val, scaledMin, scalingThreshold, s.setting.min, normalMax);
|
|
||||||
} else {
|
|
||||||
val = scaleRangeInt(val, scalingThreshold + 1, scaledMax, normalMax + 1, s.setting.max);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
input.val(val);
|
|
||||||
});
|
|
||||||
|
|
||||||
input.on('change', function() {
|
|
||||||
|
|
||||||
let val = $(this).val();
|
|
||||||
let newVal;
|
|
||||||
let normalMax = parseInt(input.data('normal-max'));
|
|
||||||
if (normalMax) {
|
|
||||||
if (val <= normalMax) {
|
|
||||||
newVal = scaleRangeInt(val, s.setting.min, normalMax, scaledMin, scalingThreshold);
|
|
||||||
} else {
|
|
||||||
newVal = scaleRangeInt(val, normalMax + 1, s.setting.max, scalingThreshold + 1, scaledMax);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
newVal = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
$range.val(newVal);
|
|
||||||
});
|
|
||||||
|
|
||||||
input.trigger('change');
|
|
||||||
|
|
||||||
} else if (s.setting.type == 'float') {
|
} else if (s.setting.type == 'float') {
|
||||||
input.attr('type', 'number');
|
input.attr('type', 'number');
|
||||||
|
|
4
main.css
4
main.css
|
@ -2275,3 +2275,7 @@ ol li {
|
||||||
.controlProfileHighlightActive {
|
.controlProfileHighlightActive {
|
||||||
background-color: #d5ebfe !important ;
|
background-color: #d5ebfe !important ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.no-border {
|
||||||
|
border: none !important;
|
||||||
|
}
|
|
@ -339,6 +339,71 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="clear-both"></div>
|
||||||
|
<div class="tab_subtitle" style="margin-top: 1em;" data-i18n="pidTuning_RateDynamics"></div>
|
||||||
|
<div class="clear-both"></div>
|
||||||
|
|
||||||
|
<div class="pid-sliders-axis" data-axis="roll">
|
||||||
|
<h3 data-i18n="pidTuning_RateDynamics_Sensitivity"></h3>
|
||||||
|
<div class="pid-slider-row">
|
||||||
|
<span data-i18n="pidTuning_RateDynamics_Center"></span>
|
||||||
|
<div class="number no-border">
|
||||||
|
<input id="rate_dynamics_center_sensitivity" type="number"/>
|
||||||
|
</div>
|
||||||
|
<div class="clear-both"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pid-slider-row">
|
||||||
|
<span data-i18n="pidTuning_RateDynamics_End"></span>
|
||||||
|
<div class="number no-border">
|
||||||
|
<input id="rate_dynamics_end_sensitivity" type="number"/>
|
||||||
|
</div>
|
||||||
|
<div class="clear-both"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pid-sliders-axis" data-axis="pitch">
|
||||||
|
<h3 data-i18n="pidTuning_RateDynamics_Correction"></h3>
|
||||||
|
<div class="pid-slider-row">
|
||||||
|
<span data-i18n="pidTuning_RateDynamics_Center"></span>
|
||||||
|
<div class="number no-border">
|
||||||
|
<input id="rate_dynamics_center_correction" type="number"/>
|
||||||
|
</div>
|
||||||
|
<div class="clear-both"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pid-slider-row">
|
||||||
|
<span data-i18n="pidTuning_RateDynamics_End"></span>
|
||||||
|
<div class="number no-border">
|
||||||
|
<input id="rate_dynamics_end_correction" type="number"/>
|
||||||
|
</div>
|
||||||
|
<div class="clear-both"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pid-sliders-axis" data-axis="yaw">
|
||||||
|
<h3 data-i18n="pidTuning_RateDynamics_Weight"></h3>
|
||||||
|
<div class="pid-slider-row">
|
||||||
|
<span data-i18n="pidTuning_RateDynamics_Center"></span>
|
||||||
|
<div class="number no-border">
|
||||||
|
<input id="rate_dynamics_center_weight" type="number"/>
|
||||||
|
</div>
|
||||||
|
<div class="clear-both"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pid-slider-row">
|
||||||
|
<span data-i18n="pidTuning_RateDynamics_End"></span>
|
||||||
|
<div class="number no-border">
|
||||||
|
<input id="rate_dynamics_end_weight" type="number"/>
|
||||||
|
</div>
|
||||||
|
<div class="clear-both"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="subtab-filters" class="subtab__content">
|
<div id="subtab-filters" class="subtab__content">
|
||||||
|
|
|
@ -93,6 +93,15 @@ TABS.pid_tuning.initialize = function (callback) {
|
||||||
RC_tuning.manual_roll_rate = $('#rate-manual-roll').val();
|
RC_tuning.manual_roll_rate = $('#rate-manual-roll').val();
|
||||||
RC_tuning.manual_pitch_rate = $('#rate-manual-pitch').val();
|
RC_tuning.manual_pitch_rate = $('#rate-manual-pitch').val();
|
||||||
RC_tuning.manual_yaw_rate = $('#rate-manual-yaw').val();
|
RC_tuning.manual_yaw_rate = $('#rate-manual-yaw').val();
|
||||||
|
|
||||||
|
// Rate Dynamics
|
||||||
|
RATE_DYNAMICS.sensitivityCenter = parseInt($('#rate_dynamics_center_sensitivity').val());
|
||||||
|
RATE_DYNAMICS.sensitivityEnd = parseInt($('#rate_dynamics_end_sensitivity').val());
|
||||||
|
RATE_DYNAMICS.correctionCenter = parseInt($('#rate_dynamics_center_correction').val());
|
||||||
|
RATE_DYNAMICS.correctionEnd = parseInt($('#rate_dynamics_end_correction').val());
|
||||||
|
RATE_DYNAMICS.weightCenter = parseInt($('#rate_dynamics_center_weight').val());
|
||||||
|
RATE_DYNAMICS.weightEnd = parseInt($('#rate_dynamics_end_weight').val());
|
||||||
|
|
||||||
}
|
}
|
||||||
function hideUnusedPids(sensors_detected) {
|
function hideUnusedPids(sensors_detected) {
|
||||||
$('.tab-pid_tuning table.pid_tuning').hide();
|
$('.tab-pid_tuning table.pid_tuning').hide();
|
||||||
|
@ -233,6 +242,15 @@ TABS.pid_tuning.initialize = function (callback) {
|
||||||
axis++;
|
axis++;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
GUI.sliderize($('#rate_dynamics_center_sensitivity'), RATE_DYNAMICS.sensitivityCenter, 25, 175);
|
||||||
|
GUI.sliderize($('#rate_dynamics_end_sensitivity'), RATE_DYNAMICS.sensitivityEnd, 25, 175);
|
||||||
|
|
||||||
|
GUI.sliderize($('#rate_dynamics_center_correction'), RATE_DYNAMICS.correctionCenter, 10, 95);
|
||||||
|
GUI.sliderize($('#rate_dynamics_end_correction'), RATE_DYNAMICS.correctionEnd, 10, 95);
|
||||||
|
|
||||||
|
GUI.sliderize($('#rate_dynamics_center_weight'), RATE_DYNAMICS.weightCenter, 0, 95);
|
||||||
|
GUI.sliderize($('#rate_dynamics_end_weight'), RATE_DYNAMICS.weightEnd, 0, 95);
|
||||||
|
|
||||||
if (!FC.isRpyFfComponentUsed()) {
|
if (!FC.isRpyFfComponentUsed()) {
|
||||||
$('.rpy_ff').prop('disabled', 'disabled');
|
$('.rpy_ff').prop('disabled', 'disabled');
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue