change variables arm and hand to armHorizontalDisplacement and armVerticalDisplacemen...
[3501/stronghold-2016] / src / org / usfirst / frc / team3501 / robot / subsystems / DefenseArm.java
index 5461efc6c8953e4808f324407d38a56c522bf40f..93dfc0ba339999304f6b4d32fa568c7f76be94a8 100755 (executable)
-package org.usfirst.frc.team3501.robot.subsystems;\r
-\r
-import org.usfirst.frc.team3501.robot.Constants;\r
-\r
-import edu.wpi.first.wpilibj.AnalogPotentiometer;\r
-import edu.wpi.first.wpilibj.command.Subsystem;\r
-\r
-public class DefenseArm extends Subsystem {\r
-  // Defense arm related objects\r
-  private AnalogPotentiometer potentiometer;\r
-\r
-  // Defense arm specific constants that relate to the degrees per pulse value\r
-  // for the potentiometers\r
-  private final static double PULSES_PER_ROTATION = 1; // in pulses\r
-  private final static double FULL_RANGE = 270.0; // in degrees\r
-  private final static double OFFSET = -135.0; // in degrees\r
-  private Double[] potentiometerArray; // change name, 5 to another #\r
-\r
-  public DefenseArm() {\r
-    potentiometer = new AnalogPotentiometer(Constants.DefenseArm.CHANNEL,\r
-        FULL_RANGE, OFFSET);\r
-  }\r
-\r
-  public double getDistance(int desiredArmLocation) {\r
-    return potentiometerArray[desiredArmLocation];\r
-  }\r
-\r
-  public Double[] putInValues() {\r
-    for (int i = 0; i < 3; i++) {\r
-      potentiometerArray[i] = (double) (45 * i);\r
-    }\r
-    return potentiometerArray;\r
-  }\r
-\r
-  public void moveArmTo() {\r
-\r
-  }\r
-\r
-  @Override\r
-  protected void initDefaultCommand() {\r
-  }\r
-}\r
+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 {
+  private AnalogPotentiometer defenseArmPotentiometer;
+  private AnalogPotentiometer defenseHandPotentiometer;
+  private CANTalon defenseArm;
+  private CANTalon defenseHand;
+  private double hookHeight;
+  private double footHeight;
+  private double[] potAngles = { 0, 45, 90 };
+
+  // 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);
+  }
+
+  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 getLevelValue(int level) {
+    if (level >= potAngles.length)
+      return potAngles[level];
+    else
+      return 0;
+  }
+
+  /***
+   * 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 getArmHorizontalDist() {
+    double armHorizontalDisplacement = Constants.DefenseArm.ARM_LENGTH
+        * Math.cos(getArmPotAngle());
+    double handHorizontalDisplacement = Constants.DefenseArm.HAND_LENGTH
+        * Math.cos(getHandPotAngle());
+    return (armHorizontalDisplacement + handHorizontalDisplacement);
+  }
+
+  public double getArmHeight() {
+    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 (getArmHorizontalDist() < 15)
+      return false;
+    return true;
+  }
+
+  @Override
+  protected void initDefaultCommand() {
+  }
+}