private void sliderTimer_Tick(object sender, EventArgs e) { if (activeServo > 0) { sliderTimer.Stop(); double dblAngle = Math.Round(sliderActiveAngle.Value); byte angle = (byte)dblAngle; byte oldAngle = servo[activeServo].angle; // if (angle == oldAngle) return; double diff = (byte)Math.Abs(angle - oldAngle); byte time = (byte)(Math.Round(40.0 * diff / CONST.SERVO.MAX_ANGLE)); // 40 ~ 1s, 1s for 240 angle UBT.MoveServo((byte)activeServo, angle, time); int TimeMs = time * 25 + 100; // add extra 100ms, seeem still not work, sometimes command cannot be executed for fast change. servoEndTicks = DateTime.Now.Ticks + TimeMs * TimeSpan.TicksPerMillisecond; } }
private void UpdateAngle() { if (activeServo > 0) { string sAngle = tbAngle.Text.Trim(); int angle; if (!int.TryParse(sAngle, out angle)) { return; } if ((angle < 0) || (angle > 240)) { UpdateInfo(string.Format("Invalid angle: {0}", angle)); } sliderActiveAngle.Value = angle; UBT.MoveServo((byte)activeServo, (byte)angle, 0); } }
private void sliderTimer_Tick(object sender, EventArgs e) { sliderTimer.Stop(); double dblAngle = Math.Round(sliderActiveAngle.Value); byte angle = (byte)dblAngle; UBT.MoveServo((byte)activeServo, angle, 0); if (sliderMode > 0) { // extra one time after stop if (sliderMode == 1) { sliderMode = 0; } sliderTimer.Start(); } }