package frc1778.subsystems; import edu.wpi.first.wpilibj.CANJaguar; import edu.wpi.first.wpilibj.can.CANTimeoutException; import edu.wpi.first.wpilibj.command.Subsystem; import frc1778.RobotMap; import frc1778.commands.GateOp; public class Gate extends Subsystem { final double pid_gate[] = { 0.5, 0.45, 0.6 }; CANJaguar gate; RobotMap rMap; public Gate() { super("Gate"); rMap = new RobotMap(); try { gate = new CANJaguar(rMap.GATE_JAG_ID); gate.changeControlMode(CANJaguar.ControlMode.kPosition); gate.setPositionReference(CANJaguar.PositionReference.kPotentiometer); gate.setPID(pid_gate[0],pid_gate[1], pid_gate[2]); gate.disableControl(); } catch(CANTimeoutException e) { e.printStackTrace(); } } public void initDefaultCommand() { setDefaultCommand(new GateOp()); } public void setSafety(boolean enabled) { rMap.DBG("setSafety "+(enabled?"on":"off")); gate.setSafetyEnabled(enabled); } /** * BOOM - get the motor going * * @param left * @param right */ public void setGatePos(double gatepos) { rMap.DBG("set gatepos " + gatepos); try { gate.setX(gatepos); } catch (CANTimeoutException e) { rMap.DBG("X setGatePos"); } } /** * override jumper and turn brake on */ public void brakeMode() { rMap.DBG("breakMode"); try { gate.configNeutralMode(CANJaguar.NeutralMode.kBrake); } catch (CANTimeoutException e) { rMap.DBG("X brakeMode"); } } /** * override jumper and turn braking off so we coast */ public void coastMode() { rMap.DBG("coastMode"); try { gate.configNeutralMode(CANJaguar.NeutralMode.kCoast); } catch (CANTimeoutException e) { rMap.DBG("X coastMode"); } } /** * non-PID percent voltage mode(the usual one -1..0..1) */ public void percentMode() { rMap.DBG("percentMode"); try { gate.changeControlMode(CANJaguar.ControlMode.kPercentVbus); coastMode(); } catch (CANTimeoutException e) { rMap.DBG("X percentMode"); } } /** * non-PID absolute voltage mode */ public void voltageMode() { rMap.DBG("voltageMode"); try { gate.changeControlMode(CANJaguar.ControlMode.kVoltage); coastMode(); } catch (CANTimeoutException e) { rMap.DBG("X voltageMode"); } } /** * Always need to re-enable jaguar when the mode is changed. */ public void enable() { rMap.DBG("voltageMode"); try { gate.enableControl(0.0); setSafety(true); } catch (CANTimeoutException e) { rMap.DBG("X enable"); } } public void disable() { rMap.DBG("disable"); try { gate.disableControl(); setSafety(false); } catch (CANTimeoutException e) { rMap.DBG("X disable"); } } /** * PID speed controlled - call Enable to start PID */ public void speedMode() { rMap.DBG("speedMode"); try { gate.changeControlMode(CANJaguar.ControlMode.kSpeed); gate.setPID(0.7, 0.0, 0.0); coastMode(); } catch (CANTimeoutException e) { rMap.DBG("X speedMode"); } } /** * PID position controlled - call Enable to start PID */ public void positionMode() { try { gate.changeControlMode(CANJaguar.ControlMode.kPosition); gate.setPID(0.5, 0.45, 0.6); brakeMode(); } catch (CANTimeoutException e) { rMap.DBG("X positionMode"); } } /** * see if either position mode pid has reached desired spot that we set with * Straight()=>SetLeftRight * @return () */ public boolean atPosition() { try { System.out.println("lGet= " + gate.getX() + " rGet= " + gate.getX()); if (Math.abs(gate.getX() - gate.getPosition()) < 0.02) { return true; } if (Math.abs(gate.getX() - gate.getPosition()) < 0.02) { return true; } } catch (CANTimeoutException e) { rMap.DBG("X atPosition"); } return false; } public double getRightPosition() { try { return gate.getPosition(); } catch (CANTimeoutException e) { rMap.DBG("X getRightPosition"); } return 0.0; } public void jagDump(String str, CANJaguar j) { try { int fw = j.getFirmwareVersion(); double p = j.getPosition(); double s = j.getSpeed(); double c = j.getOutputCurrent(); rMap.DBG(str + " pos= " + p + " speed= " + s + " current= " + c + "firmware= " + fw); } catch (CANTimeoutException e) { rMap.DBG("X jagDump"); } } }