change method getArmHeight to getArmVerticalDisplacement
[3501/stronghold-2016] / src / org / usfirst / frc / team3501 / robot / subsystems / DefenseArm.java
index adf9b5f87e1c31e5ec717ce66d48820af7780c8c..9ec9904a883c63decd2b981b048b209c1f544bb3 100755 (executable)
@@ -1,4 +1,3 @@
-<<<<<<< 41a8c498b73f7772d992078cea69ee5673d70668
 package org.usfirst.frc.team3501.robot.subsystems;
 
 import org.usfirst.frc.team3501.robot.Constants;
@@ -8,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;
+
+  // 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() {
@@ -35,15 +42,42 @@ 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[] 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;
   }
 
   /***
@@ -84,109 +118,31 @@ public class DefenseArm extends Subsystem {
     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