-<<<<<<< 41a8c498b73f7772d992078cea69ee5673d70668
package org.usfirst.frc.team3501.robot.subsystems;
import org.usfirst.frc.team3501.robot.Constants;
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;
+
+ // angles corresponding to pre-determined heights we will need
public DefenseArm() {
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 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[] putInValues() {
+ 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++) {
- potAngles[i] = (double) (45 * i);
+ arr[i] = 45 * i;
}
- return potAngles;
+ return arr;
}
/***
defenseHand.set(speed);
}
- public void moveArmDown(int levelsToDegrees) {
- // to move arm down levels
- if (levelsToDegrees > 0 & levelsToDegrees < 45) {
- levelsToDegrees = 0;
- if (levelsToDegrees > 45 & levelsToDegrees < 90) {
- levelsToDegrees = 45;
-
- }
- }
- }
-
- public void moveArmTo(int levelsToDegrees) {
-
- }
-
- public void moveArmUp(int levelsToDegrees) {
- // to move arm up levels
- if (levelsToDegrees < 45 & levelsToDegrees > 0) {
- levelsToDegrees = 45;
- if (levelsToDegrees < 90 & levelsToDegrees > 45) {
- levelsToDegrees = 90;
-
- }
-
- }
+ // 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);
}
- @Override
- protected void initDefaultCommand() {
+ 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);
}
-}
-=======
-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 DefenseArm extends Subsystem {
- // Defense arm related objects
- public AnalogPotentiometer defenseArmPotentiometer;
- public CANTalon defenseArmMotor;
- public CANTalon defenseHandMotor;
- public double hookHeight;
- public double footHeight;
-
- // Defense arm specific constants that relate to the degrees per pulse value
- // for the potentiometers
- // private final static double PULSES_PER_ROTATION = 1; // in pulses
- public final static double FULL_RANGE = 270.0; // in degrees
- public final static double OFFSET = -135.0; // in degrees
- public final static double[] armPotValue = { 0.0, 45.0, 90.0 }; // 3 level
-
- // array;
-
- // do we want to use a hashmap??
- // angles at 0,45,90 (Potentiometer value readings)
- // degrees
-
- public DefenseArm() {
- defenseArmPotentiometer = new AnalogPotentiometer(
- Constants.DefenseArm.ARM_CHANNEL, FULL_RANGE, OFFSET);
-
- defenseArmMotor = new CANTalon(Constants.DefenseArm.ARM_PORT);
- defenseHandMotor = new CANTalon(Constants.DefenseArm.HAND_PORT);
- }
-
- /***
- * <<<<<<< Updated upstream This method gets the height of the hook from the
- * ground. The hook is attached to the end of the hand, which is attached to
- * the arm.
- *
- * @return hookHeight gets height of hook from ground. The hook is attached to
- * the end of the hand, which is attached the arm. The height is in
- * inches.
- *
- */
-
- public double getHookHeight() {
-
- return hookHeight;
- }
-
- /***
- * This method gets the height of the foot from the ground. The foot is
- * attached to the end of the hand, which is attached to the arm.
- *
- * @return footHeight gets height of foot from ground. The foot is attached to
- * the end of the hand, which is attached the arm. The height is in
- * inches.
- *
- */
-
- public double getFootHeight() {
-
- return footHeight;
+ public boolean isOutsideRange() {
+ if (getArmHorizontalDisplacement() < 15)
+ return false;
+ return true;
}
@Override
protected void initDefaultCommand() {
}
}
->>>>>>> write methods getArmAngle and getHandAngle