X-Git-Url: http://challenge-bot.com/repos/?a=blobdiff_plain;f=src%2Forg%2Fusfirst%2Ffrc%2Fteam3501%2Frobot%2Fsubsystems%2FShooter.java;h=60452a0c9080bfe4bf61beb2c129ce0be2b37717;hb=4d4bcc688036e2dfeb20824d91b8a9972c20ecf4;hp=bda816f402fa2bae9c0ec35d09601275a9cbc7a9;hpb=9b10474d83903ec83aa81b57174d0eebeff92dfe;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 bda816f4..60452a0c 100755 --- a/src/org/usfirst/frc/team3501/robot/subsystems/Shooter.java +++ b/src/org/usfirst/frc/team3501/robot/subsystems/Shooter.java @@ -1,23 +1,53 @@ 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 punch; + private CANTalon angleAdjuster; + private DoubleSolenoid hood, punch; + private Encoder encoder; + private Lidar lidar; + private Photogate photogate; public Shooter() { shooter = new CANTalon(Constants.Shooter.PORT); - punch = new DoubleSolenoid(Constants.Shooter.FORWARD_PORT, - Constants.Shooter.REVERSE_PORT); + angleAdjuster = new CANTalon(Constants.Shooter.ANGLE_ADJUSTER_PORT); + 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); } - 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 boolean isBallInside() { + return photogate.isBallPresent(); } public void setSpeed(double speed) { @@ -33,24 +63,34 @@ public class Shooter extends Subsystem { 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 = getCurrentSetPoint() + change; - if (newSpeed > 1.0) - shooter.set(1.0); - else if (newSpeed < -1.0) - shooter.set(-1.0); - else { - setSpeed(newSpeed); - } + double newSpeed = getSpeed() + change; + setSpeed(newSpeed); } // Punch Commands - public void punch() { + public void extendPunch() { punch.set(Constants.Shooter.punch); } - public void resetPunch() { + public void retractPunch() { punch.set(Constants.Shooter.retract); }