From a4aa4ee6f45c2aab9304c40ecfdea81675c0c35f Mon Sep 17 00:00:00 2001 From: "Pawel Spychalski (DzikuVx)" Date: Wed, 4 Oct 2023 16:17:11 +0200 Subject: [PATCH] Rate dynamics sliders --- _locales/en/messages.json | 18 +++++++++ js/gui.js | 84 +++++++++++++++++++++++++++++++++++++++ js/settings.js | 83 +------------------------------------- main.css | 4 ++ tabs/pid_tuning.html | 65 ++++++++++++++++++++++++++++++ tabs/pid_tuning.js | 18 +++++++++ 6 files changed, 190 insertions(+), 82 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 01b4d2cb..b1f50c1d 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1353,6 +1353,24 @@ "pidTuning_RatesAndExpo": { "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": { "message": "ROLL & PITCH rate" }, diff --git a/js/gui.js b/js/gui.js index 003ebf79..0c506e69 100644 --- a/js/gui.js +++ b/js/gui.js @@ -394,5 +394,89 @@ GUI_control.prototype.renderLogicConditionSelect = function ($container, logicCo $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 = $(''); + 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 var GUI = new GUI_control(); diff --git a/js/settings.js b/js/settings.js index 5d1199d3..a2985235 100644 --- a/js/settings.js +++ b/js/settings.js @@ -85,88 +85,7 @@ var Settings = (function () { input.attr('maxlength', s.setting.max); } else if (input.data('presentation') == 'range') { - let scaledMax; - 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 = $(''); - 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'); + GUI.sliderize(input, s.value, s.setting.min, s.setting.max); } else if (s.setting.type == 'float') { input.attr('type', 'number'); diff --git a/main.css b/main.css index 5cacc0d4..e919e129 100644 --- a/main.css +++ b/main.css @@ -2275,3 +2275,7 @@ ol li { .controlProfileHighlightActive { background-color: #d5ebfe !important ; } + +.no-border { + border: none !important; +} \ No newline at end of file diff --git a/tabs/pid_tuning.html b/tabs/pid_tuning.html index 924afa83..f2aa64fc 100644 --- a/tabs/pid_tuning.html +++ b/tabs/pid_tuning.html @@ -339,6 +339,71 @@ + +
+
+
+ +
+

+
+ +
+ +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+

+
+ +
+ +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+

+
+ +
+ +
+
+
+ +
+ +
+ +
+
+
+ +
+
diff --git a/tabs/pid_tuning.js b/tabs/pid_tuning.js index 742888c9..e87938f4 100644 --- a/tabs/pid_tuning.js +++ b/tabs/pid_tuning.js @@ -93,6 +93,15 @@ TABS.pid_tuning.initialize = function (callback) { RC_tuning.manual_roll_rate = $('#rate-manual-roll').val(); RC_tuning.manual_pitch_rate = $('#rate-manual-pitch').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) { $('.tab-pid_tuning table.pid_tuning').hide(); @@ -233,6 +242,15 @@ TABS.pid_tuning.initialize = function (callback) { 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()) { $('.rpy_ff').prop('disabled', 'disabled'); }