/// <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();
        }
Example #2
0
        /// <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)
 {
 }
        /// <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)
        {

        }