5c92506da9844c021fb770c3736209336df97183
[3501/stronghold-2016] / src / org / usfirst / frc / team3501 / robot / subsystems / Shooter.java
1 package org.usfirst.frc.team3501.robot.subsystems;
2
3 import org.usfirst.frc.team3501.robot.Constants;
4 import org.usfirst.frc.team3501.robot.Lidar;
5 import org.usfirst.frc.team3501.robot.MathLib;
6
7 import edu.wpi.first.wpilibj.AnalogPotentiometer;
8 import edu.wpi.first.wpilibj.CANTalon;
9 import edu.wpi.first.wpilibj.CounterBase.EncodingType;
10 import edu.wpi.first.wpilibj.DoubleSolenoid;
11 import edu.wpi.first.wpilibj.Encoder;
12 import edu.wpi.first.wpilibj.command.Subsystem;
13
14 /***
15 * The Shooter consists of a platform and wheel, each controlled by
16 * separate motors. The piston controlling the platform pushes the ball onto the
17 * wheel. The wheel is controlled by a motor, which is running before the ball
18 * is pushed
19 * onto the wheel. The spinning wheel propels the ball.
20 *
21 * @author superuser
22 *
23 */
24
25 public class Shooter extends Subsystem {
26 private CANTalon shooter;
27 private CANTalon angleAdjuster;
28 private DoubleSolenoid hood, punch;
29 private Encoder encoder;
30 private Lidar lidar;
31
32 public Shooter() {
33 shooter = new CANTalon(Constants.Shooter.PORT);
34 hood = new DoubleSolenoid(Constants.Shooter.HOOD_FORWARD,
35 Constants.Shooter.HOOD_REVERSE);
36 angleAdjuster = new CANTalon(Constants.Shooter.ANGLE_ADJUSTER_PORT);
37 punch = new DoubleSolenoid(Constants.Shooter.PUNCH_FORWARD,
38 Constants.Shooter.PUNCH_REVERSE);
39
40 encoder = new Encoder(Constants.Shooter.ENCODER_PORT_A,
41 Constants.Shooter.ENCODER_PORT_B, false, EncodingType.k4X);
42
43 lidar = new Lidar(Constants.Shooter.LIDAR_I2C_PORT);
44 }
45
46 /***
47 * This method checks to see if the ball has successfully passed through the
48 * intake rollers and is inside.
49 *
50 * @return whether the presence of the ball is true or false and returns the
51 * state of the condition (true or false).
52 */
53
54 public boolean isBallInside() {
55 return true;
56 }
57
58 public void setSpeed(double speed) {
59 if (speed > 1.0)
60 shooter.set(1.0);
61 else if (speed < -1.0)
62 shooter.set(-1.0);
63 else
64 shooter.set(speed);
65 }
66
67 public void stop() {
68 this.setSpeed(0.0);
69 }
70
71 public double getSpeed() {
72 return encoder.getRate();
73 }
74
75 // Use negative # for decrement. Positive for increment.
76
77 public void changeSpeed(double change) {
78 double newSpeed = getSpeed() + change;
79 setSpeed(newSpeed);
80 }
81
82 // Punch Commands
83 public void extendPunch() {
84 punch.set(Constants.Shooter.punch);
85 }
86
87 public void retractPunch() {
88 punch.set(Constants.Shooter.retract);
89 }
90
91 public boolean isHoodOpen() {
92 return hood.get() == Constants.Shooter.open;
93 }
94
95 public void openHood() {
96 hood.set(Constants.Shooter.open);
97 }
98
99 public void closeHood() {
100 hood.set(Constants.Shooter.closed);
101 }
102
103 @Override
104 protected void initDefaultCommand() {
105 }
106 }