X-Git-Url: http://challenge-bot.com/repos/?a=blobdiff_plain;f=src%2Forg%2Fusfirst%2Ffrc%2Fteam3501%2Frobot%2Fsubsystems%2FShooter.java;h=8649045aa2d8119e5ff9a173ed1030d7d96a74b7;hb=e4fbab026f4a68a4a238839ae2295c56c1134434;hp=675b4b8cbf52353aa2a70418ee73c5b3ae3f150e;hpb=a0c3ca746a7f9daa124ec1e7495de5417e4ae9f9;p=3501%2Fstronghold-2016 diff --git a/src/org/usfirst/frc/team3501/robot/subsystems/Shooter.java b/src/org/usfirst/frc/team3501/robot/subsystems/Shooter.java index 675b4b8c..8649045a 100755 --- a/src/org/usfirst/frc/team3501/robot/subsystems/Shooter.java +++ b/src/org/usfirst/frc/team3501/robot/subsystems/Shooter.java @@ -1,50 +1,68 @@ package org.usfirst.frc.team3501.robot.subsystems; import org.usfirst.frc.team3501.robot.Constants; -import org.usfirst.frc.team3501.robot.Constants.Shooter.State; +import org.usfirst.frc.team3501.robot.sensors.Photogate; -import edu.wpi.first.wpilibj.CANTalon; +import edu.wpi.first.wpilibj.DoubleSolenoid; import edu.wpi.first.wpilibj.command.Subsystem; +/*** + * The Shooter consists of a platform and wheel, each controlled by separate + * motors. The piston controlling the platform pushes the ball onto the wheel. + * The wheel is controlled by a motor, which is running before the ball is + * pushed onto the wheel. The spinning wheel propels the ball. + * + * @author superuser + * + */ + public class Shooter extends Subsystem { - // TODO: check all files for control m characters - private CANTalon shooter; + private DoubleSolenoid catapult1, catapult2; + private Photogate photogate; + private boolean usePhotoGate; public Shooter() { - shooter = new CANTalon(Constants.Shooter.PORT); + catapult1 = new DoubleSolenoid(Constants.Shooter.CATAPULT1_MODULE, + Constants.Shooter.CATAPULT1_FORWARD, + Constants.Shooter.CATAPULT1_REVERSE); + catapult2 = new DoubleSolenoid(Constants.Shooter.CATAPULT2_MODULE, + Constants.Shooter.CATAPULT2_FORWARD, + Constants.Shooter.CATAPULT2_REVERSE); + usePhotoGate = false; } - public double getCurrentSetPoint() { - return shooter.get(); - } + /*** + * This method checks to see if the ball has successfully passed through the + * intake rollers and is inside. + * + * @return whether the presence of the ball is true or false and returns the + * state of the condition (true or false). + */ - public void setSpeed(double speed) { - if (speed >= 1.0) - shooter.set(1.0); - else if (speed <= -1.0) - shooter.set(-1.0); + public boolean isBallInside() { + if (usePhotogate()) + return photogate.isBallPresent(); else - shooter.set(speed); + return true; + } + + // Catapult Commands + public void fireCatapult() { + catapult1.set(Constants.Shooter.shoot); + catapult2.set(Constants.Shooter.shoot); } - public void stop() { - this.setSpeed(0.0); + public void resetCatapult() { + catapult1.set(Constants.Shooter.reset); + catapult2.set(Constants.Shooter.reset); } - public State getState() { - return (this.getCurrentSetPoint() == 0) ? State.RUNNING : State.STOPPED; + public boolean usePhotogate() { + return this.usePhotoGate; } - // Use negative # for decrement. Positive for increment. - public void changeSpeed(double change) { - if (getCurrentSetPoint() + change >= 1.0) - shooter.set(1.0); - else if (getCurrentSetPoint() + change <= -1.0) - shooter.set(-1.0); - else { - double newSpeed = getCurrentSetPoint() + change; - setSpeed(newSpeed); - } + public void togglePhotoGate() { + this.usePhotoGate = !this.usePhotoGate; } @Override