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; }
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); } }