fix stuff
[3501/2017steamworks] / src / org / usfirst / frc / team3501 / robot / commands / driving / DriveDistance.java
CommitLineData
aa160dfd
ME
1package org.usfirst.frc.team3501.robot.commands.driving;
2
3import org.usfirst.frc.team3501.robot.Robot;
e12d6901
CZ
4import org.usfirst.frc.team3501.robot.subsystems.DriveTrain;
5import org.usfirst.frc.team3501.robot.utils.PIDController;
aa160dfd 6
e12d6901 7import edu.wpi.first.wpilibj.Preferences;
aa160dfd
ME
8import edu.wpi.first.wpilibj.command.Command;
9
10/**
c0e9f911
ME
11 * This command makes the robot drive a specified distance using encoders on the
12 * robot and using a feedback loop
aa160dfd 13 *
e12d6901
CZ
14 * parameters: distance the robot will move in inches motorVal: the motor input
15 * to set the motors to
aa160dfd
ME
16 */
17public class DriveDistance extends Command {
e12d6901
CZ
18 private DriveTrain driveTrain = Robot.getDriveTrain();
19 private double maxTimeOut;
e12d6901 20 private double target;
35527abe
CZ
21 private double zeroAngle;
22 private Preferences prefs;
23 private PIDController driveController;
e12d6901
CZ
24
25 private double driveP;
26 private double driveI;
27 private double driveD;
35527abe 28 private double gyroP;
aa160dfd 29
db326f40 30 public DriveDistance(double distance, double maxTimeOut) {
9b35aa55 31 requires(driveTrain);
174f415c
CZ
32 this.maxTimeOut = maxTimeOut;
33 this.target = distance;
34
e12d6901
CZ
35 this.driveP = driveTrain.driveP;
36 this.driveI = driveTrain.driveI;
37 this.driveD = driveTrain.driveD;
35527abe
CZ
38 this.gyroP = driveTrain.driveStraightGyroP;
39 this.driveController = new PIDController(driveP, driveI, driveD);
c726d04a 40 this.driveController.setDoneRange(1.0);
e12d6901
CZ
41 this.driveController.setMaxOutput(1.0);
42 this.driveController.setMinDoneCycles(5);
d17d868d 43 }
44
d17d868d 45 @Override
46 protected void initialize() {
e12d6901 47 this.driveTrain.resetEncoders();
e12d6901 48 this.driveController.setSetPoint(this.target);
c726d04a 49 this.zeroAngle = driveTrain.getAngle();
d64e0d69 50 System.out.println("drive " + target);
d17d868d 51 }
52
d17d868d 53 @Override
54 protected void execute() {
35527abe 55 double xVal = gyroP * (driveTrain.getAngle() - zeroAngle);
d64e0d69 56 double yVal = driveController.calcPID(driveTrain.getLeftEncoderDistance());
e12d6901 57
8e4c083c
CZ
58 double leftDrive = yVal - xVal;
59 double rightDrive = yVal + xVal;
e12d6901 60 this.driveTrain.setMotorValues(leftDrive, rightDrive);
d17d868d 61 }
62
d17d868d 63 @Override
64 protected boolean isFinished() {
35527abe
CZ
65 return timeSinceInitialized() >= maxTimeOut
66 || this.driveController.isDone();
d17d868d 67 }
68
d17d868d 69 @Override
70 protected void end() {
71 }
72
d17d868d 73 @Override
74 protected void interrupted() {
e12d6901 75 end();
d17d868d 76 }
aa160dfd 77}