package org.usfirst.frc.team3501.robot;
-import org.usfirst.frc.team3501.robot.commands.shooter.ChangeShooterSpeed;
-import org.usfirst.frc.team3501.robot.commands.shooter.SetShooterSpeed;
+import org.usfirst.frc.team3501.robot.commands.auton.PassChevalDeFrise;
+import org.usfirst.frc.team3501.robot.commands.auton.PassDrawBridge;
+import org.usfirst.frc.team3501.robot.commands.auton.PassSallyPort;
+import org.usfirst.frc.team3501.robot.commands.intakearm.IntakeBall;
+import org.usfirst.frc.team3501.robot.commands.scaler.ExtendLift;
+import org.usfirst.frc.team3501.robot.commands.scaler.RetractLift;
+import org.usfirst.frc.team3501.robot.commands.shooter.Shoot;
+import org.usfirst.frc.team3501.robot.commands.shooter.runShooter;
+import edu.wpi.first.wpilibj.DigitalInput;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.buttons.Button;
import edu.wpi.first.wpilibj.buttons.JoystickButton;
+import edu.wpi.first.wpilibj.command.Scheduler;
public class OI {
+ public static boolean isScalingMode = false;
+ public static boolean isCompactRobot = false;
+
public static Joystick leftJoystick;
public static Joystick rightJoystick;
- public static Button decrementShooterSpeed;
- public static Button incrementShooterSpeed;
- public static Button outputCurrentShooterSpeed;
- public static Button trigger;
+
+ // first column of arcade buttons - getting past defenses
+ public static DigitalButton passPortcullis;
+ public static DigitalButton passChevalDeFrise;
+ public static DigitalButton passDrawbridge;
+ public static DigitalButton passSallyPort;
+
+ // second column of arcade buttons - different angles for intake arm
+ // TO DO: change position numbers to angle values (?)
+ public static DigitalButton lowerChevalDeFrise;
+ public static DigitalButton moveToIntakeBoulder;
+ public static DigitalButton poiseAboveChevalDeFrise;
+ public static DigitalButton moveIntakeArmInsideRobot;
+
+ // left joystick buttons
+ public static Button toggleShooter;
+ public static Button SpinRobot180_1; // both do the same thing, just two
+ public static Button SpinRobot180_2; // different buttons
+ public static Button compactRobot_1;
+ public static Button compactRobot_2;
+
+ // right joystick buttons
+ public static Button intakeBoulder;
+ public static Button shootBoulder;
+
+ // button to change robot to the scaling mode
+ public static DigitalButton toggleScalingMode;
public OI() {
leftJoystick = new Joystick(Constants.OI.LEFT_STICK_PORT);
rightJoystick = new Joystick(Constants.OI.RIGHT_STICK_PORT);
- decrementShooterSpeed = new JoystickButton(rightJoystick,
- Constants.OI.DECREMENT_SHOOTER_SPEED_PORT);
- decrementShooterSpeed.whenPressed(new ChangeShooterSpeed(-0.1));
+ passPortcullis = new DigitalButton(
+ new DigitalInput(Constants.OI.PASS_PORTCULLIS_PORT));
+ passChevalDeFrise = new DigitalButton(
+ new DigitalInput(Constants.OI.PASS_CHEVAL_DE_FRISE_PORT));
+ passDrawbridge = new DigitalButton(
+ new DigitalInput(Constants.OI.PASS_DRAWBRIDGE));
+ passSallyPort = new DigitalButton(
+ new DigitalInput(Constants.OI.PASS_SALLYPORT_PORT));
+
+ lowerChevalDeFrise = new DigitalButton(
+ new DigitalInput(Constants.OI.ARCADE_INTAKEARM_LEVEL_ONE_PORT));
+ moveToIntakeBoulder = new DigitalButton(
+ new DigitalInput(Constants.OI.ARCADE_INTAKEARM_LEVEL_TWO_PORT));
+ poiseAboveChevalDeFrise = new DigitalButton(
+ new DigitalInput(Constants.OI.ARCADE_INTAKEARM_LEVEL_THREE_PORT));
+ moveIntakeArmInsideRobot = new DigitalButton(
+ new DigitalInput(Constants.OI.ARCADE_INTAKEARM_LEVEL_FOUR_PORT));
+
+ toggleShooter = new JoystickButton(leftJoystick,
+ Constants.OI.LEFT_JOYSTICK_TRIGGER_PORT);
+ SpinRobot180_1 = new JoystickButton(leftJoystick,
+ Constants.OI.LEFT_JOYSTICK_TOP_LEFT_PORT);
+ SpinRobot180_2 = new JoystickButton(leftJoystick,
+ Constants.OI.LEFT_JOYSTICK_TOP_RIGHT_PORT);
+ compactRobot_1 = new JoystickButton(leftJoystick,
+ Constants.OI.LEFT_JOYSTICK_TOP_CENTER_PORT);
+ compactRobot_2 = new JoystickButton(leftJoystick,
+ Constants.OI.LEFT_JOYSTICK_TOP_LOW_PORT);
+
+ intakeBoulder = new JoystickButton(rightJoystick,
+ Constants.OI.RIGHT_JOYSTICK_TRIGGER_PORT);
+ shootBoulder = new JoystickButton(rightJoystick,
+ Constants.OI.RIGHT_JOYSTICK_THUMB_PORT);
+
+ toggleScalingMode = new DigitalButton(
+ new DigitalInput(Constants.OI.SCALING_BUTTON_PORT));
+
+ passPortcullis.whenPressed(new PassPortcullis());
+ passChevalDeFrise.whenPressed(new PassChevalDeFrise());
+ passDrawbridge.whenPressed(new PassDrawBridge());
+ passSallyPort.whenPressed(new PassSallyPort());
+
+ lowerChevalDeFrise
+ .whenPressed(/* TO DO: define this, and fill in commands */);
+
+ if (toggleScalingMode.get()) {
+ if (!isScalingMode) {
+ isScalingMode = true;
+ if (!isCompactRobot) {
+ Scheduler.getInstance().add(new CompactRobot());
+ isCompactRobot = true;
+ }
+ } else if (isScalingMode) {
+ isScalingMode = false;
+ Scheduler.getInstance().add(new CompactRobot());
+ }
+ }
+
+ if (!isScalingMode) {
+ toggleShooter.toggleWhenPressed(new runShooter());
+ compactRobot_1.whenPressed(new CompactRobot());
+
+ intakeBoulder.whenPressed(new IntakeBall());
+ shootBoulder.whenPressed(new Shoot());
- incrementShooterSpeed = new JoystickButton(rightJoystick,
- Constants.OI.INCREMENT_SHOOTER_SPEED_PORT);
- incrementShooterSpeed.whenPressed(new ChangeShooterSpeed(0.1));
+ } else if (isScalingMode) {
+ toggleShooter.toggleWhenPressed(new WinchIn());
+ compactRobot_1.whenPressed(new RetractLift());
- outputCurrentShooterSpeed = new JoystickButton(rightJoystick,
- Constants.OI.SHOOT_PORT);
+ intakeBoulder.toggleWhenPressed(new WinchOut());
+ shootBoulder.whenPressed(new ExtendLift());
+ }
- trigger = new JoystickButton(rightJoystick, Constants.OI.TRIGGER_PORT);
- trigger.whenPressed(new SetShooterSpeed(0.5));
- trigger.whenReleased(new SetShooterSpeed(0.0));
+ SpinRobot180_1
+ .whenPressed(/* rotate robot 180, reorient joystick controls */);
}
}