package org.usfirst.frc.team3501.robot.subsystems;
import org.usfirst.frc.team3501.robot.Constants;
-import org.usfirst.frc.team3501.robot.Robot;
import org.usfirst.frc.team3501.robot.commands.driving.JoystickDrive;
import edu.wpi.first.wpilibj.CANTalon;
import edu.wpi.first.wpilibj.command.PIDSubsystem;
public class DriveTrain extends PIDSubsystem {
+ // Determines if the "front" of the robot has been reversed
private boolean outputFlipped = false;
+
private static double pidOutput = 0;
private Encoder leftEncoder, rightEncoder;
public void joystickDrive(double left, double right) {
int type = Constants.DriveTrain.DRIVE_TYPE;
+
+ // Handle flipping of the "front" of the robot
double k = (isFlipped() ? -1 : 1);
- if (type == Constants.DriveTrain.TANK_DRIVE) {
+
+ if (type == Constants.DriveTrain.TANK) {
+ // TODO Test this for negation and for voltage vs. [-1,1] outputs
+ double leftSpeed = (-frontLeft.get() + -rearLeft.get()) / 2;
+ double rightSpeed = (-frontRight.get() + -rearRight.get()) / 2;
+ left = ((Constants.DriveTrain.kADJUST - 1) * leftSpeed + left)
+ / Constants.DriveTrain.kADJUST;
+ right = ((Constants.DriveTrain.kADJUST - 1) * rightSpeed + right)
+ / Constants.DriveTrain.kADJUST;
robotDrive.tankDrive(-left * k, -right * k);
- } else if (type == Constants.DriveTrain.ARCADE_DRIVE) {
+ } else if (type == Constants.DriveTrain.ARCADE) {
+ double speed = (-frontLeft.get() + -rearLeft.get() + -frontRight.get() + -rearRight
+ .get()) / 2;
+ left = ((Constants.DriveTrain.kADJUST - 1) * speed + left)
+ / Constants.DriveTrain.kADJUST;
robotDrive.arcadeDrive(left * k, right);
}
}
public void setMotorSpeeds(double left, double right) {
- double k = (Robot.driveTrain.isFlipped() ? -1 : 1);
+ double k = (isFlipped() ? -1 : 1);
robotDrive.tankDrive(-left * k, -right * k);
}