implement shooter pid
[3501/2017steamworks] / src / org / usfirst / frc / team3501 / robot / commands / shooter / RunFlyWheel.java
index d68b13eca0b71d3cc3024769ac8f56777da1cbbe..c5101fc7d0dea5e23353b3a6c6b890ad35247450 100644 (file)
@@ -8,8 +8,9 @@ import org.usfirst.frc.team3501.robot.utils.PIDController;
 import edu.wpi.first.wpilibj.command.Command;
 
 /**
- * This command runs the fly wheel at a given speed for a given time. The fly
- * wheel is intended to shoot balls fed by the intake wheel.
+ * This command runs the fly wheel at a specific speed using a PID Controller
+ * for accuracy for a given time. The fly wheel is intended to shoot balls fed
+ * by the intake wheel.
  *
  * @author Shaina & Chris
  */
@@ -22,9 +23,9 @@ public class RunFlyWheel extends Command {
   private double wheelI;
   private double wheelD;
   private double target;
+  private double shooterSpeed = 0;
 
   public RunFlyWheel(double maxTimeOut) {
-    requires(shooter);
 
     this.wheelP = this.shooter.wheelP;
     this.wheelI = this.shooter.wheelI;
@@ -34,35 +35,39 @@ public class RunFlyWheel extends Command {
     this.wheelController.setDoneRange(0.5);
     this.wheelController.setMaxOutput(1.0);
     this.wheelController.setMinDoneCycles(3);
-    this.target = this.shooter.CURRENT_SHOOTING_SPEED;
+    this.target = this.shooter.getCurrentShootingSpeed();
   }
 
   // Called just before this Command runs the first time
+  @Override
   protected void initialize() {
     this.wheelController.setSetPoint(this.target);
   }
 
   // Called repeatedly when this Command is scheduled to run
+  @Override
   protected void execute() {
-    double shooterSpeed = this.wheelController
-        .calcPID(this.shooter.getShooterSpeed());
-
+    double calculatedShooterIncrement = this.wheelController
+        .calcPID(this.shooter.getShooterRPM());
+    shooterSpeed += calculatedShooterIncrement;
     this.shooter.setFlyWheelMotorVal(shooterSpeed);
   }
 
   // Make this return true when this Command no longer needs to run execute()
+  @Override
   protected boolean isFinished() {
     return timeSinceInitialized() >= maxTimeOut;
   }
 
   // Called once after isFinished returns true
+  @Override
   protected void end() {
     this.shooter.stopFlyWheel();
   }
 
   // Called when another command which requires one or more of the same
   // subsystems is scheduled to run
+  @Override
   protected void interrupted() {
-    end();
   }
 }