/// <summary> /// Construct a new analog feedback servo from an analog pin and a speed controller /// </summary> /// <param name="analogIn">The analog in pin to use for position feedback</param> /// <param name="Controller">The speed controller to use to control the motor</param> public AnalogFeedbackServo(Pin analogIn, MotorSpeedController Controller) { this.analogIn = analogIn; this.controller = Controller; analogIn.Mode = PinMode.AnalogInput; isRunning = true; controlLoopTask = new Task(async() => { while (isRunning) { var oldPosition = ActualPosition; var newPosition = analogIn.AnalogValue; ActualPosition = newPosition; var error = GoalPosition - ActualPosition; if (Math.Abs(error) > ErrorThreshold) controller.Speed = Utilities.Constrain(K * error, -1.0, 1.0); else { controller.Speed = 0; //Debug.WriteLine("goal achieved"); } await Task.Delay(10); } }); controlLoopTask.Start(); }
/// <summary> /// Construct a new analog feedback servo from an analog pin and a speed controller /// </summary> /// <param name="analogIn">The analog in pin to use for position feedback</param> /// <param name="Controller">The speed controller to use to control the motor</param> public AnalogFeedbackServo(Pin analogIn, MotorSpeedController Controller) { this.analogIn = analogIn; controller = Controller; analogIn.Mode = PinMode.AnalogInput; isRunning = true; controlLoopTask = new Task(async() => { while (isRunning) { var oldPosition = ActualPosition; var newPosition = analogIn.AnalogValue; ActualPosition = newPosition; var error = GoalPosition - ActualPosition; if (Math.Abs(error) > ErrorThreshold) { controller.Speed = (K * error).Constrain(-1.0, 1.0); } else { controller.Speed = 0; } await Task.Delay(10).ConfigureAwait(false); } }); controlLoopTask.Start(); }
/// <summary> /// Construct a motorized fader from an analog-in pin and a speed controller /// </summary> /// <param name="analogIn">The pin to use for analog-in</param> /// <param name="Controller">The controller to use to drive the fader</param> public MotorizedFader(Pin analogIn, MotorSpeedController Controller) : base(analogIn, Controller) { }