1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-15 12:25:13 +03:00

full PID tuning support

RC related tunings like expos, etc will be available inside Receiver tab
This commit is contained in:
cTn 2013-04-09 17:58:54 +02:00
parent 5119fb2050
commit d450a3f518
5 changed files with 77 additions and 42 deletions

View file

@ -203,18 +203,18 @@ a:hover {
border: 1px dotted silver; border: 1px dotted silver;
} }
table.pid_tuning { .tab-pid_tuning table {
width: 100%; width: 100%;
border-collapse:collapse; border-collapse:collapse;
} }
table.pid_tuning, table.pid_tuning th, table.pid_tuning td { .tab-pid_tuning table, .tab-pid_tuning table th, .tab-pid_tuning table td {
padding: 5px; padding: 5px;
border: 1px solid #8b8b8b; border: 1px solid #8b8b8b;
} }
table.pid_tuning tr:nth-child(odd) { .tab-pid_tuning table tr:nth-child(odd) {
background-color: #ececec; background-color: #ececec;
} }
table.pid_tuning input { .tab-pid_tuning table input {
width: 130px; width: 130px;
height: 18px; height: 18px;
line-height: 18px; line-height: 18px;
@ -223,27 +223,12 @@ table.pid_tuning {
border: 1px solid silver; border: 1px solid silver;
text-align: right; text-align: right;
} }
table.pid_tuning a.update {
display: block;
width: 60px;
height: 18px;
line-height: 18px;
color: white;
text-align: center;
border: 1px solid silver;
background-color: #078814;
}
table.pid_tuning a.update:hover {
text-decoration: none;
background-color: #13b723;
}
.tab-pid_tuning .update { .tab-pid_tuning .update {
display: block; display: block;
float: right; float: right;
margin-top: 20px;
width: 120px; width: 120px;
height: 60px; height: 60px;
line-height: 60px; line-height: 60px;
@ -266,6 +251,11 @@ table.pid_tuning {
cursor: pointer; cursor: pointer;
background-color: #13d81d; background-color: #13d81d;
} }
.tab-pid_tuning .rate-tpa {
float: left;
width: 400px;
margin-top: 20px;
}
.tab-receiver { .tab-receiver {
} }
.tab-receiver .bars ul { .tab-receiver .bars ul {

View file

@ -26,6 +26,9 @@ $(document).ready(function() {
} }
} }
}); });
// temporary
//$('#content').load("./tabs/pid_tuning.html", tab_initialize_pid_tuning);
}); });
function disable_timers() { function disable_timers() {

View file

@ -65,6 +65,16 @@ var RC = {
AUX4: 0 AUX4: 0
}; };
var RC_tuning = {
RC_RATE: 0,
RC_EXPO: 0,
roll_pitch_rate: 0,
yaw_rate: 0,
dynamic_THR_PID: 0,
throttle_MID: 0,
throttle_EXPO: 0,
};
var SENSOR_DATA = { var SENSOR_DATA = {
gyroscope: [0, 0, 0], gyroscope: [0, 0, 0],
accelerometer: [0, 0, 0], accelerometer: [0, 0, 0],
@ -154,6 +164,7 @@ function onOpen(openInfo) {
send_message(MSP_codes.MSP_IDENT, MSP_codes.MSP_IDENT); send_message(MSP_codes.MSP_IDENT, MSP_codes.MSP_IDENT);
send_message(MSP_codes.MSP_STATUS, MSP_codes.MSP_STATUS); send_message(MSP_codes.MSP_STATUS, MSP_codes.MSP_STATUS);
send_message(MSP_codes.MSP_PID, MSP_codes.MSP_PID); send_message(MSP_codes.MSP_PID, MSP_codes.MSP_PID);
send_message(MSP_codes.MSP_RC_TUNING, MSP_codes.MSP_RC_TUNING);
}, connection_delay * 1000); }, connection_delay * 1000);
} }
@ -260,9 +271,9 @@ function onCharRead(readInfo) {
} }
} }
function send_message(code, data, bytes_n) { function send_message(code, data) {
if (typeof data === 'object') { if (typeof data === 'object') {
var size = 6 + bytes_n; var size = 6 + data.length; // 6 bytes for protocol overhead
var checksum = 0; var checksum = 0;
var bufferOut = new ArrayBuffer(size); var bufferOut = new ArrayBuffer(size);
@ -275,10 +286,11 @@ function send_message(code, data, bytes_n) {
bufView[4] = code; // code bufView[4] = code; // code
checksum = bufView[3] ^ bufView[4]; checksum = bufView[3] ^ bufView[4];
for (var i = 5; i < data.length; i++) {
bufView[i] = data[i - 5];
checksum ^= bufView[i]; for (var i = 0; i < data.length; i++) {
bufView[i + 5] = data[i];
checksum ^= bufView[i + 5];
} }
bufView[5 + data.length] = checksum; bufView[5 + data.length] = checksum;
@ -289,7 +301,7 @@ function send_message(code, data, bytes_n) {
bufView[0] = 36; // $ bufView[0] = 36; // $
bufView[1] = 77; // M bufView[1] = 77; // M
bufView[2] = 60; // < bufView[2] = 60; // <
bufView[3] = bytes_n; // data length bufView[3] = 0; // data length
bufView[4] = code; // code bufView[4] = code; // code
bufView[5] = data; // data bufView[5] = data; // data
bufView[6] = bufView[3] ^ bufView[4] ^ bufView[5]; // checksum bufView[6] = bufView[3] ^ bufView[4] ^ bufView[5]; // checksum
@ -366,7 +378,13 @@ function process_message(code, data) {
console.log(data); console.log(data);
break; break;
case MSP_codes.MSP_RC_TUNING: case MSP_codes.MSP_RC_TUNING:
console.log(data); RC_tuning.RC_RATE = parseFloat((view.getUint8(0) / 100).toFixed(2));
RC_tuning.RC_EXPO = parseFloat((view.getUint8(1) / 100).toFixed(2));
RC_tuning.roll_pitch_rate = parseFloat((view.getUint8(2) / 100).toFixed(2));
RC_tuning.yaw_rate = parseFloat((view.getUint8(3) / 100).toFixed(2));
RC_tuning.dynamic_THR_PID = parseFloat((view.getUint8(4) / 100).toFixed(2));
RC_tuning.throttle_MID = parseFloat((view.getUint8(5) / 100).toFixed(2));
RC_tuning.throttle_EXPO = parseFloat((view.getUint8(6) / 100).toFixed(2));
break; break;
case MSP_codes.MSP_PID: case MSP_codes.MSP_PID:
// PID data arrived, we need to scale it and save to appropriate bank / array // PID data arrived, we need to scale it and save to appropriate bank / array
@ -428,7 +446,7 @@ function process_message(code, data) {
console.log(data); console.log(data);
break; break;
case MSP_codes.MSP_SET_RC_TUNING: case MSP_codes.MSP_SET_RC_TUNING:
console.log(data); console.log('RC Tuning saved');
break; break;
case MSP_codes.MSP_ACC_CALIBRATION: case MSP_codes.MSP_ACC_CALIBRATION:
console.log('Accel calibration executed'); console.log('Accel calibration executed');

View file

@ -12,7 +12,6 @@
<td><input type="text" name="i" value="" /></td> <td><input type="text" name="i" value="" /></td>
<td><input type="text" name="d" value="" /></td> <td><input type="text" name="d" value="" /></td>
</tr> </tr>
<tr class="PITCH"> <tr class="PITCH">
<td>PITCH</td> <td>PITCH</td>
<td><input type="text" name="p" value="" /></td> <td><input type="text" name="p" value="" /></td>
@ -59,5 +58,17 @@
<td><input type="text" name="p" value="" /></td> <td><input type="text" name="p" value="" /></td>
</tr> </tr>
</table> </table>
<table class="rate-tpa">
<tr>
<th>ROLL rate &amp; PITCH rate</th>
<th>YAW rate</th>
<th>TPA</th>
</tr>
<tr>
<td><input type="text" name="roll-pitch" value="" /></td>
<td><input type="text" name="yaw" value="" /></td>
<td><input type="text" name="tpa" value="" /></td>
</tr>
</table>
<a class="update" href="#">Update</a> <a class="update" href="#">Update</a>
</div> </div>

View file

@ -56,9 +56,13 @@ function tab_initialize_pid_tuning() {
}); });
needle++; needle++;
// UI Hooks // Fill in data from RC_tuning object
$('.rate-tpa input[name="roll-pitch"]').val(RC_tuning.roll_pitch_rate.toFixed(2));
$('.rate-tpa input[name="yaw"]').val(RC_tuning.yaw_rate.toFixed(2));
$('.rate-tpa input[name="tpa"]').val(RC_tuning.dynamic_THR_PID.toFixed(2));
$('.pid_tuning input').change(function() { // UI Hooks
$('.pid_tuning input, .rate-tpa input').change(function() {
// if any of the fields changed, unlock update button // if any of the fields changed, unlock update button
$('a.update').addClass('active'); $('a.update').addClass('active');
}); });
@ -120,18 +124,27 @@ function tab_initialize_pid_tuning() {
break; break;
} }
PID_buffer_needle += 3; PID_buffer_needle += 3;
/*
for (var ii = 0; ii < PIDs[i].length; ii++) {
PID_buffer_out[PID_buffer_needle] = PIDs[i][ii];
PID_buffer_needle++;
}
*/
} }
//console.log(PID_buffer_out); // Send over the PID changes
// Send over the changes send_message(MSP_codes.MSP_SET_PID, PID_buffer_out);
send_message(MSP_codes.MSP_SET_PID, PID_buffer_out, PID_buffer_out.length);
// catch RC_tuning changes
RC_tuning.roll_pitch_rate = parseFloat($('.rate-tpa input[name="roll-pitch"]').val());
RC_tuning.yaw_rate = parseFloat($('.rate-tpa input[name="yaw"]').val());
RC_tuning.dynamic_THR_PID = parseFloat($('.rate-tpa input[name="tpa"]').val());
var RC_tuning_buffer_out = new Array();
RC_tuning_buffer_out[0] = parseInt(RC_tuning.RC_RATE * 100);
RC_tuning_buffer_out[1] = parseInt(RC_tuning.RC_EXPO * 100);
RC_tuning_buffer_out[2] = parseInt(RC_tuning.roll_pitch_rate * 100);
RC_tuning_buffer_out[3] = parseInt(RC_tuning.yaw_rate * 100);
RC_tuning_buffer_out[4] = parseInt(RC_tuning.dynamic_THR_PID * 100);
RC_tuning_buffer_out[5] = parseInt(RC_tuning.throttle_MID * 100);
RC_tuning_buffer_out[6] = parseInt(RC_tuning.throttle_EXPO * 100);
// Send over the RC_tuning changes
send_message(MSP_codes.MSP_SET_RC_TUNING, RC_tuning_buffer_out);
// remove the active status // remove the active status
$(this).removeClass('active'); $(this).removeClass('active');