#include "BatteryMonitorConfig.h" #include 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"); ui.alertOnLowCheckBox->setVisible(false); 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())); } void BatteryMonitorConfig::activeUASSet(UASInterface *uas) { if (!uas) { return; } connect(uas,SIGNAL(batteryChanged(UASInterface*,double,double,double,int)),this,SLOT(batteryChanged(UASInterface*,double,double,double,int))); AP2ConfigWidget::activeUASSet(uas); } void BatteryMonitorConfig::calcDividerSet() { if (!m_uas) { QMessageBox::information(0,tr("Error"),tr("Please connect to a MAV before attempting to set configuration")); return; } 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->getParamManager()->setParameter(1,"VOLT_DIVIDER",newval); } void BatteryMonitorConfig::ampsPerVoltSet() { if (!m_uas) { QMessageBox::information(0,tr("Error"),tr("Please connect to a MAV before attempting to set configuration")); return; } 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->getParamManager()->setParameter(1,"AMPS_PER_VOLT",newval); } void BatteryMonitorConfig::batteryCapacitySet() { if (!m_uas) { QMessageBox::information(0,tr("Error"),tr("Please connect to a MAV before attempting to set configuration")); return; } 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->getParamManager()->setParameter(1,"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->getParamManager()->setParameter(1,"BATT_VOLT_PIN",-1); m_uas->getParamManager()->setParameter(1,"BATT_CURR_PIN",-1); m_uas->getParamManager()->setParameter(1,"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->getParamManager()->setParameter(1,"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->getParamManager()->setParameter(1,"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) { if (!m_uas) { QMessageBox::information(0,tr("Error"),tr("Please connect to a MAV before attempting to set configuration")); return; } if (index == 0) //APM1 { m_uas->getParamManager()->setParameter(1,"BATT_VOLT_PIN",0); m_uas->getParamManager()->setParameter(1,"BATT_CURR_PIN",1); } else if (index == 1) //APM2 { m_uas->getParamManager()->setParameter(1,"BATT_VOLT_PIN",1); m_uas->getParamManager()->setParameter(1,"BATT_CURR_PIN",2); } else if (index == 2) //APM2.5 { m_uas->getParamManager()->setParameter(1,"BATT_VOLT_PIN",13); m_uas->getParamManager()->setParameter(1,"BATT_CURR_PIN",12); } else if (index == 3) //PX4 { m_uas->getParamManager()->setParameter(1,"BATT_VOLT_PIN",100); m_uas->getParamManager()->setParameter(1,"BATT_CURR_PIN",101); m_uas->getParamManager()->setParameter(1,"VOLT_DIVIDER",1); ui.calcDividerLineEdit->setText("1"); } } BatteryMonitorConfig::~BatteryMonitorConfig() { } void BatteryMonitorConfig::batteryChanged(UASInterface* uas, double voltage, double current, double percent, int seconds) { ui.calcVoltsLineEdit->setText(QString::number(voltage,'f',2)); if (ui.measuredVoltsLineEdit->text() == "") { ui.measuredVoltsLineEdit->setText(ui.calcVoltsLineEdit->text()); } } 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 } }