Hello, my PID code is not working currently and I have no idea why. I have commented out the Integral for the time being but it didn’t fix anything, the drivebase just doesn’t stable it goes forever.
bool pidswt=false;
float errorf=0;
int motoravg=0;
double kpf = 0.55;
double kIf = 0.005;
double kdf = 0.05;
float integral=0;
float spdp = 0;
float derivative=0;
float preverrorf=0;
void forwardPID(int dst){
pidswt=true;
lmotors.resetPosition();
rmotors.resetPosition();
wait(1,msec);
while(pidswt){
Controller1.Screen.clearScreen();
Controller1.Screen.setCursor(5, 5);
wait(1,msec);
Controller1.Screen.print(errorf);
motoravg=(lmotors.position(degrees)+rmotors.position(degrees))/2;
errorf=dst-motoravg;
integral=integral+errorf;
if(integral>1000){
integral=0;
}
//integral max value above.
if(errorf<=0){
integral=0;
}
derivative=errorf-preverrorf;
preverrorf=errorf;
spdp=((errorf*kpf)+(derivative*kdf))/3;
//spdp=((errorf*kpf)+(integral*kIf)+(derivative*kdf))/2;
br.spin(reverse, spdp, pct),
fr.spin(reverse, spdp, pct),
rmid.spin(forward, spdp, pct),
bl.spin(reverse, spdp, pct),
fl.spin(reverse, spdp, pct),
lmid.spin(forward, spdp, pct);
if(errorf<6 && errorf>-6){
wait(5,msec);
fullstop();
pidswt=false;
}
wait(15,msec);
}
}