You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
inav-configurator/tabs/sensors.js

190 lines
5.4 KiB
JavaScript

function tab_initialize_sensors() {
// Setup variables
samples_i = 300;
gyro_data = new Array(3);
accel_data = new Array(3);
mag_data = new Array(3);
baro_data = new Array(1);
gyro_data[0] = new Array();
gyro_data[1] = new Array();
gyro_data[2] = new Array();
accel_data[0] = new Array();
accel_data[1] = new Array();
accel_data[2] = new Array();
mag_data[0] = new Array();
mag_data[1] = new Array();
mag_data[2] = new Array();
baro_data[0] = new Array();
for (var i = 0; i <= 300; i++) {
gyro_data[0].push([i, 0]);
gyro_data[1].push([i, 0]);
gyro_data[2].push([i, 0]);
accel_data[0].push([i, 0]);
accel_data[1].push([i, 0]);
accel_data[2].push([i, 0]);
mag_data[0].push([i, 0]);
mag_data[1].push([i, 0]);
mag_data[2].push([i, 0]);
baro_data[0].push([i, 0]);
}
// plot specific stuff
e_graph_gyro = document.getElementById("gyro");
e_graph_accel = document.getElementById("accel");
e_graph_mag = document.getElementById("mag");
e_graph_baro = document.getElementById("baro");
gyro_options = {
title: "Gyroscope (deg/s)",
shadowSize: 0,
yaxis : {
tickDecimals: 0,
max: 150,
min: -150
},
xaxis : {
//noTicks = 0
},
grid : {
backgroundColor: "#FFFFFF"
},
legend : {
position: "we",
backgroundOpacity: 0
}
}
accel_options = {
title: "Accelerometer (g)",
shadowSize: 0,
yaxis : {
tickDecimals: 1,
max : 1.5,
min : -1.5
},
xaxis : {
//noTicks = 0
},
grid : {
backgroundColor : "#FFFFFF"
},
legend : {
position: "we",
backgroundOpacity: 0
}
}
mag_options = {
title: "Magnetometer (Ga)",
shadowSize: 0,
yaxis : {
tickDecimals: 0,
max : 120,
min : -120
},
xaxis : {
//noTicks = 0
},
grid : {
backgroundColor : "#FFFFFF"
},
legend : {
position: "we",
backgroundOpacity: 0
}
}
baro_options = {
title: "Barometer (m)",
shadowSize: 0,
yaxis : {
tickDecimals: 1,
/*
max : 1.5,
min : -1.5
*/
},
xaxis : {
//noTicks = 0
},
grid : {
backgroundColor : "#FFFFFF"
},
legend : {
position: "we",
backgroundOpacity: 0
}
}
// start polling data
timers.push(setInterval(sensor_array_pull, 50));
}
function sensor_array_pull() {
// push data to the main array
gyro_data[0].push([samples_i, SENSOR_DATA.gyroscope[0]]);
gyro_data[1].push([samples_i, SENSOR_DATA.gyroscope[1]]);
gyro_data[2].push([samples_i, SENSOR_DATA.gyroscope[2]]);
accel_data[0].push([samples_i, SENSOR_DATA.accelerometer[0]]);
accel_data[1].push([samples_i, SENSOR_DATA.accelerometer[1]]);
accel_data[2].push([samples_i, SENSOR_DATA.accelerometer[2]]);
mag_data[0].push([samples_i, SENSOR_DATA.magnetometer[0]]);
mag_data[1].push([samples_i, SENSOR_DATA.magnetometer[1]]);
mag_data[2].push([samples_i, SENSOR_DATA.magnetometer[2]]);
baro_data[0].push([samples_i, SENSOR_DATA.altitude]);
// Remove old data from array
while (gyro_data[0].length > 300) {
gyro_data[0].shift();
gyro_data[1].shift();
gyro_data[2].shift();
accel_data[0].shift();
accel_data[1].shift();
accel_data[2].shift();
mag_data[0].shift();
mag_data[1].shift();
mag_data[2].shift();
baro_data[0].shift();
}
// Update graphs
Flotr.draw(e_graph_gyro, [
{data: gyro_data[0], label: "X - rate [" + SENSOR_DATA.gyroscope[0].toFixed(2) + "]"},
{data: gyro_data[1], label: "Y - rate [" + SENSOR_DATA.gyroscope[1].toFixed(2) + "]"},
{data: gyro_data[2], label: "Z - rate [" + SENSOR_DATA.gyroscope[2].toFixed(2) + "]"} ], gyro_options);
Flotr.draw(e_graph_accel, [
{data: accel_data[1], label: "X - acceleration [" + SENSOR_DATA.accelerometer[0].toFixed(2) + "]"},
{data: accel_data[0], label: "Y - acceleration [" + SENSOR_DATA.accelerometer[1].toFixed(2) + "]"},
{data: accel_data[2], label: "Z - acceleration [" + SENSOR_DATA.accelerometer[2].toFixed(2) + "]"} ], accel_options);
Flotr.draw(e_graph_mag, [
{data: mag_data[1], label: "X - Ga [" + SENSOR_DATA.magnetometer[0].toFixed(2) + "]"},
{data: mag_data[0], label: "Y - Ga [" + SENSOR_DATA.magnetometer[1].toFixed(2) + "]"},
{data: mag_data[2], label: "Z - Ga [" + SENSOR_DATA.magnetometer[2].toFixed(2) + "]"} ], mag_options);
Flotr.draw(e_graph_baro, [
{data: baro_data[0], label: "X - meters [" + SENSOR_DATA.altitude.toFixed(2) + "]"} ], baro_options);
samples_i++;
// Request new data
send_message(MSP_codes.MSP_RAW_IMU, MSP_codes.MSP_RAW_IMU);
send_message(MSP_codes.MSP_ALTITUDE, MSP_codes.MSP_ALTITUDE);
}