using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AutomaticController { public class PIDController : IAutomaticController { public double Kp { get; set; } public double Ki { get; set; } public double Kd { get; set; } private double _prevError; private double _integralError; public PIDController(double kp, double ki, double kd) { Kp = kp; Ki = ki; Kd = kd; _prevError = 0; _integralError = 0; } public double Compute(double setpoint, double processVariable) { double error = setpoint - processVariable; _integralError += error; double derivative = error - _prevError; double output = Kp * error + Ki * _integralError + Kd * derivative; _prevError = error; return output; } } }