Controllo PID

    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... :frowning: