From 0b4fb183906f2d013a9e8fd969fadc0a10e40325 Mon Sep 17 00:00:00 2001 From: Michael Carpenter Date: Thu, 27 Jun 2013 11:09:17 -0400 Subject: [PATCH] Implementation of Battery Monitor configuration, and addition of AP2ConfigWidget, which automatically handles UAS connections to allow for simpler configuration window code. --- files/images/devices/BR-APMPWRDEAN-2.jpg | Bin 0 -> 18425 bytes qgroundcontrol.pro | 6 +- qgroundcontrol.qrc | 1 + src/ui/configuration/AP2ConfigWidget.cc | 23 ++ src/ui/configuration/AP2ConfigWidget.h | 21 ++ src/ui/configuration/BatteryMonitorConfig.cc | 231 ++++++++++++++++++- src/ui/configuration/BatteryMonitorConfig.h | 12 +- src/ui/configuration/BatteryMonitorConfig.ui | 202 +++++++++++++++- 8 files changed, 487 insertions(+), 9 deletions(-) create mode 100644 files/images/devices/BR-APMPWRDEAN-2.jpg create mode 100644 src/ui/configuration/AP2ConfigWidget.cc create mode 100644 src/ui/configuration/AP2ConfigWidget.h diff --git a/files/images/devices/BR-APMPWRDEAN-2.jpg b/files/images/devices/BR-APMPWRDEAN-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62a6a83b8380283f52d1b9981cd960711a2e8630 GIT binary patch literal 18425 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 literal 0 HcmV?d00001 diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index edf55c06c..2e0d9c43d 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -424,7 +424,8 @@ HEADERS += src/MG.h \ src/ui/configuration/OpticalFlowConfig.h \ src/ui/configuration/OsdConfig.h \ src/ui/configuration/AntennaTrackerConfig.h \ - src/ui/configuration/CameraGimbalConfig.h + src/ui/configuration/CameraGimbalConfig.h \ + src/ui/configuration/AP2ConfigWidget.h # Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::HEADERS += src/ui/map3D/QGCGoogleEarthView.h @@ -616,7 +617,8 @@ SOURCES += src/main.cc \ src/ui/configuration/OpticalFlowConfig.cc \ src/ui/configuration/OsdConfig.cc \ src/ui/configuration/AntennaTrackerConfig.cc \ - src/ui/configuration/CameraGimbalConfig.cc + src/ui/configuration/CameraGimbalConfig.cc \ + src/ui/configuration/AP2ConfigWidget.cc # Enable Google Earth only on Mac OS and Windows with Visual Studio compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index fab4b89eb..b40e39950 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -110,6 +110,7 @@ files/images/mavs/frames_x.png files/images/mavs/frames-05.png files/images/devices/BR-HMC5883-01-2.jpg + files/images/devices/BR-APMPWRDEAN-2.jpg files/styles/Vera.ttf diff --git a/src/ui/configuration/AP2ConfigWidget.cc b/src/ui/configuration/AP2ConfigWidget.cc new file mode 100644 index 000000000..21c589506 --- /dev/null +++ b/src/ui/configuration/AP2ConfigWidget.cc @@ -0,0 +1,23 @@ +#include "AP2ConfigWidget.h" + +AP2ConfigWidget::AP2ConfigWidget(QWidget *parent) : QWidget(parent) +{ + m_uas = 0; + connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(activeUASSet(UASInterface*))); + activeUASSet(UASManager::instance()->getActiveUAS()); +} +void AP2ConfigWidget::activeUASSet(UASInterface *uas) +{ + if (!uas) return; + if (m_uas) + { + disconnect(m_uas,SIGNAL(parameterChanged(int,int,QString,QVariant)),this,SLOT(parameterChanged(int,int,QString,QVariant))); + } + m_uas = uas; + connect(m_uas,SIGNAL(parameterChanged(int,int,QString,QVariant)),this,SLOT(parameterChanged(int,int,QString,QVariant))); +} + +void AP2ConfigWidget::parameterChanged(int uas, int component, QString parameterName, QVariant value) +{ + +} diff --git a/src/ui/configuration/AP2ConfigWidget.h b/src/ui/configuration/AP2ConfigWidget.h new file mode 100644 index 000000000..2f27e35ab --- /dev/null +++ b/src/ui/configuration/AP2ConfigWidget.h @@ -0,0 +1,21 @@ +#ifndef AP2CONFIGWIDGET_H +#define AP2CONFIGWIDGET_H + +#include +#include "UASManager.h" +#include "UASInterface.h" +class AP2ConfigWidget : public QWidget +{ + Q_OBJECT +public: + explicit AP2ConfigWidget(QWidget *parent = 0); +protected: + UASInterface *m_uas; +signals: + +public slots: + virtual void activeUASSet(UASInterface *uas); + virtual void parameterChanged(int uas, int component, QString parameterName, QVariant value); +}; + +#endif // AP2CONFIGWIDGET_H diff --git a/src/ui/configuration/BatteryMonitorConfig.cc b/src/ui/configuration/BatteryMonitorConfig.cc index 23ef9a731..96990bb95 100644 --- a/src/ui/configuration/BatteryMonitorConfig.cc +++ b/src/ui/configuration/BatteryMonitorConfig.cc @@ -1,11 +1,238 @@ #include "BatteryMonitorConfig.h" +#include - -BatteryMonitorConfig::BatteryMonitorConfig(QWidget *parent) : QWidget(parent) +BatteryMonitorConfig::BatteryMonitorConfig(QWidget *parent) : AP2ConfigWidget(parent) { ui.setupUi(this); + ui.monitorComboBox->addItem("0: Disabled"); + ui.monitorComboBox->addItem("3: Battery Volts"); + ui.monitorComboBox->addItem("4: Voltage and Current"); + + ui.sensorComboBox->addItem("0: Other"); + ui.sensorComboBox->addItem("1: AttoPilot 45A"); + ui.sensorComboBox->addItem("2: AttoPilot 90A"); + ui.sensorComboBox->addItem("3: AttoPilot 180A"); + ui.sensorComboBox->addItem("4: 3DR Power Module"); + + ui.apmVerComboBox->addItem("0: APM1"); + ui.apmVerComboBox->addItem("1: APM2 - 2.5 non 3DR"); + ui.apmVerComboBox->addItem("2: APM2.5 - 3DR Power Module"); + ui.apmVerComboBox->addItem("3: PX4"); + + connect(ui.monitorComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(monitorCurrentIndexChanged(int))); + connect(ui.sensorComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(sensorCurrentIndexChanged(int))); + connect(ui.apmVerComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(apmVerCurrentIndexChanged(int))); + + connect(ui.calcDividerLineEdit,SIGNAL(editingFinished()),this,SLOT(calcDividerSet())); + connect(ui.ampsPerVoltsLineEdit,SIGNAL(editingFinished()),this,SLOT(ampsPerVoltSet())); + connect(ui.battCapacityLineEdit,SIGNAL(editingFinished()),this,SLOT(batteryCapacitySet())); + + ui.alertOnLowCheckBox->setVisible(false); + +} +void BatteryMonitorConfig::calcDividerSet() +{ + bool ok = false; + float newval = ui.calcDividerLineEdit->text().toFloat(&ok); + if (!ok) + { + //Error parsing; + QMessageBox::information(0,"Error","Invalid number entered for voltage divider. Please try again"); + return; + } + m_uas->setParameter(0,"VOLT_DIVIDER",newval); +} +void BatteryMonitorConfig::ampsPerVoltSet() +{ + bool ok = false; + float newval = ui.ampsPerVoltsLineEdit->text().toFloat(&ok); + if (!ok) + { + //Error parsing; + QMessageBox::information(0,"Error","Invalid number entered for amps per volts. Please try again"); + return; + } + m_uas->setParameter(0,"AMPS_PER_VOLT",newval); +} +void BatteryMonitorConfig::batteryCapacitySet() +{ + bool ok = false; + float newval = ui.battCapacityLineEdit->text().toFloat(&ok); + if (!ok) + { + //Error parsing; + QMessageBox::information(0,"Error","Invalid number entered for amps per volts. Please try again"); + return; + } + m_uas->setParameter(0,"BATT_CAPACITY",newval); +} + +void BatteryMonitorConfig::monitorCurrentIndexChanged(int index) +{ + if (!m_uas) + { + QMessageBox::information(0,tr("Error"),tr("Please connect to a MAV before attempting to set configuration")); + return; + } + if (index == 0) + { + m_uas->setParameter(0,"BATT_VOLT_PIN",-1); + m_uas->setParameter(0,"BATT_CURR_PIN",-1); + m_uas->setParameter(0,"BATT_MONITOR",0); + ui.sensorComboBox->setEnabled(false); + ui.apmVerComboBox->setEnabled(false); + ui.measuredVoltsLineEdit->setEnabled(false); + ui.measuredVoltsLineEdit->setEnabled(false); + ui.calcDividerLineEdit->setEnabled(false); + ui.calcVoltsLineEdit->setEnabled(false); + ui.ampsPerVoltsLineEdit->setEnabled(false); + } + else if (index == 1) + { + m_uas->setParameter(0,"BATT_MONITOR",3); + ui.sensorComboBox->setEnabled(false); + ui.apmVerComboBox->setEnabled(true); + ui.measuredVoltsLineEdit->setEnabled(true); + ui.calcDividerLineEdit->setEnabled(true); + ui.calcVoltsLineEdit->setEnabled(false); + ui.ampsPerVoltsLineEdit->setEnabled(false); + } + else if (index == 2) + { + m_uas->setParameter(0,"BATT_MONITOR",4); + ui.sensorComboBox->setEnabled(true); + ui.apmVerComboBox->setEnabled(true); + ui.measuredVoltsLineEdit->setEnabled(true); + ui.calcDividerLineEdit->setEnabled(true); + ui.calcVoltsLineEdit->setEnabled(false); + ui.ampsPerVoltsLineEdit->setEnabled(true); + } + + +} +void BatteryMonitorConfig::sensorCurrentIndexChanged(int index) +{ + float maxvolt = 0; + float maxamps = 0; + float mvpervolt = 0; + float mvperamp = 0; + float topvolt = 0; + float topamps = 0; + + if (index == 1) + { + //atto 45 + maxvolt = 13.6; + maxamps = 44.7; + mvpervolt = 242.3; + mvperamp = 73.20; + } + else if (index == 2) + { + //atto 90 + maxvolt = 50; + maxamps = 89.4; + mvpervolt = 63.69; + mvperamp = 36.60; + } + else if (index == 3) + { + //atto 180 + maxvolt = 50; + maxamps = 178.8; + mvpervolt = 63.69; + mvperamp = 18.30; + } + else if (index == 4) + { + //3dr + maxvolt = 50; + maxamps = 90; + mvpervolt = 100; + mvperamp = 55.55; + } + if (index == 0) + { + //Other + ui.ampsPerVoltsLineEdit->setEnabled(true); + ui.calcDividerLineEdit->setEnabled(true); + ui.measuredVoltsLineEdit->setEnabled(true); + } + else + { + topvolt = (maxvolt * mvpervolt) / 1000.0; + topamps = (maxamps * mvperamp) / 1000.0; + + ui.calcDividerLineEdit->setText(QString::number(maxvolt/topvolt)); + ui.ampsPerVoltsLineEdit->setText(QString::number(maxamps / topamps)); + ui.ampsPerVoltsLineEdit->setEnabled(false); + ui.calcDividerLineEdit->setEnabled(false); + ui.measuredVoltsLineEdit->setEnabled(false); + } +} + +void BatteryMonitorConfig::apmVerCurrentIndexChanged(int index) +{ + } BatteryMonitorConfig::~BatteryMonitorConfig() { } + +void BatteryMonitorConfig::parameterChanged(int uas, int component, QString parameterName, QVariant value) +{ + if (parameterName == "VOLT_DIVIDER") + { + ui.calcDividerLineEdit->setText(QString::number(value.toFloat(),'f',4)); + } + else if (parameterName == "AMP_PER_VOLT") + { + ui.ampsPerVoltsLineEdit->setText(QString::number(value.toFloat(),'g',2)); + + } + else if (parameterName == "BATT_MONITOR") + { + if (value.toInt() == 0) //0: Disable + { + ui.monitorComboBox->setCurrentIndex(0); + } + else if (value.toInt() == 3) //3: Battery volts + { + ui.monitorComboBox->setCurrentIndex(1); + } + else if (value.toInt() == 4) //4: Voltage and Current + { + ui.monitorComboBox->setCurrentIndex(2); + } + + } + else if (parameterName == "BATT_CAPACITY") + { + ui.battCapacityLineEdit->setText(QString::number(value.toFloat())); + } + else if (parameterName == "BATT_VOLT_PIN") + { + int ivalue = value.toInt(); + if (ivalue == 0) //APM1 + { + ui.apmVerComboBox->setCurrentIndex(0); + } + else if (ivalue == 1) //APM2 + { + ui.apmVerComboBox->setCurrentIndex(1); + } + else if (ivalue == 13) //APM2.5 + { + ui.apmVerComboBox->setCurrentIndex(2); + } + else if (ivalue == 100) //PX4 + { + ui.apmVerComboBox->setCurrentIndex(3); + } + } + else if (parameterName == "BATT_CURR_PIN") + { + //Unused at the moment, everything is off BATT_VOLT_PIN + } +} diff --git a/src/ui/configuration/BatteryMonitorConfig.h b/src/ui/configuration/BatteryMonitorConfig.h index bdddcd823..183d782d2 100644 --- a/src/ui/configuration/BatteryMonitorConfig.h +++ b/src/ui/configuration/BatteryMonitorConfig.h @@ -2,16 +2,24 @@ #define BATTERYMONITORCONFIG_H #include +#include "AP2ConfigWidget.h" #include "ui_BatteryMonitorConfig.h" -class BatteryMonitorConfig : public QWidget +class BatteryMonitorConfig : public AP2ConfigWidget { Q_OBJECT public: explicit BatteryMonitorConfig(QWidget *parent = 0); ~BatteryMonitorConfig(); - +private slots: + void parameterChanged(int uas, int component, QString parameterName, QVariant value); + void monitorCurrentIndexChanged(int index); + void sensorCurrentIndexChanged(int index); + void apmVerCurrentIndexChanged(int index); + void calcDividerSet(); + void ampsPerVoltSet(); + void batteryCapacitySet(); private: Ui::BatteryMonitorConfig ui; }; diff --git a/src/ui/configuration/BatteryMonitorConfig.ui b/src/ui/configuration/BatteryMonitorConfig.ui index 564ec5503..0c008dc1a 100644 --- a/src/ui/configuration/BatteryMonitorConfig.ui +++ b/src/ui/configuration/BatteryMonitorConfig.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 745 + 494 @@ -29,7 +29,203 @@ false + + + + 10 + 70 + 141 + 51 + + + + + + + :/files/images/devices/BR-APMPWRDEAN-2.jpg + + + true + + + + + + 480 + 120 + 70 + 17 + + + + CheckBox + + + + + + 160 + 170 + 241 + 141 + + + + Calibration + + + + + + + + + + 1. Measured battery voltage: + + + + + + + 2. Battery voltage (Calc'ed): + + + + + + + 3. Voltage divider (Calc'ed): + + + + + + + 4. Amperes per volt: + + + + + + + + + + + false + + + + + + + false + + + + + + + false + + + + + + + false + + + + + + + + + + + + + 160 + 70 + 281 + 80 + + + + + + + + + Monitor + + + + + + + Sensor + + + + + + + APM Version + + + + + + + + + + + + + + + + + + + + + + + + 470 + 70 + 195 + 41 + + + + + + + Battery Capacity: + + + + + + + + + + mAh + + + + + - + + + -- 2.22.0