when github was adding a hash to the library download zip, there was confusion from beginners about needing to rename the unzipped folder before moving into the arduino ide. this library has been prepped (thijse) for the arduino library manager, which requires the library to be in the root directory. Having the library in the manager also removes the "beginner user hash" concern.
54 lines
1.4 KiB
C++
54 lines
1.4 KiB
C++
/********************************************************
|
|
* PID Adaptive Tuning Example
|
|
* One of the benefits of the PID library is that you can
|
|
* change the tuning parameters at any time. this can be
|
|
* helpful if we want the controller to be agressive at some
|
|
* times, and conservative at others. in the example below
|
|
* we set the controller to use Conservative Tuning Parameters
|
|
* when we're near setpoint and more agressive Tuning
|
|
* Parameters when we're farther away.
|
|
********************************************************/
|
|
|
|
#include <PID_v1.h>
|
|
|
|
//Define Variables we'll be connecting to
|
|
double Setpoint, Input, Output;
|
|
|
|
//Define the aggressive and conservative Tuning Parameters
|
|
double aggKp=4, aggKi=0.2, aggKd=1;
|
|
double consKp=1, consKi=0.05, consKd=0.25;
|
|
|
|
//Specify the links and initial tuning parameters
|
|
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
|
|
|
|
void setup()
|
|
{
|
|
//initialize the variables we're linked to
|
|
Input = analogRead(0);
|
|
Setpoint = 100;
|
|
|
|
//turn the PID on
|
|
myPID.SetMode(AUTOMATIC);
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
Input = analogRead(0);
|
|
|
|
double gap = abs(Setpoint-Input); //distance away from setpoint
|
|
if(gap<10)
|
|
{ //we're close to setpoint, use conservative tuning parameters
|
|
myPID.SetTunings(consKp, consKi, consKd);
|
|
}
|
|
else
|
|
{
|
|
//we're far from setpoint, use aggressive tuning parameters
|
|
myPID.SetTunings(aggKp, aggKi, aggKd);
|
|
}
|
|
|
|
myPID.Compute();
|
|
analogWrite(3,Output);
|
|
}
|
|
|
|
|