mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 14:38:30 -04:00
90ccb6f3ef
add tracker location option. fix current sensor screen add more right click flight planner options. make some connecting error messages more detailed. add partial microdrones protocol output
365 lines
12 KiB
C#
365 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using ArdupilotMega.Controls.BackstageView;
|
|
using ArdupilotMega.Controls;
|
|
|
|
namespace ArdupilotMega.GCSViews.ConfigurationView
|
|
{
|
|
public partial class ConfigBatteryMonitoring : UserControl, IActivate, IDeactivate
|
|
{
|
|
bool startup = false;
|
|
|
|
public ConfigBatteryMonitoring()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void CHK_enablebattmon_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (startup)
|
|
return;
|
|
try
|
|
{
|
|
if (((CheckBox)sender).Checked == false)
|
|
{
|
|
CMB_batmontype.SelectedIndex = 0;
|
|
}
|
|
else
|
|
{
|
|
if (CMB_batmontype.SelectedIndex <= 0)
|
|
CMB_batmontype.SelectedIndex = 1;
|
|
}
|
|
}
|
|
catch { CustomMessageBox.Show("Set BATT_MONITOR Failed"); }
|
|
}
|
|
private void TXT_battcapacity_Validating(object sender, CancelEventArgs e)
|
|
{
|
|
float ans = 0;
|
|
e.Cancel = !float.TryParse(TXT_battcapacity.Text, out ans);
|
|
}
|
|
private void TXT_battcapacity_Validated(object sender, EventArgs e)
|
|
{
|
|
if (startup || ((TextBox)sender).Enabled == false)
|
|
return;
|
|
try
|
|
{
|
|
if (MainV2.comPort.param["BATT_CAPACITY"] == null)
|
|
{
|
|
CustomMessageBox.Show("Not Available");
|
|
}
|
|
else
|
|
{
|
|
MainV2.comPort.setParam("BATT_CAPACITY", float.Parse(TXT_battcapacity.Text));
|
|
}
|
|
}
|
|
catch { CustomMessageBox.Show("Set BATT_CAPACITY Failed"); }
|
|
}
|
|
private void CMB_batmontype_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (startup)
|
|
return;
|
|
try
|
|
{
|
|
if (MainV2.comPort.param["BATT_MONITOR"] == null)
|
|
{
|
|
CustomMessageBox.Show("Not Available");
|
|
}
|
|
else
|
|
{
|
|
int selection = int.Parse(CMB_batmontype.Text.Substring(0, 1));
|
|
|
|
CMB_batmonsensortype.Enabled = true;
|
|
|
|
TXT_voltage.Enabled = false;
|
|
|
|
if (selection == 0)
|
|
{
|
|
CMB_batmonsensortype.Enabled = false;
|
|
groupBox4.Enabled = false;
|
|
}
|
|
else if (selection == 4)
|
|
{
|
|
CMB_batmonsensortype.Enabled = true;
|
|
groupBox4.Enabled = true;
|
|
TXT_ampspervolt.Enabled = true;
|
|
}
|
|
else if (selection == 3)
|
|
{
|
|
groupBox4.Enabled = true;
|
|
CMB_batmonsensortype.Enabled = false;
|
|
TXT_ampspervolt.Enabled = false;
|
|
TXT_inputvoltage.Enabled = true;
|
|
TXT_measuredvoltage.Enabled = true;
|
|
TXT_divider.Enabled = true;
|
|
}
|
|
|
|
MainV2.comPort.setParam("BATT_MONITOR", selection);
|
|
}
|
|
}
|
|
catch { CustomMessageBox.Show("Set BATT_MONITOR Failed"); }
|
|
}
|
|
private void TXT_inputvoltage_Validating(object sender, CancelEventArgs e)
|
|
{
|
|
float ans = 0;
|
|
e.Cancel = !float.TryParse(TXT_inputvoltage.Text, out ans);
|
|
}
|
|
private void TXT_inputvoltage_Validated(object sender, EventArgs e)
|
|
{
|
|
if (startup || ((TextBox)sender).Enabled == false)
|
|
return;
|
|
try
|
|
{
|
|
if (MainV2.comPort.param["INPUT_VOLTS"] == null)
|
|
{
|
|
CustomMessageBox.Show("Not Available");
|
|
}
|
|
else
|
|
{
|
|
MainV2.comPort.setParam("INPUT_VOLTS", float.Parse(TXT_inputvoltage.Text));
|
|
}
|
|
}
|
|
catch { CustomMessageBox.Show("Set INPUT_VOLTS Failed"); }
|
|
}
|
|
private void TXT_measuredvoltage_Validating(object sender, CancelEventArgs e)
|
|
{
|
|
float ans = 0;
|
|
e.Cancel = !float.TryParse(TXT_measuredvoltage.Text, out ans);
|
|
}
|
|
private void TXT_measuredvoltage_Validated(object sender, EventArgs e)
|
|
{
|
|
if (startup || ((TextBox)sender).Enabled == false)
|
|
return;
|
|
try
|
|
{
|
|
float measuredvoltage = float.Parse(TXT_measuredvoltage.Text);
|
|
float voltage = float.Parse(TXT_voltage.Text);
|
|
float divider = float.Parse(TXT_divider.Text);
|
|
if (voltage == 0)
|
|
return;
|
|
float new_divider = (measuredvoltage * divider) / voltage;
|
|
TXT_divider.Text = new_divider.ToString();
|
|
}
|
|
catch { CustomMessageBox.Show("Invalid number entered"); return; }
|
|
|
|
try
|
|
{
|
|
if (MainV2.comPort.param["VOLT_DIVIDER"] == null)
|
|
{
|
|
CustomMessageBox.Show("Not Available");
|
|
}
|
|
else
|
|
{
|
|
MainV2.comPort.setParam("VOLT_DIVIDER", float.Parse(TXT_divider.Text));
|
|
}
|
|
}
|
|
catch { CustomMessageBox.Show("Set VOLT_DIVIDER Failed"); }
|
|
}
|
|
private void TXT_divider_Validating(object sender, CancelEventArgs e)
|
|
{
|
|
float ans = 0;
|
|
e.Cancel = !float.TryParse(TXT_divider.Text, out ans);
|
|
}
|
|
private void TXT_divider_Validated(object sender, EventArgs e)
|
|
{
|
|
if (startup || ((TextBox)sender).Enabled == false)
|
|
return;
|
|
try
|
|
{
|
|
if (MainV2.comPort.param["VOLT_DIVIDER"] == null)
|
|
{
|
|
CustomMessageBox.Show("Not Available");
|
|
}
|
|
else
|
|
{
|
|
MainV2.comPort.setParam("VOLT_DIVIDER", float.Parse(TXT_divider.Text));
|
|
}
|
|
}
|
|
catch { CustomMessageBox.Show("Set VOLT_DIVIDER Failed"); }
|
|
}
|
|
private void TXT_ampspervolt_Validating(object sender, CancelEventArgs e)
|
|
{
|
|
float ans = 0;
|
|
e.Cancel = !float.TryParse(TXT_ampspervolt.Text, out ans);
|
|
}
|
|
private void TXT_ampspervolt_Validated(object sender, EventArgs e)
|
|
{
|
|
if (startup || ((TextBox)sender).Enabled == false)
|
|
return;
|
|
try
|
|
{
|
|
if (MainV2.comPort.param["AMP_PER_VOLT"] == null)
|
|
{
|
|
CustomMessageBox.Show("Not Available");
|
|
}
|
|
else
|
|
{
|
|
MainV2.comPort.setParam("AMP_PER_VOLT", float.Parse(TXT_ampspervolt.Text));
|
|
}
|
|
}
|
|
catch { CustomMessageBox.Show("Set AMP_PER_VOLT Failed"); }
|
|
}
|
|
|
|
private void CMB_batmonsensortype_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
int selection = int.Parse(CMB_batmonsensortype.Text.Substring(0, 1));
|
|
|
|
|
|
if (selection == 1) // atto 45
|
|
{
|
|
float maxvolt = 13.6f;
|
|
float maxamps = 44.7f;
|
|
float mvpervolt = 242.3f;
|
|
float mvperamp = 73.20f;
|
|
|
|
// ~ 3.295v
|
|
float topvolt = (maxvolt * mvpervolt) / 1000;
|
|
// ~ 3.294v
|
|
float topamps = (maxamps * mvperamp) / 1000;
|
|
|
|
TXT_divider.Text = (maxvolt / topvolt).ToString();
|
|
TXT_ampspervolt.Text = (maxamps / topamps).ToString();
|
|
}
|
|
else if (selection == 2) // atto 90
|
|
{
|
|
float maxvolt = 50f;
|
|
float maxamps = 89.4f;
|
|
float mvpervolt = 63.69f;
|
|
float mvperamp = 36.60f;
|
|
|
|
float topvolt = (maxvolt * mvpervolt) / 1000;
|
|
float topamps = (maxamps * mvperamp) / 1000;
|
|
|
|
TXT_divider.Text = (maxvolt / topvolt).ToString();
|
|
TXT_ampspervolt.Text = (maxamps / topamps).ToString();
|
|
}
|
|
else if (selection == 3) // atto 180
|
|
{
|
|
float maxvolt = 50f;
|
|
float maxamps = 178.8f;
|
|
float mvpervolt = 63.69f;
|
|
float mvperamp = 18.30f;
|
|
|
|
float topvolt = (maxvolt * mvpervolt) / 1000;
|
|
float topamps = (maxamps * mvperamp) / 1000;
|
|
|
|
TXT_divider.Text = (maxvolt / topvolt).ToString();
|
|
TXT_ampspervolt.Text = (maxamps / topamps).ToString();
|
|
}
|
|
|
|
// enable to update
|
|
TXT_divider.Enabled = true;
|
|
TXT_ampspervolt.Enabled = true;
|
|
TXT_measuredvoltage.Enabled = true;
|
|
TXT_inputvoltage.Enabled = true;
|
|
|
|
// update
|
|
TXT_ampspervolt_Validated(TXT_ampspervolt, null);
|
|
|
|
TXT_divider_Validated(TXT_divider, null);
|
|
|
|
// disable
|
|
TXT_divider.Enabled = false;
|
|
TXT_ampspervolt.Enabled = false;
|
|
TXT_measuredvoltage.Enabled = false;
|
|
|
|
//reenable if needed
|
|
if (selection == 0)
|
|
{
|
|
TXT_divider.Enabled = true;
|
|
TXT_ampspervolt.Enabled = true;
|
|
TXT_measuredvoltage.Enabled = true;
|
|
TXT_inputvoltage.Enabled = true;
|
|
}
|
|
}
|
|
|
|
public void Deactivate()
|
|
{
|
|
timer1.Stop();
|
|
}
|
|
|
|
public void Activate()
|
|
{
|
|
startup = true;
|
|
bool not_supported = false;
|
|
if (MainV2.comPort.param["BATT_MONITOR"] != null)
|
|
{
|
|
if (MainV2.comPort.param["BATT_MONITOR"].ToString() != "0.0")
|
|
{
|
|
CMB_batmontype.SelectedIndex = getIndex(CMB_batmontype, (int)float.Parse(MainV2.comPort.param["BATT_MONITOR"].ToString()));
|
|
}
|
|
}
|
|
|
|
if (MainV2.comPort.param["BATT_CAPACITY"] != null)
|
|
TXT_battcapacity.Text = MainV2.comPort.param["BATT_CAPACITY"].ToString();
|
|
if (MainV2.comPort.param["INPUT_VOLTS"] != null)
|
|
TXT_inputvoltage.Text = MainV2.comPort.param["INPUT_VOLTS"].ToString();
|
|
else
|
|
not_supported = true;
|
|
TXT_voltage.Text = MainV2.cs.battery_voltage.ToString();
|
|
TXT_measuredvoltage.Text = TXT_voltage.Text;
|
|
if (MainV2.comPort.param["VOLT_DIVIDER"] != null)
|
|
TXT_divider.Text = MainV2.comPort.param["VOLT_DIVIDER"].ToString();
|
|
else
|
|
not_supported = true;
|
|
if (MainV2.comPort.param["AMP_PER_VOLT"] != null)
|
|
TXT_ampspervolt.Text = MainV2.comPort.param["AMP_PER_VOLT"].ToString();
|
|
else
|
|
not_supported = true;
|
|
if (not_supported)
|
|
{
|
|
TXT_inputvoltage.Enabled = false;
|
|
TXT_measuredvoltage.Enabled = false;
|
|
TXT_divider.Enabled = false;
|
|
TXT_ampspervolt.Enabled = false;
|
|
}
|
|
|
|
// ignore language re . vs ,
|
|
|
|
if (TXT_ampspervolt.Text == (13.6612).ToString())
|
|
{
|
|
CMB_batmonsensortype.SelectedIndex = 1;
|
|
}
|
|
else if (TXT_ampspervolt.Text == (27.3224).ToString())
|
|
{
|
|
CMB_batmonsensortype.SelectedIndex = 2;
|
|
}
|
|
else if (TXT_ampspervolt.Text == (54.64481).ToString())
|
|
{
|
|
CMB_batmonsensortype.SelectedIndex = 3;
|
|
}
|
|
else
|
|
{
|
|
CMB_batmonsensortype.SelectedIndex = 0;
|
|
}
|
|
|
|
startup = false;
|
|
|
|
timer1.Start();
|
|
}
|
|
|
|
int getIndex(ComboBox ctl, int no)
|
|
{
|
|
foreach (var item in ctl.Items)
|
|
{
|
|
int ans = int.Parse(item.ToString().Substring(0, 1));
|
|
|
|
if (ans == no)
|
|
return ctl.Items.IndexOf(item);
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
private void timer1_Tick(object sender, EventArgs e)
|
|
{
|
|
TXT_voltage.Text = MainV2.cs.battery_voltage.ToString();
|
|
}
|
|
}
|
|
}
|