package org.usfirst.frc3501.RiceCatRobot.commands;
import org.usfirst.frc3501.RiceCatRobot.Robot;
+import org.usfirst.frc3501.RiceCatRobot.subsystems.DriveTrain;
import edu.wpi.first.wpilibj.command.Command;
public class MoveDistance extends Command {
- double distance;
-
- public MoveDistance(double distance){
+ double distance, minSpeed, maxSpeed;
+
+ public MoveDistance(double distance, double minSpeed, double maxSpeed) {
requires(Robot.driveTrain);
this.distance = distance;
+ this.minSpeed = minSpeed;
+ this.maxSpeed = maxSpeed;
}
-
- protected void initialize(){
-
+
+ protected void initialize() {
+ Robot.driveTrain.resetEncoders();
}
@Override
protected void execute() {
- // TODO Auto-generated method stub
-
+ double speed = 4 * (minSpeed - maxSpeed) *
+ Math.pow((Robot.driveTrain.getAverageSpeed() / distance - 0.5), 2)
+ + maxSpeed;
+ Robot.driveTrain.setMotorSpeeds(speed, speed);
}
@Override
protected boolean isFinished() {
- // TODO Auto-generated method stub
+ if (Robot.driveTrain.getLeftDistance() > distance
+ && Robot.driveTrain.getRightDistance() > distance)
+ return true;
return false;
}
-
+
@Override
protected void end() {
- // TODO Auto-generated method stub
-
+ Robot.driveTrain.stop();
}
@Override
protected void interrupted() {
- // TODO Auto-generated method stub
-
+ end();
}
}
public double getLeftSpeed() {
return leftEncoder.getRate();
}
+
+ public double getAverageSpeed() {
+ return (getRightSpeed() + getLeftSpeed())/2;
+ }
public double getRightDistance() {
// Returns distance in inches
return leftEncoder.getDistance();
}
+ public void stop() {
+ setMotorSpeeds(0, 0);
+ }
+
public void setMotorSpeeds(double leftSpeed, double rightSpeed) {
if (Math.abs(leftSpeed) < RobotMap.DRIVE_DEAD_ZONE) {
leftSpeed = 0;