Use enums instead of defines
This commit is contained in:
parent
fb095d8cfc
commit
be0c8e1a5e
@ -18,7 +18,7 @@
|
|||||||
* reliable defaults, so we need to have the user set them.
|
* reliable defaults, so we need to have the user set them.
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
PID::PID(double* Input, double* Output, double* Setpoint,
|
PID::PID(double* Input, double* Output, double* Setpoint,
|
||||||
double Kp, double Ki, double Kd, int ControllerDirection)
|
double Kp, double Ki, double Kd, direction_t ControllerDirection)
|
||||||
{
|
{
|
||||||
|
|
||||||
myOutput = Output;
|
myOutput = Output;
|
||||||
@ -139,11 +139,11 @@ void PID::SetOutputLimits(double Min, double Max)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* SetMode(...)****************************************************************
|
/* SetMode(...)****************************************************************
|
||||||
* Allows the controller Mode to be set to manual (0) or Automatic (non-zero)
|
* Allows the controller Mode to be set to MANUAL (0) or AUTOMATIC (1)
|
||||||
* when the transition from manual to auto occurs, the controller is
|
* when the transition from manual to auto occurs, the controller is
|
||||||
* automatically initialized
|
* automatically initialized
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void PID::SetMode(int Mode)
|
void PID::SetMode(mode_t Mode)
|
||||||
{
|
{
|
||||||
bool newAuto = (Mode == AUTOMATIC);
|
bool newAuto = (Mode == AUTOMATIC);
|
||||||
if(newAuto == !inAuto)
|
if(newAuto == !inAuto)
|
||||||
@ -171,7 +171,7 @@ void PID::Initialize()
|
|||||||
* know which one, because otherwise we may increase the output when we should
|
* know which one, because otherwise we may increase the output when we should
|
||||||
* be decreasing. This is called from the constructor.
|
* be decreasing. This is called from the constructor.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void PID::SetControllerDirection(int Direction)
|
void PID::SetControllerDirection(direction_t Direction)
|
||||||
{
|
{
|
||||||
if(inAuto && Direction !=controllerDirection)
|
if(inAuto && Direction !=controllerDirection)
|
||||||
{
|
{
|
||||||
|
17
PID_v1.h
17
PID_v1.h
@ -8,17 +8,16 @@ class PID
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//Constants used in some of the functions below
|
//Parameter types for some of the functions below
|
||||||
#define AUTOMATIC 1
|
enum mode_t { AUTOMATIC = 1, MANUAL = 0 };
|
||||||
#define MANUAL 0
|
enum direction_t { DIRECT = 0, REVERSE = 1 };
|
||||||
#define DIRECT 0
|
|
||||||
#define REVERSE 1
|
|
||||||
|
|
||||||
//commonly used functions **************************************************************************
|
//commonly used functions **************************************************************************
|
||||||
PID(double*, double*, double*, // * constructor. links the PID to the Input, Output, and
|
PID(double*, double*, double*, // * constructor. links the PID to the Input, Output, and
|
||||||
double, double, double, int); // Setpoint. Initial tuning parameters are also set here
|
double, double, double, // Setpoint. Initial tuning parameters are also set here
|
||||||
|
direction_t);
|
||||||
|
|
||||||
void SetMode(int Mode); // * sets PID to either Manual (0) or Auto (non-0)
|
void SetMode(mode_t); // * sets PID to either MANUAL (0) or AUTOMATIC (1)
|
||||||
|
|
||||||
bool Compute(); // * performs the PID calculation. it should be
|
bool Compute(); // * performs the PID calculation. it should be
|
||||||
// called every time loop() cycles. ON/OFF and
|
// called every time loop() cycles. ON/OFF and
|
||||||
@ -35,8 +34,8 @@ class PID
|
|||||||
void SetTunings(double, double, // * While most users will set the tunings once in the
|
void SetTunings(double, double, // * While most users will set the tunings once in the
|
||||||
double); // constructor, this function gives the user the option
|
double); // constructor, this function gives the user the option
|
||||||
// of changing tunings during runtime for Adaptive control
|
// of changing tunings during runtime for Adaptive control
|
||||||
void SetControllerDirection(int); // * Sets the Direction, or "Action" of the controller. DIRECT
|
void SetControllerDirection( // * Sets the Direction, or "Action" of the controller. DIRECT
|
||||||
// means the output will increase when error is positive. REVERSE
|
direction_t); // means the output will increase when error is positive. REVERSE
|
||||||
// means the opposite. it's very unlikely that this will be needed
|
// means the opposite. it's very unlikely that this will be needed
|
||||||
// once it is set in the constructor.
|
// once it is set in the constructor.
|
||||||
void SetSampleTime(int); // * sets the frequency, in Milliseconds, with which
|
void SetSampleTime(int); // * sets the frequency, in Milliseconds, with which
|
||||||
|
@ -22,7 +22,7 @@ double aggKp=4, aggKi=0.2, aggKd=1;
|
|||||||
double consKp=1, consKi=0.05, consKd=0.25;
|
double consKp=1, consKi=0.05, consKd=0.25;
|
||||||
|
|
||||||
//Specify the links and initial tuning parameters
|
//Specify the links and initial tuning parameters
|
||||||
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
|
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, PID::DIRECT);
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
@ -31,7 +31,7 @@ void setup()
|
|||||||
Setpoint = 100;
|
Setpoint = 100;
|
||||||
|
|
||||||
//turn the PID on
|
//turn the PID on
|
||||||
myPID.SetMode(AUTOMATIC);
|
myPID.SetMode(PID::AUTOMATIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
|
@ -13,7 +13,7 @@ double Setpoint, Input, Output;
|
|||||||
|
|
||||||
//Specify the links and initial tuning parameters
|
//Specify the links and initial tuning parameters
|
||||||
double Kp=2, Ki=5, Kd=1;
|
double Kp=2, Ki=5, Kd=1;
|
||||||
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
|
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, PID::DIRECT);
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
@ -22,7 +22,7 @@ void setup()
|
|||||||
Setpoint = 100;
|
Setpoint = 100;
|
||||||
|
|
||||||
//turn the PID on
|
//turn the PID on
|
||||||
myPID.SetMode(AUTOMATIC);
|
myPID.SetMode(PID::AUTOMATIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
|
@ -24,7 +24,7 @@ double Setpoint, Input, Output;
|
|||||||
|
|
||||||
//Specify the links and initial tuning parameters
|
//Specify the links and initial tuning parameters
|
||||||
double Kp=2, Ki=5, Kd=1;
|
double Kp=2, Ki=5, Kd=1;
|
||||||
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
|
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, PID::DIRECT);
|
||||||
|
|
||||||
int WindowSize = 5000;
|
int WindowSize = 5000;
|
||||||
unsigned long windowStartTime;
|
unsigned long windowStartTime;
|
||||||
@ -40,7 +40,7 @@ void setup()
|
|||||||
myPID.SetOutputLimits(0, WindowSize);
|
myPID.SetOutputLimits(0, WindowSize);
|
||||||
|
|
||||||
//turn the PID on
|
//turn the PID on
|
||||||
myPID.SetMode(AUTOMATIC);
|
myPID.SetMode(PID::AUTOMATIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
|
Loading…
Reference in New Issue
Block a user