PowerComponent.qml 14.3 KB
Newer Older
dogmaphobic's avatar
dogmaphobic committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
/*=====================================================================

 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
30
import QtQuick.Dialogs 1.2
dogmaphobic's avatar
dogmaphobic committed
31 32 33 34 35

import QGroundControl.FactSystem 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.Controls 1.0
36
import QGroundControl.ScreenTools 1.0
37
import QGroundControl.Controllers 1.0
dogmaphobic's avatar
dogmaphobic committed
38

39
QGCView {
40 41 42
    id:         rootQGCView
    viewPanel:  panel

43
    property int textEditWidth:    ScreenTools.defaultFontPixelWidth * 8
44 45 46 47 48 49 50 51 52

    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")

    function getBatteryImage()
    {
        switch(battNumCells.value) {
53 54 55 56 57 58 59
            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";
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
        }
    }

    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)
Don Gagne's avatar
Don Gagne committed
97
        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)
98 99 100 101 102 103 104 105 106 107 108
        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 {
109 110
            anchors.fill:   parent
            spacing:        ScreenTools.defaultFontPixelHeight
111 112 113

            QGCLabel {
                text: "POWER CONFIG"
114
                font.pixelSize: ScreenTools.largeFontPixelSize
115 116
            }

117 118
            QGCLabel {
                text: "Battery"
119
                font.pixelSize: ScreenTools.mediumFontPixelSize
120 121
            }

122
            Rectangle {
123 124 125
                width:  parent.width
                height: voltageCol.height + ScreenTools.defaultFontPixelHeight
                color:  palette.windowShade
126

127
                Column {
128 129 130 131 132 133 134
                    id:                 voltageCol
                    anchors.margins:    ScreenTools.defaultFontPixelHeight / 2
                    anchors.left:       parent.left
                    anchors.top:        parent.top
                    spacing:            ScreenTools.defaultFontPixelHeight / 2

                    property real firstColumnWidth: Math.max(Math.max(cellsLabel.contentWidth, battHighLabel.contentWidth), battLowLabel.contentWidth) + ScreenTools.defaultFontPixelWidth
135

136
                    Row {
137 138 139 140 141 142
                        spacing: ScreenTools.defaultFontPixelWidth

                        QGCLabel {
                            id:                 cellsLabel
                            text:               "Number of Cells (in Series)"
                            anchors.baseline:   cellsField.baseline
143
                        }
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160

                        FactTextField {
                            id:         cellsField
                            x:          voltageCol.firstColumnWidth
                            width:      textEditWidth
                            fact:       battNumCells
                            showUnits: true
                        }
                    }

                    Row {
                        spacing: ScreenTools.defaultFontPixelWidth

                        QGCLabel {
                            id:                 battHighLabel
                            text:               "Full Voltage (per cell)"
                            anchors.baseline:   battHighField.baseline
161
                            }
162 163 164 165 166 167 168

                        FactTextField {
                            id:         battHighField
                            x:          voltageCol.firstColumnWidth
                            width:      textEditWidth
                            fact:       battHighVolt
                            showUnits:  true
169
                        }
170 171 172 173 174 175 176 177 178
                    }

                    Row {
                        spacing: ScreenTools.defaultFontPixelWidth

                        QGCLabel {
                            id:                 battLowLabel
                            text:               "Empty Voltage (per cell)"
                            anchors.baseline:   battLowField.baseline
179
                        }
180 181 182 183 184 185 186

                        FactTextField {
                            id:         battLowField
                            x:          voltageCol.firstColumnWidth
                            width:      textEditWidth
                            fact:       battLowVolt
                            showUnits:  true
187
                        }
dogmaphobic's avatar
dogmaphobic committed
188
                    }
189 190 191 192 193 194 195 196 197 198 199 200 201
                } // Column

                QGCColoredImage {
                    id:                     batteryImage
                    anchors.verticalCenter: voltageCol.verticalCenter
                    x:                      voltageCol.firstColumnWidth + textEditWidth + (ScreenTools.defaultFontPixelWidth * 3)
                    width:                  height * 0.75
                    height:                 voltageCol.height
                    fillMode:               Image.PreserveAspectFit
                    smooth:                 true
                    color:                  palette.button
                    cache:                  false
                    source:                 getBatteryImage();
202
                }
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218

                Column {
                    anchors.leftMargin:     ScreenTools.defaultFontPixelWidth * 2
                    anchors.left:           batteryImage.right
                    anchors.verticalCenter: voltageCol.verticalCenter
                    spacing:                ScreenTools.defaultFontPixelHeight

                    QGCLabel {
                        text: "Battery Max: " + (battNumCells.value * battHighVolt.value).toFixed(1) + ' V'
                    }

                    QGCLabel {
                        text: "Battery Min: " + (battNumCells.value * battLowVolt.value).toFixed(1) + ' V'
                    }
                }
            } // Rectangle - Battery settings
219

220 221
            QGCLabel {
                text:           "ESC Calibration"
222
                font.pixelSize: ScreenTools.mediumFontPixelSize
223
            }
224

225
            Rectangle {
226 227 228
                width:  parent.width
                height: escCalColumn.height + ScreenTools.defaultFontPixelHeight
                color:  palette.windowShade
229

230
                Column {
231 232 233 234 235
                    id :                escCalColumn
                    anchors.margins:    ScreenTools.defaultFontPixelHeight / 2
                    anchors.left:       parent.left
                    anchors.top:        parent.top
                    spacing:            ScreenTools.defaultFontPixelWidth
236

237
                    QGCLabel {
238
                        color:  palette.warningText
Don Gagne's avatar
Don Gagne committed
239 240 241 242 243
                        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."
244
                    }
245

246 247 248
                    QGCButton {
                        text:       "Calibrate"
                        onClicked:  controller.calibrateEsc()
dogmaphobic's avatar
dogmaphobic committed
249
                    }
250
                }
251
            }
252

253 254 255 256 257 258
            QGCLabel {
                text:           "UAVCAN ESC Configuration"
                font.pixelSize: ScreenTools.mediumFontPixelSize
            }

            Rectangle {
259 260 261
                width:  parent.width
                height: uavCanEscCalColumn.height + ScreenTools.defaultFontPixelHeight
                color:  palette.windowShade
262 263

                Column {
264 265 266 267 268
                    id:                 uavCanEscCalColumn
                    anchors.margins:    ScreenTools.defaultFontPixelHeight / 2
                    anchors.left:       parent.left
                    anchors.top:        parent.top
                    spacing:            ScreenTools.defaultFontPixelWidth
269 270

                    QGCLabel {
271
                        color:  palette.warningText
272 273 274 275 276 277 278 279 280 281 282 283 284 285
                        text:   "<font color=\"yellow\">WARNING: Propellers must be removed from vehicle prior to performing UAVCAN ESC configuration.</font>"
                    }

                    QGCLabel {
                        text: "You must use USB connection for this operation."
                    }

                    QGCButton {
                        text:       "Configure"
                        onClicked:  controller.busConfigureActuators()
                    }
                }
            }

286
            QGCCheckBox {
287 288
                id:     showAdvanced
                text:   "Show Advanced Settings"
289
            }
290

291
            QGCLabel {
Don Gagne's avatar
Don Gagne committed
292 293 294
                text:           "Advanced Power Settings"
                font.pixelSize: ScreenTools.mediumFontPixelSize
                visible:        showAdvanced.checked
295
            }
296

297
            Rectangle {
298 299 300 301 302 303
                id:         batteryRectangle
                width:      parent.width
                height:     advBatteryColumn.height + ScreenTools.defaultFontPixelHeight
                color:      palette.windowShade
                visible:    showAdvanced.checked

304 305
                Column {
                    id: advBatteryColumn
306 307 308 309 310 311
                    anchors.margins:    ScreenTools.defaultFontPixelHeight / 2
                    anchors.left:       parent.left
                    anchors.right:      parent.right
                    anchors.top:        parent.top
                    spacing:            ScreenTools.defaultFontPixelWidth

312
                    Row {
313 314 315 316 317 318 319
                        spacing: ScreenTools.defaultFontPixelWidth

                        QGCLabel {
                            text:               "Voltage Drop on Full Load (per cell)"
                            anchors.baseline:   battDropField.baseline
                        }

320
                        FactTextField {
321 322 323 324
                            id:         battDropField
                            width:      textEditWidth
                            fact:       battVoltLoadDrop
                            showUnits:  true
325
                        }
dogmaphobic's avatar
dogmaphobic committed
326
                    }
327

328
                    QGCLabel {
329 330 331 332 333
                        width:      parent.width
                        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>"
334
                    }
335

336
                    Row {
337 338
                        spacing: ScreenTools.defaultFontPixelWidth

339 340 341
                        QGCLabel {
                            text: "Compensated Minimum Voltage:"
                        }
342

343 344 345 346
                        QGCLabel {
                            text: ((battNumCells.value * battLowVolt.value) - (battNumCells.value * battVoltLoadDrop.value)).toFixed(1) + ' V'
                        }
                    }
dogmaphobic's avatar
dogmaphobic committed
347
                }
348
            } // Rectangle - Advanced power settings
349 350
        } // Column
    } // QGCViewPanel
351
} // QGCView