PowerComponent.qml 15.7 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
        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

107 108
        Flickable {
            anchors.fill:       parent
dogmaphobic's avatar
dogmaphobic committed
109
            clip:               true
110
            contentHeight:      innerColumn.height
dogmaphobic's avatar
dogmaphobic committed
111 112 113
            contentWidth:       panel.width
            boundsBehavior:     Flickable.StopAtBounds
            flickableDirection: Flickable.VerticalFlick
114 115 116

            Column {
                id:             innerColumn
dogmaphobic's avatar
dogmaphobic committed
117
                width:          panel.width
118 119 120 121 122 123
                spacing:        ScreenTools.defaultFontPixelHeight

                QGCLabel {
                    text: "Battery"
                    font.pixelSize: ScreenTools.mediumFontPixelSize
                }
124

125 126 127 128
                Rectangle {
                    width:  parent.width
                    height: voltageCol.height + ScreenTools.defaultFontPixelHeight
                    color:  palette.windowShade
129

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

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

139 140
                        Row {
                            spacing: ScreenTools.defaultFontPixelWidth
141

142 143 144 145 146
                            QGCLabel {
                                id:                 cellsLabel
                                text:               "Number of Cells (in Series)"
                                anchors.baseline:   cellsField.baseline
                            }
147

148 149 150 151 152 153 154
                            FactTextField {
                                id:         cellsField
                                x:          voltageCol.firstColumnWidth
                                width:      textEditWidth
                                fact:       battNumCells
                                showUnits: true
                            }
155
                        }
156

157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
                        Row {
                            spacing: ScreenTools.defaultFontPixelWidth

                            QGCLabel {
                                id:                 battHighLabel
                                text:               "Full Voltage (per cell)"
                                anchors.baseline:   battHighField.baseline
                                }

                            FactTextField {
                                id:         battHighField
                                x:          voltageCol.firstColumnWidth
                                width:      textEditWidth
                                fact:       battHighVolt
                                showUnits:  true
                            }
173 174
                        }

175 176
                        Row {
                            spacing: ScreenTools.defaultFontPixelWidth
177

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

184 185 186 187 188 189 190
                            FactTextField {
                                id:         battLowField
                                x:          voltageCol.firstColumnWidth
                                width:      textEditWidth
                                fact:       battLowVolt
                                showUnits:  true
                            }
191
                        }
192 193 194 195 196 197 198 199 200 201 202 203 204
                    } // 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();
205 206
                    }

207 208 209 210 211
                    Column {
                        anchors.leftMargin:     ScreenTools.defaultFontPixelWidth * 2
                        anchors.left:           batteryImage.right
                        anchors.verticalCenter: voltageCol.verticalCenter
                        spacing:                ScreenTools.defaultFontPixelHeight
212 213

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

217 218
                        QGCLabel {
                            text: "Battery Min: " + (battNumCells.value * battLowVolt.value).toFixed(1) + ' V'
219
                        }
dogmaphobic's avatar
dogmaphobic committed
220
                    }
221 222 223 224 225
                } // Rectangle - Battery settings

                QGCLabel {
                    text:           "ESC Calibration"
                    font.pixelSize: ScreenTools.mediumFontPixelSize
226
                }
227

228 229 230 231
                Rectangle {
                    width:  parent.width
                    height: escCalColumn.height + ScreenTools.defaultFontPixelHeight
                    color:  palette.windowShade
232

233 234 235 236 237 238
                    Column {
                        id :                escCalColumn
                        anchors.margins:    ScreenTools.defaultFontPixelHeight / 2
                        anchors.left:       parent.left
                        anchors.top:        parent.top
                        spacing:            ScreenTools.defaultFontPixelWidth
239

240 241 242 243
                        QGCLabel {
                            color:  palette.warningText
                            text:   "<font color=\"yellow\">WARNING: Propellers must be removed from vehicle prior to performing ESC calibration.</font>"
                        }
Don Gagne's avatar
Don Gagne committed
244

245 246 247
                        QGCLabel {
                            text: "You must use USB connection for this operation."
                        }
248

249 250
                        QGCButton {
                            text:       "Calibrate"
dogmaphobic's avatar
dogmaphobic committed
251
                            width:      ScreenTools.defaultFontPixelWidth * 20
252 253
                            onClicked:  controller.calibrateEsc()
                        }
dogmaphobic's avatar
dogmaphobic committed
254
                    }
255
                }
256

257 258 259 260
                QGCLabel {
                    text:           "UAVCAN ESC Configuration"
                    font.pixelSize: ScreenTools.mediumFontPixelSize
                }
261

262 263 264 265
                Rectangle {
                    width:  parent.width
                    height: uavCanEscCalColumn.height + ScreenTools.defaultFontPixelHeight
                    color:  palette.windowShade
266

267 268 269 270 271 272
                    Column {
                        id:                 uavCanEscCalColumn
                        anchors.margins:    ScreenTools.defaultFontPixelHeight / 2
                        anchors.left:       parent.left
                        anchors.top:        parent.top
                        spacing:            ScreenTools.defaultFontPixelWidth
273 274

                        QGCLabel {
275 276
                            color:  palette.warningText
                            text:   "<font color=\"yellow\">WARNING: Propellers must be removed from vehicle prior to performing UAVCAN ESC configuration.</font>"
277 278
                        }

279 280
                        QGCLabel {
                            text: "You must use USB connection for this operation."
281
                        }
282

283 284
                        QGCButton {
                            text:       "Start Configuration"
dogmaphobic's avatar
dogmaphobic committed
285
                            width:      ScreenTools.defaultFontPixelWidth * 20
286 287 288 289 290
                            onClicked:  controller.busConfigureActuators()
                        }

                        QGCButton {
                            text:       "End Configuration"
dogmaphobic's avatar
dogmaphobic committed
291
                            width:      ScreenTools.defaultFontPixelWidth * 20
292 293
                            onClicked:  controller.StopBusConfigureActuators()
                        }
294
                    }
295
                }
296

297 298 299 300
                QGCCheckBox {
                    id:     showAdvanced
                    text:   "Show Advanced Settings"
                }
301

302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336
                QGCLabel {
                    text:           "Advanced Power Settings"
                    font.pixelSize: ScreenTools.mediumFontPixelSize
                    visible:        showAdvanced.checked
                }

                Rectangle {
                    id:         batteryRectangle
                    width:      parent.width
                    height:     advBatteryColumn.height + ScreenTools.defaultFontPixelHeight
                    color:      palette.windowShade
                    visible:    showAdvanced.checked

                    Column {
                        id: advBatteryColumn
                        anchors.margins:    ScreenTools.defaultFontPixelHeight / 2
                        anchors.left:       parent.left
                        anchors.right:      parent.right
                        anchors.top:        parent.top
                        spacing:            ScreenTools.defaultFontPixelWidth

                        Row {
                            spacing: ScreenTools.defaultFontPixelWidth

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

                            FactTextField {
                                id:         battDropField
                                width:      textEditWidth
                                fact:       battVoltLoadDrop
                                showUnits:  true
                            }
337
                        }
338

339
                        QGCLabel {
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356
                            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>"
                        }

                        Row {
                            spacing: ScreenTools.defaultFontPixelWidth

                            QGCLabel {
                                text: "Compensated Minimum Voltage:"
                            }

                            QGCLabel {
                                text: ((battNumCells.value * battLowVolt.value) - (battNumCells.value * battVoltLoadDrop.value)).toFixed(1) + ' V'
                            }
357 358
                        }
                    }
359 360 361
                } // Rectangle - Advanced power settings
            } // Column
        } // Flickable
362
    } // QGCViewPanel
363
} // QGCView