public TemperatureControlService(IOutputHelper helper, ITemperatureSensor sensor, Settings systemSettings)
        {
            SystemSettings = systemSettings;

            _outputHelper = helper;

            _thermistor = sensor;

            _pid = new PIDController(PinManagement.currentTemperatureSensor, _output, PinManagement.setTemperature, SystemSettings.PIDKp, SystemSettings.PIDKi, SystemSettings.PIDKd, PIDController.PID_Direction.DIRECT);

            _pid.SetOutputLimits(0, 100);

            _pid.SampleTime = _windowSize;

            _pid.Mode = PIDController.PID_Mode.AUTOMATIC;

            _windowStartTime = DateTime.Now.Ticks;

            _pidAutoTune = new PIDAutoTune();

            if (_tuning)
            {
                _tuning = false;

                ChangeAutoTune();

                _tuning = true;
            }
        }
        /// <summary>
        /// Default constructor
        /// </summary>
        /// <param name="input"></param>
        /// <param name="output"></param>
        /// <param name="setpoint"></param>
        /// <param name="kp"></param>
        /// <param name="ki"></param>
        /// <param name="kd"></param>
        /// <param name="controllerDirection"></param>
        public PIDController(double input, double output, double setpoint, double kp, double ki, double kd, PIDController.PID_Direction controllerDirection)
        {
            SetOutputLimits(0, 255);

            SampleTime = 1000;

            Direction = controllerDirection;

            SetTunings(kp, ki, kd);

            _lastTime = DateTime.Now.Ticks - SampleTime;

            _inAutoMode = false;

            Input = input;

            Output = output;

            SetPoint = setpoint;
        }