+package org.usfirst.frc.team3501.robot.commands.climber;
+
+import org.usfirst.frc.team3501.robot.Constants;
+import org.usfirst.frc.team3501.robot.Robot;
+
+import edu.wpi.first.wpilibj.Timer;
+import edu.wpi.first.wpilibj.command.Command;
+
+/**
+ * This command runs the winch at a specified speed and time in seconds when the
+ * button triggering it is pressed. This command also makes the drive train
+ * motors run because the winch is controlled by the drive train.
+ *
+ * pre-condition: This command is run by a button in OI. The robot must be
+ * attached to the rope.
+ *
+ * post-condition: Winch motor set to a specified speed for a specified time.
+ *
+ * @param motorVal
+ * value range is from -1 to 1
+ * @param time
+ * in seconds
+ * @author shivanighanta
+ *
+ */
+public class MaintainWinchSpeed extends Command {
+ Timer timer;
+ private double time;
+ private double motorVal;
+
+ /**
+ * See JavaDoc comment in class for details
+ *
+ * @param time
+ * time in seconds to run the winch
+ * @param motorVal
+ * value range is from -1 to 1
+ */
+ public MaintainWinchSpeed(double time, double motorVal) {
+ requires(Robot.getDriveTrain());
+ this.time = time;
+ this.motorVal = motorVal;
+ }
+
+ @Override
+ protected void initialize() {
+ timer.start();
+ }
+
+ @Override
+ protected void execute() {
+ Robot.getDriveTrain().setMotorValues(Constants.Climber.MAINTAIN_MOTOR_VAL,
+ Constants.Climber.MAINTAIN_MOTOR_VAL);
+
+ }
+
+ @Override
+ protected boolean isFinished() {
+ return timer.get() >= time;
+ }
+
+ @Override
+ protected void end() {
+ Robot.getDriveTrain().stop();
+ }
+
+ @Override
+ protected void interrupted() {
+ end();
+ }
+}