double kp=10; // * (P)roportional Tuning Parameter
double ki=1; // * (I)ntegral Tuning Parameter
double kd=10; // * (D)erivative Tuning Parameter
double ITerm, lastInput;
unsigned long lastTime;
unsigned long SampleTime;
void iniz(){
SampleTime = 100;
lastTime = millis()-SampleTime;
}
int updatePid(float mySetpoint, float x){
init();
unsigned long now = millis();
unsigned long timeChange = (now - lastTime);
if(timeChange>=SampleTime)
{
/*Compute all the working error variables*/
float error = mySetpoint - x;
ITerm += ki*(error * (SampleTime/1000));
float dInput = (x - lastInput);
/*Compute PID Output*/
int output = (kp * error) + ITerm - (kd * dInput);
/*Remember some variables for next time*/
lastInput = x;
lastTime = now;
if(output>=255){output=255;}
if(output<=0) {output=0;}
return output;
}
else return -1;
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Enabling DMP... done.
Enabling interrupt detection... done.
DMP ready! Waiting for first data from MPU-6000...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
255
100
100
100
100
100
100
100
100
255
100
100
100
100
100
100
100
100
255
perchè ricade soltanto su questi due valori?
dovrebbe darmi sempre 0 (è fermo in equilibrio in verticale)
e 255 ai due estremi... ![]()