X-Git-Url: http://challenge-bot.com/repos/?a=blobdiff_plain;f=src%2Forg%2Fusfirst%2Ffrc%2Fteam3501%2Frobot%2Fsubsystems%2FDoubleJointedDefenseArm.java;fp=src%2Forg%2Fusfirst%2Ffrc%2Fteam3501%2Frobot%2Fsubsystems%2FDoubleJointedDefenseArm.java;h=54a96b556cfcfadccd0284dba4580c27201292d3;hb=46100702c3905b43546fd8e00931719c0127c827;hp=0000000000000000000000000000000000000000;hpb=5012d6b0cb98fe866ec8adfb65f9baeec2ad42e4;p=3501%2Fstronghold-2016 diff --git a/src/org/usfirst/frc/team3501/robot/subsystems/DoubleJointedDefenseArm.java b/src/org/usfirst/frc/team3501/robot/subsystems/DoubleJointedDefenseArm.java new file mode 100755 index 00000000..54a96b55 --- /dev/null +++ b/src/org/usfirst/frc/team3501/robot/subsystems/DoubleJointedDefenseArm.java @@ -0,0 +1,147 @@ +package org.usfirst.frc.team3501.robot.subsystems; + +import org.usfirst.frc.team3501.robot.Constants; + +import edu.wpi.first.wpilibj.AnalogPotentiometer; +import edu.wpi.first.wpilibj.CANTalon; +import edu.wpi.first.wpilibj.command.Subsystem; + +public class DoubleJointedDefenseArm extends Subsystem { + private AnalogPotentiometer defenseArmPotentiometer; + private AnalogPotentiometer defenseHandPotentiometer; + private CANTalon defenseArm; + private CANTalon defenseHand; + private double hookHeight; + private double footHeight; + private double[] potHandAngles; + private double[] potArmAngles; + + // angles corresponding to pre-determined heights we will need + + public DoubleJointedDefenseArm() { + defenseArmPotentiometer = new AnalogPotentiometer( + 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() { + return defenseArmPotentiometer.get(); + } + + public double getHandPotAngle() { + return defenseHandPotentiometer.get(); + } + + /*** + * 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[] createArmPotArray() { + double[] arr = new double[3]; + + for (int i = 0; i < 3; i++) { + arr[i] = 45 * i; + } + return arr; + } + + /*** + * This method sets the voltage of the arm motor. The range is from [-1,1]. A + * negative voltage makes the direction of the motor go backwards. + * + * @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. + */ + + public void setArmSpeed(double speed) { + if (speed > 1) + speed = 1; + else if (speed < -1) + speed = -1; + + defenseArm.set(speed); + } + + /*** + * This method sets the voltage of the hand motor. The range is from [-1,1]. A + * negative voltage makes the direction of the motor go backwards. + * + * @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. + */ + + public void setHandSpeed(double speed) { + if (speed > 1) + speed = 1; + else if (speed < -1) + speed = -1; + + 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 boolean isOutsideRange() { + if (getArmHorizontalDisplacement() < 15) + return false; + return true; + } + + @Override + protected void initDefaultCommand() { + } +}