I tried making a toggle where in driver control, if you hit R1, it moves the cata to the “heading” of 55 degrees using a rotational sensor, and if you hit R1 again, it’ll move to the “heading” of -55 degrees. My plan was just to toggle between those 2 but when I coded it it just wasn’t doing anything. Does anyone have any ideas or any examples online I can use instead?
I’m not quite sure I understand. Could you send an example of your code?
Could you share code?
Anyway we do something similar with our intake (its not pros thou):
void IntakeBackwards(){
if (cooldown){ // Cooldown pressed too fast
return; // Return nothing...
}
if (isSpining && isSpiningReverse){ // If isSpining
/*
Since we are alreadying going reverse the user wants us to stop
*/
Intake.stop(coast); // Stop with coast
cooldown = true; // Engage cooldown
isSpining = false; // We are no longer spinning
wait(300,msec); // Wait for .3 seconds
cooldown = false; // Cooldown disabled
return; // Return to prevent other issues (Avoiding else is a good practice)
}
if(isSpining){ // If it is spinning forward the user wants us to spin reverse
cooldown = true; // Cooldown engaged
isSpiningReverse = true; // We are spinning reverse
Intake.spin(reverse,90,percent); // Spin reverse
task::sleep(300); // Wait 300 seconds for cooldown
cooldown = false; // Disable cooldown
return; // return to prevent the rest of code from running
}
//If we are not spinning the user also wants us to start spinning
cooldown = true; // Engage cooldown
isSpiningReverse = true; // We are going reverse
isSpining = true; // We are spinning
Intake.spin(reverse,90,percent); // Spin reverse
task::sleep(300);//Wait 300 seconds for cooldown
cooldown = false; // Disengage cooldown
}
void Shoot(){ // Shoot for the other direction
// Same idea
if(cooldown){
Controller1.rumble("......_...");
return;
}
if(isSpining && !isSpiningReverse){
Intake.stop(coast);
cooldown = true;
isSpining = false;
wait(300,msec);
cooldown = false;
return;
}
if(isSpining){
cooldown = true;
isSpiningReverse = false;
Intake.spin(vex::forward,90,percent);
task::sleep(300);
cooldown = false;
}
cooldown = true;
isSpiningReverse = false;
isSpining = true;
Intake.spin(vex::forward,90,percent);
task::sleep(300);
cooldown = false;
}
So if you used a bool to track which way the user wants its much easier to code.
This is an example of a toggle.
Seeing your code will be very helpful in fixing your specfic issue.
1 Like
Here is our code:
//bool for Cata Toggle
bool toggleL1 = false;
bool buttonL1Pressed = false;
//bool for Cata
bool buttonL1 = master.get_digital_new_press(pros::E_CONTROLLER_DIGITAL_L1);
//Cata code
if(buttonL1 && !buttonL1Pressed){
buttonL1Pressed = true;
toggleL1 = !toggleL1;
}
else if (!buttonL1){
buttonL1Pressed = false;
if(toggleL1){
Cata.move_relative(109, 100);
int x= Cata.get_position();
double Modular = x % 360;
int y= Rotational1.get_position();
int z= Modular-y;
while(z > 0.5){
Cata.move_relative(z, 100);
x= Cata.get_position();
Modular = x % 360;
y= Rotational1.get_position();
z= Modular-y ;
}
}
else if(toggleL1){
Cata.move_relative(-109, 100);
int x= Cata.get_position();
double Modular = x % 360;
int y= Rotational1.get_position();
int z= y-Modular;
while(z > 0.5){
Cata.move_relative(-z, 100);
x= Cata.get_position();
double Modular = x % 360;
y= Rotational1.get_position();
z= y-Modular ;
}
}
else{
Cata.move_velocity(0);
}
can you paste the entire code including the function?
We use a similar piece of code for our match loader
(silly geese is our controller)
bool toggle = 0;
void toggle_cata(){
if (silly_geese.get_digital_new_press(pros::E_CONTROLLER_DIGITAL_A))
{
if (cata_toggle)
{
function();
cata_toggle = 0;
} else {
other_function();
cata_toggle = 1;
}
}
}
if you call this function everytime you press R1 in a seprate task it should work
This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.