diff --git a/PID_v1.cpp b/PID_v1.cpp index 7bba81c..e8c0ae2 100644 --- a/PID_v1.cpp +++ b/PID_v1.cpp @@ -59,8 +59,11 @@ bool PID::Compute() else if(ITerm < outMin) ITerm= outMin; double dInput = (input - lastInput); - /*Compute PID Output*/ - double output = kp * error + ITerm- kd * dInput; + /*Compute PID Output and store last values*/ + lastPTerm = kp * error; + lastITerm = ITerm; + lastDTerm = -kd * dInput; + double output = lastPTerm + lastITerm + lastDTerm; if(output > outMax) output = outMax; else if(output < outMin) output = outMin; @@ -192,3 +195,7 @@ double PID::GetKi(){ return dispKi;} double PID::GetKd(){ return dispKd;} int PID::GetMode(){ return inAuto ? AUTOMATIC : MANUAL;} int PID::GetDirection(){ return controllerDirection;} + +double PID::GetLastPTerm() { return lastPTerm; } +double PID::GetLastITerm() { return lastITerm; } +double PID::GetLastDTerm() { return lastDTerm; } diff --git a/PID_v1.h b/PID_v1.h index 5000738..abca0c9 100644 --- a/PID_v1.h +++ b/PID_v1.h @@ -51,6 +51,10 @@ class PID int GetMode(); // inside the PID. int GetDirection(); // + double GetLastPTerm(); + double GetLastITerm(); + double GetLastDTerm(); + private: void Initialize(); @@ -72,6 +76,8 @@ class PID unsigned long lastTime; double ITerm, lastInput; + double lastPTerm, lastITerm, lastDTerm; // last P/I/D terms calculated + unsigned long SampleTime; double outMin, outMax; bool inAuto;