package com.team254.frc2015.auto.modes; import com.team254.frc2015.Constants; import com.team254.frc2015.auto.AutoMode; import com.team254.frc2015.auto.AutoModeEndedException; import com.team254.frc2015.subsystems.TopCarriage; import edu.wpi.first.wpilibj.Timer; public class ThreeToteAutoMode extends AutoMode { public static double CLEAR_TOTE_HEIGHT = 20.0; public static double CLEAR_TOTE_HEIGHT_LOW = 18.0; public static double SAFE_DRIVE_AWAY_TIME = 13.6; public static double CLEAR_WHEELS_HEIGHT = 12.5; Timer autoModeTimer = new Timer(); protected void routine() throws AutoModeEndedException { autoModeTimer.reset(); autoModeTimer.start(); waitTime(.225); // Weird gyro init bug waitForGyroData(.25); // Weird gyro init bug bottom_carriage.setFlapperOpen(true); waitTime(.1); // Move can double start_height = top_carriage.getHeight(); top_carriage.setFastPositionSetpoint(start_height + 16.0); waitForCarriageHeight(top_carriage, start_height + 15.0, true, 1.0); // Grab first tote intake.setSpeed(Constants.kAutoIntakeSpeed); drive.setDistanceSetpoint(24); waitForDriveDistance(10, true, 1.0); intake.close(); waitForTote(1.0); // Turn on squeeze top_carriage.squeeze(); waitForDrive(2); // Lift tote a bit off ground bottom_carriage.setFlapperOpen(false); waitTime(.1); bottom_carriage.setPositionSetpoint(CLEAR_TOTE_HEIGHT, true); waitForCarriageHeight(bottom_carriage, CLEAR_TOTE_HEIGHT - 1, true, 1.0); top_carriage.setGrabberPosition(TopCarriage.GrabberPositions.CLOSED); // Turn 180 drive.setTurnSetPoint(-Math.PI, 2.2); double heading_cache = -Math.PI; intake.open(); waitForDrive(3.0); // Drive to second tote drive.reset(); drive.setDistanceSetpoint(30); waitForDriveDistance(28.5, true, 1.5); intake.close(); waitForTote(15.0); // die if no tote // Get second tote bottom_carriage.setFastPositionSetpoint(2.0); waitForCarriage(bottom_carriage, 1.5); bottom_carriage.setPositionSetpoint(CLEAR_TOTE_HEIGHT_LOW, true); waitForCarriageHeight(bottom_carriage, CLEAR_WHEELS_HEIGHT, true, 1.5); // Spinny thing (TM) intake.setLeftRight(-Constants.kSpinnyThingSpeed, Constants.kSpinnyThingSpeed); waitForCarriageHeight(top_carriage, 30, true, 1.5); // Drive through can drive.setDistanceSetpoint(70, 18); waitForDriveDistance(68, true, 5.0); // Drive to last tote intake.open(); drive.setDistanceSetpoint(110); waitForDriveDistance(95, true, 2.0); intake.setSpeed(Constants.kAutoIntakeSpeed); waitForDriveDistance(108, true, 2.0); // grab last tote intake.close(); waitForTote(10.0); // die if no tote waitForDrive(.5); // Turn towards auto zone double last_angle = heading_cache + (Math.PI / 2.9); drive.setTurnSetPoint(last_angle); waitForTurnAngle(last_angle - .13, true, 1.0); // drive forwards to auto zone drive.reset(); drive.setDistanceSetpoint(118); waitForDriveDistance(117.5, true, 2.0); double time_until_safe_drive_away = SAFE_DRIVE_AWAY_TIME - autoModeTimer.get(); if (time_until_safe_drive_away > 0) { waitTime(time_until_safe_drive_away); } // Drop double top_carriage_height_end = top_carriage.getHeight(); top_carriage.setFastPositionSetpoint(top_carriage_height_end + 5); bottom_carriage.setFastPositionSetpoint(2.0); waitForCarriageHeight(bottom_carriage, 3, false, 1.0); intake.open(); intake.setSpeed(0); bottom_carriage.setFlapperOpen(true); waitForCarriageHeight(top_carriage, top_carriage_height_end + 4, true, 1.0); // Drive backwards drive.setDistanceSetpoint(75); waitForDrive(2.0); System.out.println("Auto time: " + autoModeTimer.get()); } @Override public void prestart() { } }