diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 9f524bc4..459e8184 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -158,6 +158,10 @@ public RobotContainer() { public void stop() { drive.stop(); superstructure.stop(); + conveyor.disableBrake(); + climb.disableBrake(); + arm.disableBrake(); + drive.disableBrake(); } public void updateSubsystems() { @@ -168,7 +172,10 @@ public void updateSubsystems() { public void updateUserInput() { Logger.recordOutput("Odometry/Gyro", drive.getGyroYaw().getDegrees()); - + conveyor.enableBrake(); + climb.enableBrake(); + arm.enableBrake(); + drive.enableBrake(); /* * Driver input w/ superstructure */ diff --git a/src/main/java/frc/robot/Superstructure.java b/src/main/java/frc/robot/Superstructure.java index d15635c8..f96f9691 100644 --- a/src/main/java/frc/robot/Superstructure.java +++ b/src/main/java/frc/robot/Superstructure.java @@ -115,6 +115,9 @@ public void periodic() { intake.setStopped(); conveyor.setStopped(); shooter.setStopped(); + conveyor.disableBrake(); + climb.disableBrake(); + arm.disableBrake(); // arm.setStopped(); break; case RESET: @@ -136,6 +139,9 @@ public void periodic() { * arm.setpositon(HOME) -- > HOME setpoint */ climb.setStopped(); + conveyor.enableBrake(); + climb.enableBrake(); + arm.enableBrake(); if (conveyor.hasNote()) { if (arm.getState() == ArmStates.AT_SETPOINT && shooter.getState() == ShooterStates.AT_SETPOINT) { diff --git a/src/main/java/frc/robot/subsystems/climb/Climb.java b/src/main/java/frc/robot/subsystems/climb/Climb.java index a044a1c3..99b4262b 100644 --- a/src/main/java/frc/robot/subsystems/climb/Climb.java +++ b/src/main/java/frc/robot/subsystems/climb/Climb.java @@ -3,6 +3,8 @@ import edu.wpi.first.wpilibj2.command.SubsystemBase; import org.littletonrobotics.junction.Logger; +import com.ctre.phoenix6.signals.NeutralModeValue; + public class Climb extends SubsystemBase { private ClimbIO io; private ClimbIOInputsAutoLogged inputs = new ClimbIOInputsAutoLogged(); @@ -72,4 +74,14 @@ public void resetRotationCount() { public void setStopped() { io.stop(); } + + /** Disables brake mode */ + public void disableBrake() { + io.setMotorMode(NeutralModeValue.Coast); + } + + /** Enables brake mode */ + public void enableBrake() { + io.setMotorMode(NeutralModeValue.Brake); + } } diff --git a/src/main/java/frc/robot/subsystems/climb/ClimbIO.java b/src/main/java/frc/robot/subsystems/climb/ClimbIO.java index f32a7b77..a392e753 100644 --- a/src/main/java/frc/robot/subsystems/climb/ClimbIO.java +++ b/src/main/java/frc/robot/subsystems/climb/ClimbIO.java @@ -2,6 +2,8 @@ import org.littletonrobotics.junction.AutoLog; +import com.ctre.phoenix6.signals.NeutralModeValue; + public interface ClimbIO { @AutoLog public class ClimbIOInputs { @@ -24,4 +26,7 @@ public class ClimbIOInputs { public void stopLeader(); public void stopFollower(); + + /** Changes motors to the given mode */ + public default void setMotorMode(NeutralModeValue mode) {} } diff --git a/src/main/java/frc/robot/subsystems/climb/ClimbIOTalonFX.java b/src/main/java/frc/robot/subsystems/climb/ClimbIOTalonFX.java index 4f6ac953..3f3f636d 100644 --- a/src/main/java/frc/robot/subsystems/climb/ClimbIOTalonFX.java +++ b/src/main/java/frc/robot/subsystems/climb/ClimbIOTalonFX.java @@ -53,6 +53,12 @@ public void setVoltage(double voltage) { } } + @Override + public void setMotorMode(NeutralModeValue mode) { + leader.setNeutralMode(mode); + follower.setNeutralMode(mode); + } + public void stop() { leader.stopMotor(); follower.stopMotor(); diff --git a/src/main/java/frc/robot/subsystems/conveyor/Conveyor.java b/src/main/java/frc/robot/subsystems/conveyor/Conveyor.java index b3c50a34..9934a3a4 100644 --- a/src/main/java/frc/robot/subsystems/conveyor/Conveyor.java +++ b/src/main/java/frc/robot/subsystems/conveyor/Conveyor.java @@ -2,6 +2,7 @@ import edu.wpi.first.wpilibj2.command.SubsystemBase; import org.littletonrobotics.junction.Logger; +import com.ctre.phoenix6.signals.NeutralModeValue; /** * Nemesis Conveyor for 2024 @@ -128,6 +129,16 @@ public boolean detectedShooterSide() { public boolean hasNote() { return inputs.hasNote; } + + /** Disables brake mode */ + public void disableBrake() { + io.setMotorMode(NeutralModeValue.Coast); + } + + /** Enables brake mode */ + public void enableBrake() { + io.setMotorMode(NeutralModeValue.Brake); + } } /** diff --git a/src/main/java/frc/robot/subsystems/conveyor/ConveyorIO.java b/src/main/java/frc/robot/subsystems/conveyor/ConveyorIO.java index 94886976..4567c1b6 100644 --- a/src/main/java/frc/robot/subsystems/conveyor/ConveyorIO.java +++ b/src/main/java/frc/robot/subsystems/conveyor/ConveyorIO.java @@ -2,6 +2,8 @@ import org.littletonrobotics.junction.AutoLog; +import com.ctre.phoenix6.signals.NeutralModeValue; + /** * @author Ian Keller */ @@ -37,4 +39,7 @@ public default void runPower(double power) {} public default void runPower(double feederPower, double diverterPower) {} public default void stop() {} + + /** Changes motors to the given mode */ + public default void setMotorMode(NeutralModeValue mode) {} } diff --git a/src/main/java/frc/robot/subsystems/conveyor/ConveyorIOTalonFX.java b/src/main/java/frc/robot/subsystems/conveyor/ConveyorIOTalonFX.java index 746493d6..b0695536 100644 --- a/src/main/java/frc/robot/subsystems/conveyor/ConveyorIOTalonFX.java +++ b/src/main/java/frc/robot/subsystems/conveyor/ConveyorIOTalonFX.java @@ -1,5 +1,6 @@ package frc.robot.subsystems.conveyor; +import com.ctre.phoenix.motorcontrol.NeutralMode; import com.ctre.phoenix6.BaseStatusSignal; import com.ctre.phoenix6.StatusSignal; import com.ctre.phoenix6.configs.TalonFXConfiguration; @@ -89,6 +90,12 @@ public void runPower(double feederPower, double diverterPower) { diverterMotor.set(diverterPower); } + @Override + public void setMotorMode(NeutralModeValue mode) { + feederMotor.setNeutralMode(mode); + diverterMotor.setNeutralMode(mode); + } + /** * Checks if there is something detected by the shooter side prox sensor * diff --git a/src/main/java/frc/robot/subsystems/drive/Drive.java b/src/main/java/frc/robot/subsystems/drive/Drive.java index 0b6b58b1..8dc65be0 100644 --- a/src/main/java/frc/robot/subsystems/drive/Drive.java +++ b/src/main/java/frc/robot/subsystems/drive/Drive.java @@ -351,4 +351,16 @@ public ChassisSpeeds getCurrentChassisSpeeds() { return currentSpeeds; } + + public void enableBrake() { + for (Module m: modules) { + m.setBrakeMode(true); + } + } + + public void disableBrake() { + for (Module m: modules) { + m.setBrakeMode(false); + } + } } diff --git a/src/main/java/frc/robot/subsystems/elevatorarm/Arm.java b/src/main/java/frc/robot/subsystems/elevatorarm/Arm.java index 6d05c7ce..9d224ccc 100644 --- a/src/main/java/frc/robot/subsystems/elevatorarm/Arm.java +++ b/src/main/java/frc/robot/subsystems/elevatorarm/Arm.java @@ -1,6 +1,8 @@ package frc.robot.subsystems.elevatorarm; import com.ctre.phoenix6.controls.DutyCycleOut; +import com.ctre.phoenix6.signals.NeutralModeValue; + import edu.wpi.first.wpilibj2.command.SubsystemBase; import frc.robot.Constants.ArmConstants; import frc.robot.util.HelperFn; @@ -138,4 +140,14 @@ public double getAbsolutePosition() { public ArmStates getState() { return state; } + + /** Disables brake mode */ + public void disableBrake() { + arm.setMotorMode(NeutralModeValue.Coast); + } + + /** Enables brake mode */ + public void enableBrake() { + arm.setMotorMode(NeutralModeValue.Brake); + } } diff --git a/src/main/java/frc/robot/subsystems/elevatorarm/ArmIO.java b/src/main/java/frc/robot/subsystems/elevatorarm/ArmIO.java index 7ae3abf2..9983774d 100644 --- a/src/main/java/frc/robot/subsystems/elevatorarm/ArmIO.java +++ b/src/main/java/frc/robot/subsystems/elevatorarm/ArmIO.java @@ -2,6 +2,8 @@ import org.littletonrobotics.junction.AutoLog; +import com.ctre.phoenix6.signals.NeutralModeValue; + public interface ArmIO { @AutoLog public static class ArmIOInputs { @@ -30,4 +32,7 @@ public default void enableBrakeMode(boolean enable) {} /** Updates tunable numbers */ public default void updateTunableNumbers() {} + + /** Changes motors to the given mode */ + public default void setMotorMode(NeutralModeValue mode) {} } diff --git a/src/main/java/frc/robot/subsystems/elevatorarm/ArmIOTalonFX.java b/src/main/java/frc/robot/subsystems/elevatorarm/ArmIOTalonFX.java index cca5f91b..2dfd4cc3 100644 --- a/src/main/java/frc/robot/subsystems/elevatorarm/ArmIOTalonFX.java +++ b/src/main/java/frc/robot/subsystems/elevatorarm/ArmIOTalonFX.java @@ -150,6 +150,11 @@ public void setPower(DutyCycleOut power) { arm.setControl(power); } + @Override + public void setMotorMode(NeutralModeValue mode) { + arm.setNeutralMode(mode); + } + // private static double CANCoderSensorUnitsToDegrees(double sensorUnits) { // return sensorUnits * (360.0) / 4096.0; // }