X-Git-Url: http://challenge-bot.com/repos/?a=blobdiff_plain;f=src%2Forg%2Fusfirst%2Ffrc%2Fteam3501%2Frobot%2Fsubsystems%2FDefenseArm.java;h=24037413086b1219d188142190fe01dddd182094;hb=72fc3c9bd8099194cc4b2c8a747ed9f2be06f1c8;hp=4cd4232e64ea54d90b441d0f177e2db15d076d16;hpb=8e57685f4bacaa8353202309b93bd8f7802e0631;p=3501%2Fstronghold-2016 diff --git a/src/org/usfirst/frc/team3501/robot/subsystems/DefenseArm.java b/src/org/usfirst/frc/team3501/robot/subsystems/DefenseArm.java index 4cd4232e..24037413 100755 --- a/src/org/usfirst/frc/team3501/robot/subsystems/DefenseArm.java +++ b/src/org/usfirst/frc/team3501/robot/subsystems/DefenseArm.java @@ -7,23 +7,31 @@ import edu.wpi.first.wpilibj.CANTalon; import edu.wpi.first.wpilibj.command.Subsystem; public class DefenseArm extends Subsystem { - // Defense arm related objects private AnalogPotentiometer defenseArmPotentiometer; private AnalogPotentiometer defenseHandPotentiometer; private CANTalon defenseArm; private CANTalon defenseHand; private double hookHeight; private double footHeight; - private Double[] potAngles; + + private double[] potHandAngles; + private double[] potArmAngles; + private double[] potAngles; + + // angles corresponding to pre-determined heights we will need public DefenseArm() { defenseArmPotentiometer = new AnalogPotentiometer( - Constants.DefenseArm.ARM_CHANNEL, - Constants.DefenseArm.FULL_RANGE, + Constants.DefenseArm.ARM_CHANNEL, Constants.DefenseArm.FULL_RANGE, + Constants.DefenseArm.OFFSET); + defenseHandPotentiometer = new AnalogPotentiometer( + Constants.DefenseArm.HAND_CHANNEL, Constants.DefenseArm.FULL_RANGE, Constants.DefenseArm.OFFSET); defenseArm = new CANTalon(Constants.DefenseArm.ARM_PORT); defenseHand = new CANTalon(Constants.DefenseArm.HAND_PORT); + potHandAngles = createHandPotArray(); + potArmAngles = createArmPotArray(); } public double getArmPotAngle() { @@ -34,15 +42,39 @@ public class DefenseArm extends Subsystem { return defenseHandPotentiometer.get(); } - public double getDistance(int desiredArmLocation) { - return potAngles[desiredArmLocation]; + /*** + * This method takes an arm location as input (range of [0,2]) Returns the + * angle of the arm corresponding to that arm location + * + * @param desiredArmLocation + * takes an arm location ranging from [0,2] 0 is the lowest position + * of arm 2 is the highest position of arm + * @return the angle of the arm corresponding to that arm location + */ + public double getAngleForHandLocation(int desiredArmLocation) { + return potHandAngles[desiredArmLocation]; + } + + public double getAngleForArmLocation(int desiredArmLocation) { + return potArmAngles[desiredArmLocation]; + } + + public double[] createHandPotArray() { + double[] arr = new double[3]; + + for (int i = 0; i < 3; i++) { + arr[i] = 45 * i; + } + return arr; } - public Double[] putInValues() { + public double[] createArmPotArray() { + double[] arr = new double[3]; + for (int i = 0; i < 3; i++) { - potAngles[i] = (double) (45 * i); + arr[i] = 45 * i; } - return potAngles; + return arr; } /*** @@ -51,8 +83,8 @@ public class DefenseArm extends Subsystem { * * @param speed * The voltage that you set the motor at. The range of the voltage of - * the arm motor is from [-1,1]. A - * negative voltage makes the direction of the motor go backwards. + * the arm motor is from [-1,1]. A negative voltage makes the + * direction of the motor go backwards. */ public void setArmSpeed(double speed) { @@ -70,8 +102,8 @@ public class DefenseArm extends Subsystem { * * @param speed * The voltage that you set the motor at. The range of the voltage of - * the hand motor is from [-1,1]. A - * negative voltage makes the direction of the motor go backwards. + * the hand motor is from [-1,1]. A negative voltage makes the + * direction of the motor go backwards. */ public void setHandSpeed(double speed) { @@ -83,6 +115,45 @@ public class DefenseArm extends Subsystem { defenseHand.set(speed); } + // TODO: figure out if measurements are all in inches + public double getArmHorizontalDisplacement() { + double armHorizontalDisplacement = Constants.DefenseArm.ARM_LENGTH + * Math.cos(getArmPotAngle()); + double handHorizontalDisplacement = Constants.DefenseArm.HAND_LENGTH + * Math.cos(getHandPotAngle()); + return (armHorizontalDisplacement + handHorizontalDisplacement); + } + + public double getArmVerticalDisplacement() { + double armMounted = Constants.DefenseArm.ARM_MOUNTED_HEIGHT; + double armVerticalDisplacement = Constants.DefenseArm.ARM_LENGTH + * Math.sin(getArmPotAngle()); + double handVerticalDisplacement = Constants.DefenseArm.HAND_LENGTH + * Math.sin(getHandPotAngle()); + return (armMounted + armVerticalDisplacement + handVerticalDisplacement); + } + + public double getArmHorizontalDist() { + double arm = Constants.DefenseArm.ARM_LENGTH * Math.cos(getArmPotAngle()); + double hand = Constants.DefenseArm.HAND_LENGTH + * Math.cos(getHandPotAngle()); + return (arm + hand); + } + + public double getArmHeight() { + double armMounted = Constants.DefenseArm.ARM_MOUNTED_HEIGHT; + double arm = Constants.DefenseArm.ARM_LENGTH * Math.sin(getArmPotAngle()); + double hand = Constants.DefenseArm.HAND_LENGTH + * Math.sin(getHandPotAngle()); + return (armMounted + arm + hand); + } + + public boolean isOutsideRange() { + if (getArmHorizontalDist() < 15) + return false; + return true; + } + @Override protected void initDefaultCommand() { }