Toggle When Pressed Option

First year doing Java and I don’t have a robot yet to test on so I was wondering about the toggleWhenPressed option.

Does it simply just switch between the execute and end in whatever command its mapped to each time the same button is pressed?

Ex. Is this the correct usage?

OI

joystickButton1.toggleWhenPressed(new FireSolenoid());

FireSolenoid


protected void execute() {
Robot.shooter.pistonUp();
}

protected void end() {
Robot.shooter.pistonDown();
}

Will this just switch between pistonUp and pistonDown each time I press button 1?

I’m assuming it doesn’t use the end() but the interrupted() method. The whileHeld() method cancels the command that was running, so I’d assume the toggle would do the same thing.

Do you at least have a crio you could plug into and run the code. If you do you could put print statements into those methods to verify that they are being called the way you think they are.

Finally got around to trying this out on a cRIO and you were right the interrupted method is what is used to toggle the command.

Thanks for the help!

The implementation may make things clearer (from Toggle.java in WPILibJ):


   /**
     * Toggles a command when the trigger becomes active
     * @param command the command to toggle
     */
    public void toggleWhenActive(final Command command) {
         new ButtonScheduler() {

            boolean pressedLast = grab();

            public void execute() {
                if (grab()) {
                    if (!pressedLast) {
                        pressedLast = true;
                        if (command.isRunning()){
                            command.cancel();
                        } else{
                            command.start();
                        }
                    }
                } else {
                    pressedLast = false;
                }
            }
        }.start();
    }