double kP = 0.1;
double kI = 0.1;
double kD = 0.1;
double turnkP = 0.1;
double turnkI = 0.1;
double turnkD = 0.1;
// autonomous settings
int desiredvalue = 0;
int desiredturnvalue = 0;
int error;
int preverror = 0;
int derivitive;
int totalerror = 0;
int turnerror;
int turnpreverror = 0;
int turnderivitive;
int turntotalerror = 0;
bool resetdrivesensors = false;
//varibles modified for use
bool enabledrivePID=true;
int drivePID(){
while(enabledrivePID){
if (resetdrivesensors){
resetdrivesensors = false;
EncoderL.setPosition(0,degrees);
EncoderR.setPosition(0,degrees);
}
//get the positions of all encoders
int leftmotorposition = EncoderL.position(degrees);
int rightmotorposition = EncoderR.position(degrees);
///////////////////////////////////////////////////////////
///// lateral movement pid
///////////////////////////////////////////////////////////
// get the average of the motors
int averageposition = (leftmotorposition + rightmotorposition)/2;
//potential
error = desiredvalue - averageposition;
//derivitive
derivitive = error - preverror;
//integral
totalerror += error;
int lateralmotorpower = error * kP + derivitive * kD + totalerror * kI;
////////////////////////////////////////////////////////////////////////
//turning movement pid
////////////////////////////////////////////////////////////////////////
// get the average of the motors
int turndifference =leftmotorposition - rightmotorposition;
//potential
turnerror = turndifference - desiredturnvalue;
//derivitive
turnderivitive = turnerror - turnpreverror;
//integral
turntotalerror += turnerror;
int turnmotorpower = turnerror * turnkP + turnderivitive * turnkD + turntotalerror * turnkI;
frontleft.spin(forward, turnmotorpower, velocityUnits::pct);
backleft.spin(forward, turnmotorpower, velocityUnits::pct);
frontright.spin(forward, turnmotorpower, velocityUnits::pct);
backright.spin(forward, turnmotorpower, velocityUnits::pct);
////////////////////////////////////////////////////////////////////////
frontleft.spin(forward, lateralmotorpower, velocityUnits::pct);
backleft.spin(forward, lateralmotorpower, velocityUnits::pct);
frontright.spin(forward, lateralmotorpower, velocityUnits::pct);
backright.spin(forward, lateralmotorpower, velocityUnits::pct);
preverror = error;
turnpreverror = turnerror;
vex::task::sleep(20);
}
return 1;
}
I know its towards the end of this season but I just added 3 wire encoders to my robot, because I could not get the ones built into the V5 motors to work correctly. I am super new to this and I was wondering if anyone would be able to help me because what I have now doesn’t stop my robot at all