X-Git-Url: http://challenge-bot.com/repos/?a=blobdiff_plain;f=src%2Forg%2Fusfirst%2Ffrc%2Fteam3501%2Frobot%2Fsubsystems%2FDriveTrain.java;h=f7c35a9108cdf161ac0c3597bf85ca350e63073d;hb=c846487e0cc034e05c44e3a2a11c9c72fde1bee9;hp=a5987e1fa4c914432e05c2065a9432c49e5cc9bb;hpb=b081e34b72803bc0b4ec11f0ab7676596da59fde;p=3501%2F2017steamworks diff --git a/src/org/usfirst/frc/team3501/robot/subsystems/DriveTrain.java b/src/org/usfirst/frc/team3501/robot/subsystems/DriveTrain.java index a5987e1..f7c35a9 100644 --- a/src/org/usfirst/frc/team3501/robot/subsystems/DriveTrain.java +++ b/src/org/usfirst/frc/team3501/robot/subsystems/DriveTrain.java @@ -5,15 +5,32 @@ import org.usfirst.frc.team3501.robot.commands.driving.JoystickDrive; import com.ctre.CANTalon; +import edu.wpi.first.wpilibj.ADXRS450_Gyro; +import edu.wpi.first.wpilibj.DoubleSolenoid; +import edu.wpi.first.wpilibj.DoubleSolenoid.Value; import edu.wpi.first.wpilibj.Encoder; import edu.wpi.first.wpilibj.RobotDrive; import edu.wpi.first.wpilibj.command.Subsystem; public class DriveTrain extends Subsystem { + public static double driveP = 0.006, driveI = 0.001, driveD = -0.002; + public static double turnP = 0.004, turnI = 0.0013, turnD = -0.005; + public static double driveStraightGyroP = 0.01; + + public static final double WHEEL_DIAMETER = 6; // inches + public static final int ENCODER_PULSES_PER_REVOLUTION = 256; + public static final double INCHES_PER_PULSE = WHEEL_DIAMETER * Math.PI + / ENCODER_PULSES_PER_REVOLUTION; + public static final int MAINTAIN_CLIMBED_POSITION = 0; + public static final int TIME_TO_CLIMB_FOR = 0; private static DriveTrain driveTrain; + private final CANTalon frontLeft, frontRight, rearLeft, rearRight; private final RobotDrive robotDrive; private final Encoder leftEncoder, rightEncoder; + private final DoubleSolenoid leftGearPiston, rightGearPiston; + + private ADXRS450_Gyro imu; private DriveTrain() { // MOTOR CONTROLLERS @@ -24,15 +41,25 @@ public class DriveTrain extends Subsystem { // ENCODERS leftEncoder = new Encoder(Constants.DriveTrain.ENCODER_LEFT_A, - Constants.DriveTrain.ENCODER_LEFT_B); + Constants.DriveTrain.ENCODER_LEFT_B, false, Encoder.EncodingType.k4X); rightEncoder = new Encoder(Constants.DriveTrain.ENCODER_RIGHT_A, - Constants.DriveTrain.ENCODER_RIGHT_B); + Constants.DriveTrain.ENCODER_RIGHT_B, false, Encoder.EncodingType.k4X); - leftEncoder.setDistancePerPulse(Constants.DriveTrain.INCHES_PER_PULSE); - rightEncoder.setDistancePerPulse(Constants.DriveTrain.INCHES_PER_PULSE); + leftEncoder.setDistancePerPulse(INCHES_PER_PULSE); + rightEncoder.setDistancePerPulse(INCHES_PER_PULSE); // ROBOT DRIVE robotDrive = new RobotDrive(frontLeft, rearLeft, frontRight, rearRight); + + this.imu = new ADXRS450_Gyro(Constants.DriveTrain.GYRO_PORT); + + // TODO: Not sure if MODULE_NUMBER should be the same for both + leftGearPiston = new DoubleSolenoid(Constants.DriveTrain.MODULE_NUMBER, + Constants.DriveTrain.LEFT_GEAR_PISTON_FORWARD, + Constants.DriveTrain.LEFT_GEAR_PISTON_REVERSE); + rightGearPiston = new DoubleSolenoid(Constants.DriveTrain.MODULE_NUMBER, + Constants.DriveTrain.RIGHT_GEAR_PISTON_FORWARD, + Constants.DriveTrain.RIGHT_GEAR_PISTON_REVERSE); } public static DriveTrain getDriveTrain() { @@ -59,48 +86,30 @@ public class DriveTrain extends Subsystem { setMotorValues(0, 0); } - public double getFrontLeftMotorVal() { - return frontLeft.get(); - } - - public double getFrontRightMotorVal() { - return frontRight.get(); - } - - public double getRearLeftMotorVal() { - return frontLeft.get(); - } - - public double getRearRightMotorVal() { - return frontLeft.get(); - } - - public CANTalon getFrontLeft() { - return frontLeft; - } - - public CANTalon getFrontRight() { - return frontRight; - } - - public CANTalon getRearLeft() { - return rearLeft; + public double getLeftMotorVal() { + return (frontLeft.get() + rearLeft.get()) / 2; } - public CANTalon getRearRight() { - return rearRight; + public double getRightMotorVal() { + return (frontRight.get() + rearRight.get()) / 2; } // ENCODER METHODS - public double getLeftEncoder() { + public double getLeftEncoderDistance() { return leftEncoder.getDistance(); } - public double getRightEncoder() { + public double getRightEncoderDistance() { return rightEncoder.getDistance(); } + public void printEncoderOutput() { + System.out.println("left: " + getLeftEncoderDistance()); + System.out.println("right: " + getRightEncoderDistance()); + // System.out.println(getAvgEncoderDistance()); + } + public double getAvgEncoderDistance() { return (leftEncoder.getDistance() + rightEncoder.getDistance()) / 2; } @@ -122,6 +131,53 @@ public class DriveTrain extends Subsystem { return (getLeftSpeed() + getRightSpeed()) / 2.0; } + // ------Gyro------// + public double getAngle() { + return this.imu.getAngle(); + } + + public void resetGyro() { + this.imu.reset(); + } + + /* + * @return a value that is the current setpoint for the piston kReverse or + * KForward + */ + public Value getLeftGearPistonValue() { + return leftGearPiston.get(); + } + + /* + * @return a value that is the current setpoint for the piston kReverse or + * KForward + */ + public Value getRightGearPistonValue() { + return rightGearPiston.get(); + } + + /* + * Changes the ball shift gear assembly to high + */ + public void setHighGear() { + changeGear(Constants.DriveTrain.HIGH_GEAR); + } + + /* + * Changes the ball shift gear assembly to low + */ + public void setLowGear() { + changeGear(Constants.DriveTrain.LOW_GEAR); + } + + /* + * Changes the gear to a DoubleSolenoid.Value + */ + private void changeGear(DoubleSolenoid.Value gear) { + leftGearPiston.set(gear); + rightGearPiston.set(gear); + } + @Override protected void initDefaultCommand() { setDefaultCommand(new JoystickDrive());