PID Library Brought in from the PID Arduino Library
Dependents: Basic_PID wheelchaircontrol wheelchaircontrolRosCom wheelchaircontrol ... more
Diff: PID.cpp
- Revision:
- 1:37c3ab46d475
- Parent:
- 0:58f3a6c65ad5
- Child:
- 2:60801ab3cbf9
--- a/PID.cpp Tue Aug 14 23:22:50 2018 +0000 +++ b/PID.cpp Tue Aug 28 23:24:01 2018 +0000 @@ -2,11 +2,12 @@ #include "mbed.h" PID::PID(double* Input, double* Output, double* Setpoint, double Kp, double Ki, double Kd, int POn, int ControllerDirection){ + PIDtimer.start(); + PIDtimer.reset(); myOutput = Output; myInput = Input; mySetpoint = Setpoint; - inAuto = false; - PIDtimer.start(); + inAuto = true; PID::SetOutputLimits(0, 1); //default output limit corresponds to //the arduino pwm limits SampleTime = .1; //default Controller Sample Time is 0.1 seconds @@ -15,7 +16,7 @@ PID::SetTunings(Kp, Ki, Kd, POn); lastTime = PIDtimer.read()-SampleTime; - printf("the values are %f, %f, %f, %f, %f, %f \r\n", *myOutput, *myInput, *mySetpoint, kp, ki, kd); + // printf("the values are %f, %f, %f, %f, %f, %f \r\n", *myOutput, *myInput, *mySetpoint, kp, ki, kd); } /* Compute() ********************************************************************** @@ -26,7 +27,6 @@ **********************************************************************************/ bool PID::Compute() { - printf("input %f output %f pOn %i Setpoint %f outmin %f outmax %f lastTime %f \r\n", *myInput, *myOutput, pOn, *mySetpoint, outMin, outMax, lastTime); if(!inAuto) return false; double now = PIDtimer.read(); double timeChange = (now - lastTime); @@ -37,10 +37,9 @@ double error = *mySetpoint - input; double dInput = (input - lastInput); outputSum+= (ki * error); - + /*Add Proportional on Measurement, if P_ON_M is specified*/ - if(!pOnE) outputSum-= kp * dInput; - + if(!pOnE) outputSum -= kp * dInput; if(outputSum > outMax) outputSum= outMax; else if(outputSum < outMin) outputSum= outMin; @@ -48,10 +47,8 @@ double output; if(pOnE) output = kp * error; else output = 0; - printf("output %f\r\n", output); /*Compute Rest of PID Output*/ output += outputSum - kd * dInput; - printf("output2 %f\r\n", output); if(output > outMax) output = outMax; else if(output < outMin) output = outMin; @@ -60,9 +57,14 @@ /*Remember some variables for next time*/ lastInput = input; lastTime = now; + printf("the values are %f, %f, %f, %f \r\n", *myOutput, *myInput, *mySetpoint, lastTime); + return true; } - else return false; + else + { + return false; + } } /* SetTunings(...)*************************************************************