X-Git-Url: http://challenge-bot.com/repos/?a=blobdiff_plain;f=src%2Forg%2Fusfirst%2Ffrc%2Fteam3501%2Frobot%2Fsubsystems%2FShooter.java;h=ab5eb66ffe6831db965cb078366dc21798e6f556;hb=95f05eb0afbbdf719de43f579b6d69e1758b1d3c;hp=9e0263697261ab33a8fc022037200714ddf77026;hpb=9e247b05247ccbfa685fbf5ab9b62d769f573b35;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 9e026369..ab5eb66f 100755 --- a/src/org/usfirst/frc/team3501/robot/subsystems/Shooter.java +++ b/src/org/usfirst/frc/team3501/robot/subsystems/Shooter.java @@ -1,39 +1,132 @@ -package org.usfirst.frc.team3501.robot.subsystems; - -import org.usfirst.frc.team3501.robot.Constants; - -import edu.wpi.first.wpilibj.CANTalon; -import edu.wpi.first.wpilibj.command.Subsystem; - -public class Shooter extends Subsystem { - CANTalon shooter; - - public Shooter() { - shooter = new CANTalon(Constants.Shooter.SHOOTER_WHEEL_PORT); - } - - public double getCurrentSpeed() { - return shooter.get(); - } - - public void setSpeed(double speed) { - shooter.set(speed); - } - - // Use negative # for decrement. Positive for increment. - public void changeSpeed(double change) { - if (getCurrentSpeed() >= 1.0) - shooter.set(1.0); - else if (getCurrentSpeed() <= -1.0) - shooter.set(-1.0); - else { - double newSpeed = getCurrentSpeed() + change; - shooter.set(newSpeed); - } - } - - @Override - protected void initDefaultCommand() { - - } -} +package org.usfirst.frc.team3501.robot.subsystems; + +import org.usfirst.frc.team3501.robot.Constants; +import org.usfirst.frc.team3501.robot.sensors.Lidar; +import org.usfirst.frc.team3501.robot.sensors.Photogate; + +import edu.wpi.first.wpilibj.CANTalon; +import edu.wpi.first.wpilibj.CounterBase.EncodingType; +import edu.wpi.first.wpilibj.DoubleSolenoid; +import edu.wpi.first.wpilibj.Encoder; +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 { + private CANTalon shooter; + private DoubleSolenoid hood1, hood2, punch; + private Encoder encoder; + private Lidar lidar; + private Photogate photogate; + private boolean usePhotoGate; + + public Shooter() { + shooter = new CANTalon(Constants.Shooter.PORT); + hood1 = new DoubleSolenoid(Constants.Shooter.HOOD_FORWARD, + Constants.Shooter.HOOD_REVERSE); + hood2 = new DoubleSolenoid(Constants.Shooter.HOOD_FORWARD, + Constants.Shooter.HOOD_REVERSE); + punch = new DoubleSolenoid(Constants.Shooter.PUNCH_FORWARD, + Constants.Shooter.PUNCH_REVERSE); + + encoder = new Encoder(Constants.Shooter.ENCODER_PORT_A, + Constants.Shooter.ENCODER_PORT_B, false, EncodingType.k4X); + usePhotoGate = true; + } + + /*** + * 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 boolean isBallInside() { + if (usePhotogate()) + return photogate.isBallPresent(); + else + return true; + } + + public void setSpeed(double speed) { + if (speed > 1.0) + shooter.set(1.0); + else if (speed < -1.0) + shooter.set(-1.0); + else + shooter.set(speed); + } + + public void stop() { + this.setSpeed(0.0); + } + + public double getSpeed() { + return encoder.getRate(); + } + + /* + * We are going to map a lidar distance to a shooter speed that will be set to + * the shooter. This function does not yet exist so we will just use y=x but + * when testing commences we shall create the function + */ + public double getShooterSpeed() { + double distanceToGoal = lidar.getDistance(); + double shooterSpeed = distanceToGoal; // Function to be determined + return shooterSpeed; + } + + // Use negative # for decrement. Positive for increment. + + public void changeSpeed(double change) { + double newSpeed = getSpeed() + change; + setSpeed(newSpeed); + } + + // Punch Commands + public void extendPunch() { + punch.set(Constants.Shooter.punch); + } + + public void retractPunch() { + punch.set(Constants.Shooter.retract); + } + + public void raiseHood() { + hood1.set(Constants.Shooter.open); + hood2.set(Constants.Shooter.open); + } + + public void lowerHood() { + hood1.set(Constants.Shooter.closed); + hood2.set(Constants.Shooter.closed); + } + + public boolean isHoodDown() { + if (hood1.get() == Constants.Shooter.open + && hood2.get() == Constants.Shooter.open) + return true; + return false; + } + + public boolean usePhotogate() { + return this.usePhotoGate; + } + + public void togglePhotoGate() { + this.usePhotoGate = !this.usePhotoGate; + } + + @Override + protected void initDefaultCommand() { + } +}