2013-04-08 19:10:47 +00:00
|
|
|
function tab_initialize_pid_tuning() {
|
2013-08-26 13:16:49 +00:00
|
|
|
ga_tracker.sendAppView('PID Tuning');
|
2014-01-24 16:06:54 +00:00
|
|
|
|
|
|
|
$('#content').load("./tabs/pid_tuning.html", function() {
|
|
|
|
GUI.active_tab = 'pid_tuning';
|
2014-01-23 22:47:14 +00:00
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
send_message(MSP_codes.MSP_PID, MSP_codes.MSP_PID, false, function() {
|
|
|
|
send_message(MSP_codes.MSP_RC_TUNING, MSP_codes.MSP_RC_TUNING, false, function() {
|
|
|
|
// Fill in the data from PIDs array
|
|
|
|
var i = 0;
|
|
|
|
$('.pid_tuning .ROLL input').each(function() {
|
|
|
|
switch (i) {
|
|
|
|
case 0:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[0][i++].toFixed(1));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[0][i++].toFixed(3));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[0][i++].toFixed(0));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('.pid_tuning .PITCH input').each(function() {
|
|
|
|
switch (i) {
|
|
|
|
case 0:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[1][i++].toFixed(1));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[1][i++].toFixed(3));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[1][i++].toFixed(0));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('.pid_tuning .YAW input').each(function() {
|
|
|
|
switch (i) {
|
|
|
|
case 0:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[2][i++].toFixed(1));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[2][i++].toFixed(3));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[2][i++].toFixed(0));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|
2013-04-08 23:09:11 +00:00
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
i = 0;
|
|
|
|
$('.pid_tuning .ALT input').each(function() {
|
|
|
|
switch (i) {
|
|
|
|
case 0:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[3][i++].toFixed(1));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[3][i++].toFixed(3));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[3][i++].toFixed(0));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|
2013-04-08 23:09:11 +00:00
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
i = 0;
|
|
|
|
$('.pid_tuning .Pos input').each(function() {
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[4][i++].toFixed(2));
|
2014-01-24 16:06:54 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('.pid_tuning .PosR input').each(function() {
|
|
|
|
switch (i) {
|
|
|
|
case 0:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[5][i++].toFixed(1));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[5][i++].toFixed(2));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[5][i++].toFixed(3));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
}
|
2014-02-02 14:31:09 +00:00
|
|
|
});
|
2013-04-08 23:09:11 +00:00
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
i = 0;
|
|
|
|
$('.pid_tuning .NavR input').each(function() {
|
|
|
|
switch (i) {
|
|
|
|
case 0:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[6][i++].toFixed(1));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[6][i++].toFixed(2));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[6][i++].toFixed(3));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
}
|
2014-02-02 14:31:09 +00:00
|
|
|
});
|
2013-04-08 23:09:11 +00:00
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
i = 0;
|
|
|
|
$('.pid_tuning .LEVEL input').each(function() {
|
|
|
|
switch (i) {
|
|
|
|
case 0:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[7][i++].toFixed(1));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[7][i++].toFixed(2));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[7][i++].toFixed(0));
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
}
|
2014-02-02 14:31:09 +00:00
|
|
|
});
|
2013-04-08 23:09:11 +00:00
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
i = 0;
|
|
|
|
$('.pid_tuning .MAG input').each(function() {
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[8][i++].toFixed(1));
|
|
|
|
});
|
2013-04-08 23:49:49 +00:00
|
|
|
|
2014-01-25 20:15:40 +00:00
|
|
|
i = 0;
|
2014-02-02 00:35:57 +00:00
|
|
|
$('.pid_tuning .Vario input').each(function() {
|
2014-01-25 20:15:40 +00:00
|
|
|
switch (i) {
|
|
|
|
case 0:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[9][i++].toFixed(1));
|
2014-01-25 20:15:40 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[9][i++].toFixed(3));
|
2014-01-25 20:15:40 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2014-02-02 14:31:09 +00:00
|
|
|
$(this).val(PIDs[9][i++].toFixed(0));
|
2014-01-25 20:15:40 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
// 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));
|
|
|
|
|
2014-02-14 14:41:36 +00:00
|
|
|
// Fill in currently selected profile
|
|
|
|
$('input[name="profile"]').val(CONFIG.profile + 1); // +1 because the range is 0-2
|
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
// UI Hooks
|
2014-02-14 14:41:36 +00:00
|
|
|
$('input[name="profile"]').change(function() {
|
|
|
|
var profile = parseInt($(this).val());
|
|
|
|
send_message(MSP_codes.MSP_SELECT_SETTING, [profile - 1], false, function() {
|
|
|
|
GUI.log('Loaded Profile: <strong>' + profile + '</strong>');
|
|
|
|
|
|
|
|
GUI.tab_switch_cleanup(function() {
|
|
|
|
tab_initialize_pid_tuning();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
$('a.refresh').click(function() {
|
2014-02-04 17:56:20 +00:00
|
|
|
GUI.tab_switch_cleanup(function() {
|
|
|
|
GUI.log('PID data <strong>refreshed</strong>');
|
|
|
|
|
|
|
|
tab_initialize_pid_tuning();
|
|
|
|
});
|
2014-01-24 16:06:54 +00:00
|
|
|
});
|
2014-01-03 09:13:55 +00:00
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
$('a.update').click(function() {
|
|
|
|
// Catch all the changes and stuff the inside PIDs array
|
2014-02-02 17:40:16 +00:00
|
|
|
var i = 0;
|
|
|
|
$('table.pid_tuning tr.ROLL input').each(function() {
|
|
|
|
PIDs[0][i++] = parseFloat($(this).val());
|
|
|
|
});
|
2013-12-15 01:28:12 +00:00
|
|
|
|
2014-02-02 17:40:16 +00:00
|
|
|
i = 0;
|
|
|
|
$('table.pid_tuning tr.PITCH input').each(function() {
|
|
|
|
PIDs[1][i++] = parseFloat($(this).val());
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('table.pid_tuning tr.YAW input').each(function() {
|
|
|
|
PIDs[2][i++] = parseFloat($(this).val());
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('table.pid_tuning tr.ALT input').each(function() {
|
|
|
|
PIDs[3][i++] = parseFloat($(this).val());
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('table.pid_tuning tr.Vario input').each(function() {
|
|
|
|
PIDs[9][i++] = parseFloat($(this).val());
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('table.pid_tuning tr.Pos input').each(function() {
|
|
|
|
PIDs[4][i++] = parseFloat($(this).val());
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('table.pid_tuning tr.PosR input').each(function() {
|
|
|
|
PIDs[5][i++] = parseFloat($(this).val());
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('table.pid_tuning tr.NavR input').each(function() {
|
|
|
|
PIDs[6][i++] = parseFloat($(this).val());
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('table.pid_tuning tr.LEVEL input').each(function() {
|
|
|
|
PIDs[7][i++] = parseFloat($(this).val());
|
|
|
|
});
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
$('table.pid_tuning tr.MAG input').each(function() {
|
|
|
|
PIDs[8][i++] = parseFloat($(this).val());
|
2014-01-24 16:06:54 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
var PID_buffer_out = new Array();
|
2014-02-02 17:40:16 +00:00
|
|
|
for (var i = 0, needle = 0; i < PIDs.length; i++, needle += 3) {
|
2014-01-24 16:06:54 +00:00
|
|
|
switch (i) {
|
|
|
|
case 0:
|
|
|
|
case 1:
|
|
|
|
case 2:
|
|
|
|
case 3:
|
|
|
|
case 7:
|
|
|
|
case 8:
|
|
|
|
case 9:
|
2014-02-02 17:40:16 +00:00
|
|
|
PID_buffer_out[needle] = parseInt(PIDs[i][0] * 10);
|
|
|
|
PID_buffer_out[needle + 1] = parseInt(PIDs[i][1] * 1000);
|
|
|
|
PID_buffer_out[needle + 2] = parseInt(PIDs[i][2]);
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 4:
|
2014-02-02 17:40:16 +00:00
|
|
|
PID_buffer_out[needle] = parseInt(PIDs[i][0] * 100);
|
|
|
|
PID_buffer_out[needle + 1] = parseInt(PIDs[i][1] * 100);
|
|
|
|
PID_buffer_out[needle + 2] = parseInt(PIDs[i][2]);
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
case 6:
|
2014-02-02 17:40:16 +00:00
|
|
|
PID_buffer_out[needle] = parseInt(PIDs[i][0] * 10);
|
|
|
|
PID_buffer_out[needle + 1] = parseInt(PIDs[i][1] * 100);
|
|
|
|
PID_buffer_out[needle + 2] = parseInt(PIDs[i][2] * 1000);
|
2014-01-24 16:06:54 +00:00
|
|
|
break;
|
2013-12-15 01:28:12 +00:00
|
|
|
}
|
|
|
|
}
|
2014-01-22 18:05:52 +00:00
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
// Send over the PID changes
|
|
|
|
send_message(MSP_codes.MSP_SET_PID, PID_buffer_out);
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
|
|
|
// Save changes to EEPROM
|
|
|
|
send_message(MSP_codes.MSP_EEPROM_WRITE, MSP_codes.MSP_EEPROM_WRITE, false, function() {
|
2014-02-04 17:52:21 +00:00
|
|
|
GUI.log('EEPROM <span style="color: green">saved</span>');
|
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
var element = $('a.update');
|
|
|
|
element.addClass('success');
|
|
|
|
|
|
|
|
GUI.timeout_add('success_highlight', function() {
|
|
|
|
element.removeClass('success');
|
|
|
|
}, 2000);
|
|
|
|
});
|
2014-01-22 18:05:52 +00:00
|
|
|
});
|
2013-06-13 11:11:53 +00:00
|
|
|
|
2014-01-24 16:06:54 +00:00
|
|
|
// enable data pulling
|
|
|
|
GUI.interval_add('pid_data_poll', function() {
|
|
|
|
send_message(MSP_codes.MSP_STATUS, MSP_codes.MSP_STATUS);
|
|
|
|
}, 50);
|
|
|
|
});
|
2013-12-15 01:28:12 +00:00
|
|
|
});
|
2014-01-24 16:06:54 +00:00
|
|
|
});
|
2013-04-08 19:10:47 +00:00
|
|
|
}
|