예제 #1
0
        private void btn_add_points_Click(object sender, EventArgs e)
        {
            // get layout
            if (first_add)
            {
                delta_gap      = this.num_ref1.Size.Height + 6;
                last_loc_ref.X = this.num_ref1.Location.X;
                last_loc_ref.Y = this.num_ref1.Location.Y + delta_gap;

                first_add    = false;
                curr_numUpDn = this.num_ref1;
            }
            else
            {
                last_loc_ref.Y += delta_gap;
            }

            System.Windows.Forms.NumericUpDown num_ref_new = new System.Windows.Forms.NumericUpDown();
            float num_meas1, num_meas2;

            //
            num_ref_new.Location      = last_loc_ref;
            num_ref_new.Size          = this.num_ref1.Size;
            num_ref_new.Increment     = 0.05M;
            num_ref_new.DecimalPlaces = 2;

            num_meas1 = MainV2.comPort.MAV.cs.battery_voltage;
            num_meas2 = MainV2.comPort.MAV.cs.battery_voltage2;

            num_pair np_tmp = new num_pair((float)curr_numUpDn.Value, num_meas1, num_meas2);

            this.list_num.Add(np_tmp);

            this.Controls.Add(num_ref_new);
            curr_numUpDn = num_ref_new;
        }
예제 #2
0
        private void btn_volt_cali_Click(object sender, EventArgs e)
        {
            num_pair np_tmp = new num_pair((float)curr_numUpDn.Value, (float)MainV2.comPort.MAV.cs.battery_voltage, (float)MainV2.comPort.MAV.cs.battery_voltage2);

            this.list_num.Add(np_tmp);

            PointSet mainSet = new PointSet();

            int valid_data = 0;

            foreach (var num in this.list_num)
            {
                if (!(num.num_meas1.Equals(0) && num.num_meas2.Equals(0) && num.num_ref.Equals(0)))
                {
                    coordinates[valid_data].x = (double)(num.num_meas1);
                    coordinates[valid_data].y = (double)(num.num_ref);
                    valid_data++;
                }
            }

            for (int i = 0; (i < valid_data) && (i < 20); i++)
            {
                mainSet.Add(coordinates[i]);
            }

            StraightLine result = mainSet.FindApproximateSolution();

            if (Double.IsNaN(result.a) || Double.IsNaN(result.b))
            {
                MessageBox.Show("抱歉,校准值中有异常值,请检查后重新校准!", "校准值异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            int try_times = 0;

            for (try_times = 0; try_times < 5; try_times++)
            {
                // save horizon spd
                if (MainV2.comPort.setParam("BATT_VM", result.a))
                {
                    if (MainV2.comPort.setParam("BATT_V_OFS", result.b))
                    {
                        MessageBox.Show("恭喜,校准电压1成功!", "校准成功", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        break;
                    }
                }
            }

            PointSet mainSet2 = new PointSet();

            this.coordinates.Initialize();
            valid_data = 0;
            foreach (var num in this.list_num)
            {
                if (!(num.num_meas1.Equals(0) && num.num_meas2.Equals(0) && num.num_ref.Equals(0)))
                {
                    coordinates[valid_data].x = (double)(num.num_meas2);
                    coordinates[valid_data].y = (double)(num.num_ref);
                    valid_data++;
                }
            }

            for (int i = 0; (i < valid_data) && (i < 20); i++)
            {
                mainSet2.Add(coordinates[i]);
            }

            StraightLine result2 = mainSet2.FindApproximateSolution();

            if (Double.IsNaN(result2.a) || Double.IsNaN(result2.b))
            {
                MessageBox.Show("抱歉,校准值中有异常值,请检查后重新校准!", "校准值异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            try_times = 0;
            for (try_times = 0; try_times < 5; try_times++)
            {
                // save horizon spd
                if (MainV2.comPort.setParam("BATT2_VM", result2.a))
                {
                    if (MainV2.comPort.setParam("BATT2_V_OFS", result2.b))
                    {
                        MessageBox.Show("恭喜,校准电压2成功!", "校准成功", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        break;
                    }
                }
            }

            if (5 == try_times)
            {
                MessageBox.Show("抱歉,校准值保存到飞控失败,请尝试重新连接飞控后再次尝试!", "校准失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }