I am trying to make a toggle for switching between Arcade Drive and Tank drive. I wrote and tested this code but the only result I get is a switch between Tank to Arcade, not the other way back. I have such a complicated system because I believe that if I simply set a variable to be True or False, it won't compensate for if the driver holds on to the button. That's why I have a clause in there that checks if the button has been released.
If you find any issues, please reply!
Code:
void OperatorControl(void)
{
bool boolval = false;
bool toggle = true;
bool toggle2 = false;
feeder->Set(false);
firingMech->Set(true);
while (IsOperatorControl())
{
if(boolval){
//Arcade Drive
//Left Side
leftMiddleMotor -> SetSpeed(primaryController -> GetRawAxis(5) - primaryController -> GetRawAxis(4));
leftBottomMotor -> SetSpeed(primaryController -> GetRawAxis(5) - primaryController -> GetRawAxis(4));
//Right Side
rightTopMotor -> SetSpeed(-(primaryController -> GetRawAxis(5) + primaryController -> GetRawAxis(4)));
rightMiddleMotor -> SetSpeed(-(primaryController -> GetRawAxis(5) + primaryController -> GetRawAxis(4)));
rightBottomMotor -> SetSpeed(-(primaryController -> GetRawAxis(5) + primaryController -> GetRawAxis(4)));
if(!(secondaryController -> GetRawButton(6))){
toggle2 = true;
printf("Status is: \n");
}
if(secondaryController -> GetRawButton(6) && toggle2 == true){
boolval = false;
toggle2 = false;
toggle = true;
}
}
//Arcade - Tank Toggle Switch
if(secondaryController -> GetRawButton(6)){
boolval = true;
toggle = false;
}else if(toggle){
// Left Motor Drivetrain
if (primaryController -> GetRawAxis(2)){
leftMiddleMotor -> SetSpeed(primaryController -> GetRawAxis(2));
leftBottomMotor -> SetSpeed(primaryController -> GetRawAxis(2));
}else{
leftMiddleMotor -> SetSpeed(0.0);
leftBottomMotor -> SetSpeed(0.0);
}
//Right Motor Drivetrain
if (primaryController -> GetRawAxis(5)){
rightTopMotor -> SetSpeed(-(primaryController -> GetRawAxis(5)));
rightMiddleMotor -> SetSpeed(-(primaryController -> GetRawAxis(5)));
rightBottomMotor -> SetSpeed(-(primaryController -> GetRawAxis(5)));
}else{
rightTopMotor -> SetSpeed(0.0);
rightMiddleMotor -> SetSpeed(0.0);
rightBottomMotor -> SetSpeed(0.0);
} //Tank
}
// Compression
if (secondaryController -> GetRawButton(8)){
compressor -> Set(Relay::kForward);
}else{
compressor -> Set(Relay::kOff);
}
//Lifter
if (secondaryController -> GetRawAxis(2)){
leftLifterMotor -> SetSpeed(secondaryController -> GetRawAxis(2));
rightLifterMotor -> SetSpeed(-(secondaryController -> GetRawAxis(2)));
}else{
leftLifterMotor -> SetSpeed(0.0);
rightLifterMotor -> SetSpeed(0.0);
}
//Conveyer
//Conveyer go up
if (secondaryController -> GetRawButton(3)){
conveyer -> SetSpeed(1.0);
}else{
conveyer -> SetSpeed(0.0);
}
//Conveyer go down
if (secondaryController -> GetRawButton(2)){
conveyer -> SetSpeed(-1.0);
}else{
conveyer -> SetSpeed(0.0);
}
//Shooter Motor
if(secondaryController -> GetRawButton(5)){
shooterInner -> SetSpeed(-(secondaryController -> GetRawAxis(3)));
shooterOuter -> SetSpeed(-(secondaryController -> GetRawAxis(3)));
}else{
shooterInner -> SetSpeed(0.0);
shooterOuter -> SetSpeed(0.0);
}
//Shooter FIRE!!!!
if(secondaryController -> GetRawButton(1)){
firingMech -> Set(true);
}else{
firingMech -> Set(false);
}
//Arouser
//Arouser Up
if(secondaryController -> GetRawButton(11)){
feeder -> Set(true);
}
//Arouser Down
if(secondaryController -> GetRawButton(10)){
feeder -> Set(false);
}
}
Wait(0.05);
}