地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

354 lines
14 KiB

/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/// @file
/// @brief Battery, propeller and magnetometer settings
/// @author Gus Grubba <mavlink@grubba.com>
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.2
import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Controllers 1.0
QGCView {
id: rootQGCView
viewPanel: panel
property int firstColumnWidth: 220
property int textEditWidth: 80
property Fact battNumCells: controller.getParameterFact(-1, "BAT_N_CELLS")
property Fact battHighVolt: controller.getParameterFact(-1, "BAT_V_CHARGED")
property Fact battLowVolt: controller.getParameterFact(-1, "BAT_V_EMPTY")
property Fact battVoltLoadDrop: controller.getParameterFact(-1, "BAT_V_LOAD_DROP")
property alias battHigh: battHighRow
property alias battLow: battLowRow
function getBatteryImage()
{
switch(battNumCells.value) {
case 1: return "/qmlimages/PowerComponentBattery_01cell.svg";
case 2: return "/qmlimages/PowerComponentBattery_02cell.svg"
case 3: return "/qmlimages/PowerComponentBattery_03cell.svg"
case 4: return "/qmlimages/PowerComponentBattery_04cell.svg"
case 5: return "/qmlimages/PowerComponentBattery_05cell.svg"
case 6: return "/qmlimages/PowerComponentBattery_06cell.svg"
default: return "/qmlimages/PowerComponentBattery_01cell.svg";
}
}
function drawArrowhead(ctx, x, y, radians)
{
ctx.save();
ctx.beginPath();
ctx.translate(x,y);
ctx.rotate(radians);
ctx.moveTo(0,0);
ctx.lineTo(5,10);
ctx.lineTo(-5,10);
ctx.closePath();
ctx.restore();
ctx.fill();
}
function drawLineWithArrow(ctx, x1, y1, x2, y2)
{
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.stroke();
var rd = Math.atan((y2 - y1) / (x2 - x1));
rd += ((x2 > x1) ? 90 : -90) * Math.PI/180;
drawArrowhead(ctx, x2, y2, rd);
}
PowerComponentController {
id: controller
factPanel: panel
onOldFirmware: showMessage("ESC Calibration", "QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade to a newer firmware.", StandardButton.Ok)
onNewerFirmware: showMessage("ESC Calibration", "QGroundControl cannot perform ESC Calibration with this version of firmware. You will need to upgrade QGroundControl.", StandardButton.Ok)
onBatteryConnected: showMessage("ESC Calibration", "Performing calibration. This will take a few seconds..", 0)
onCalibrationFailed: showMessage("ESC Calibration failed", errorMessage, StandardButton.Ok)
onCalibrationSuccess: showMessage("ESC Calibration", "Calibration complete. You can disconnect your battery now if you like.", StandardButton.Ok)
onConnectBattery: showMessage("ESC Calibration", "<font color=\"yellow\">WARNING: Props must be removed from vehicle prior to performing ESC calibration.</font> Connect the battery now and calibration will begin.", 0)
onDisconnectBattery: showMessage("ESC Calibration failed", "You must disconnect the battery prior to performing ESC Calibration. Disconnect your battery and try again.", StandardButton.Ok)
}
QGCPalette { id: palette; colorGroupEnabled: panel.enabled }
QGCViewPanel {
id: panel
anchors.fill: parent
Column {
anchors.fill: parent
spacing: 10
QGCLabel {
text: "POWER CONFIG"
font.pixelSize: ScreenTools.largeFontPixelSize
}
QGCLabel {
text: "Battery"
font.pixelSize: ScreenTools.mediumFontPixelSize
}
Rectangle {
width: parent.width
height: 120
color: palette.windowShade
Column {
id: batteryColumn
spacing: 10
anchors.verticalCenter: parent.verticalCenter
x: (parent.x + 20)
Row {
spacing: 10
Column {
id: voltageCol
spacing: 10
Row {
spacing: 10
QGCLabel { text: "Number of Cells (in Series)"; width: firstColumnWidth; anchors.baseline: cellsField.baseline}
FactTextField {
id: cellsField
width: textEditWidth
fact: battNumCells
showUnits: true
}
}
Row {
id: battHighRow
spacing: 10
QGCLabel { text: "Full Voltage (per cell)"; width: firstColumnWidth; anchors.baseline: battHighField.baseline}
FactTextField {
id: battHighField
width: textEditWidth
fact: battHighVolt
showUnits: true
}
}
Row {
id: battLowRow
spacing: 10
QGCLabel { text: "Empty Voltage (per cell)"; width: firstColumnWidth; anchors.baseline: battLowField.baseline}
FactTextField {
id: battLowField
width: textEditWidth
fact: battLowVolt
showUnits: true
}
}
}
Canvas {
id: arrows
height: voltageCol.height
width: 40
antialiasing: true
Connections {
target: ScreenTools
onRepaintRequested: {
arrows.requestPaint();
}
}
onPaint: {
var y0 = voltageCol.mapFromItem(battHigh, 0, battHigh.height / 2).y;
var y1 = voltageCol.mapFromItem(battLow, 0, battLow.height / 2).y;
var context = getContext("2d");
context.reset();
context.strokeStyle = palette.button;
context.fillStyle = palette.button;
drawLineWithArrow(context, 0, y0, width, height * 0.25);
drawLineWithArrow(context, 0, y1, width, height * 0.85);
}
}
QGCColoredImage {
height: voltageCol.height
width: voltageCol.height * 0.75
source: getBatteryImage();
fillMode: Image.PreserveAspectFit
smooth: true
color: palette.button
cache: false
}
Item { width: 20; height: 1; }
Column {
spacing: 10
anchors.verticalCenter: parent.verticalCenter
Row {
spacing: 10
QGCLabel {
text: "Battery Max:"
width: 80
}
QGCLabel {
text: (battNumCells.value * battHighVolt.value).toFixed(1) + ' V'
}
}
Row {
spacing: 10
QGCLabel {
text: "Battery Min:"
width: 80
}
QGCLabel {
text: (battNumCells.value * battLowVolt.value).toFixed(1) + ' V'
}
}
}
}
}
}
QGCLabel {
text: "ESC Calibration"
font.pixelSize: ScreenTools.mediumFontPixelSize
}
Rectangle {
width: parent.width
height: 140
color: palette.windowShade
Column {
anchors.margins: 10
anchors.fill: parent
spacing: 10
QGCLabel {
color: "yellow"
text: "<font color=\"yellow\">WARNING: Propellers must be removed from vehicle prior to performing ESC calibration.</font>"
}
QGCLabel {
text: "You must use USB connection for this operation."
}
QGCButton {
text: "Calibrate"
onClicked: controller.calibrateEsc()
}
}
}
/*
* This is disabled for now
Row {
width: parent.width
spacing: 30
visible: showAdvanced.checked
Column {
spacing: 10
width: (parent.width / 2) - 5
QGCLabel {
text: "Propeller Function"
font.pixelSize: ScreenTools.mediumFontPixelSize
}
Rectangle {
width: parent.width
height: 160
color: palette.windowShade
}
}
Column {
spacing: 10
width: (parent.width / 2) - 5
QGCLabel {
text: "Magnetometer Distortion"
font.pixelSize: ScreenTools.mediumFontPixelSize
}
Rectangle {
width: parent.width
height: 160
color: palette.windowShade
}
}
}
*/
//-- Advanced Settings
QGCCheckBox {
id: showAdvanced
text: "Show Advanced Settings"
}
QGCLabel {
text: "Advanced Power Settings"
font.pixelSize: ScreenTools.mediumFontPixelSize
visible: showAdvanced.checked
}
Rectangle {
id: batteryRectangle
width: parent.width
height: 140
color: palette.windowShade
visible: showAdvanced.checked
Column {
id: advBatteryColumn
spacing: 10
anchors.verticalCenter: parent.verticalCenter
x: (parent.x + 20)
Row {
spacing: 10
QGCLabel { text: "Voltage Drop on Full Load (per cell)"; width: firstColumnWidth; anchors.baseline: battDropField.baseline}
FactTextField {
id: battDropField
width: textEditWidth
fact: battVoltLoadDrop
showUnits: true
}
}
QGCLabel {
width: batteryRectangle.width - 30
wrapMode: Text.WordWrap
text: "Batteries show less voltage at high throttle. Enter the difference in Volts between idle throttle and full " +
"throttle, divided by the number of battery cells. Leave at the default if unsure. " +
"<font color=\"yellow\">If this value is set too high, the battery might be deep discharged and damaged.</font>"
}
Row {
spacing: 10
QGCLabel {
text: "Compensated Minimum Voltage:"
}
QGCLabel {
text: ((battNumCells.value * battLowVolt.value) - (battNumCells.value * battVoltLoadDrop.value)).toFixed(1) + ' V'
}
}
}
}
} // Column
} // QGCViewPanel
}