public static StepperMotor CreateStepperMotorControlWithAbsolutePositionSensing
        (
            AnalogSignal goToPositionSignal,
            AnalogSignal absolutePositionSensingSignal,
            Range minPositionRange,
            Range maxPositionRange,
            int numStepsInTravelRange,
            AnalogSignal outputLine
        )
        {
            var stepper = new StepperMotor
            {
                GoToPositionSignal      = goToPositionSignal,
                NumStepsInRangeOfTravel = numStepsInTravelRange
            };
            var minPositionReachedRE = new RangeEvaluator {
                Range = minPositionRange, In = goToPositionSignal
            };

            stepper.MinPositionReachedSignal = minPositionReachedRE.Out;
            var maxPositionReachedRE = new RangeEvaluator {
                In = goToPositionSignal
            };

            stepper.MaxPositionReachedSignal = maxPositionReachedRE.Out;
            stepper.PhysicalOutput           = outputLine;
            return(stepper);
        }
        public static PositionableMotorWithFeedback CreateServoMechanism
        (
            AnalogSignal goToPositionSignal,
            AnalogSignal absolutePositionSensingSignal,
            Range minPositionRange,
            Range maxPositionRange,
            AnalogSignal outputLine
        )
        {
            var motor = new PositionableMotorWithFeedback {
                GoToPositionSignal = goToPositionSignal
            };
            var minPositionReachedRE = new RangeEvaluator {
                Range = minPositionRange, In = goToPositionSignal
            };

            motor.MinPositionReachedSignal = minPositionReachedRE.Out;
            var maxPositionReachedRE = new RangeEvaluator {
                In = goToPositionSignal
            };

            motor.MaxPositionReachedSignal = maxPositionReachedRE.Out;
            motor.PhysicalOutput           = outputLine;
            return(motor);
        }