E' il pid che serve per controllare in pwm la velocità dei motori e bilanciare il robottino
[motori lego nxt--arduino uno--imu mpu6050]
/////////DEFINIZIONE VARIABILI
float x=0; //valore che arriva dalla imu
float mySetpoint = 81.9; //valore imu dal robot tenuto in equilibrio con la mano
double kp=10; // * (P)roportional Tuning Parameter
double ki=5; // * (I)ntegral Tuning Parameter
double kd=1; // * (D)erivative Tuning Parameter
double ITerm, lastInput;
unsigned long lastTime;
int SampleTime=100; //0.1 sec
lastTime = millis()-SampleTime;
int updatePid(float mySetpoint, float x){
unsigned long now = millis();
int 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;
}}
lastTime = millis()-SampleTime;
questa riga mi da errore:
copia:286: error: expected constructor, destructor, or type conversion before '=' token
int lastTime = millis()-SampleTime; ho corretto così ma solo a volte non mi da errore!! cosa sto facendo?
questa parte viene da PID_v1.
dove sbaglio!?
(riguardo l'errore sui valori sputati fuori sarà colpa dell windup?)