Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/frc/robot/Subsystems.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@

import static frc.robot.Subsystems.SubsystemConstants.DRIVEBASE_ENABLED;
import static frc.robot.Subsystems.SubsystemConstants.INTAKE_ENABLED;
import static frc.robot.Subsystems.SubsystemConstants.CLIMB_ENABLED;

import edu.wpi.first.wpilibj.smartdashboard.Mechanism2d;
import frc.robot.generated.AlphaTunerConstants;
import frc.robot.subsystems.drivebase.CommandSwerveDrivetrain;
import frc.robot.subsystems.intake.IntakeSubsystem;
import frc.robot.subsystems.ClimbSubsystem;

public class Subsystems {

// <SUBSYSTEM>_ENABLED constants go here
public static class SubsystemConstants {
public static final boolean DRIVEBASE_ENABLED = true;
public static final boolean INTAKE_ENABLED = true;
public static final boolean CLIMB_ENABLED = true;
}

public final CommandSwerveDrivetrain drivebaseSubsystem;
Expand Down Expand Up @@ -43,5 +46,12 @@ public Subsystems(Mechanism2d mechanism2d) {
} else {
intakeSubsystem = null;
}

if (CLIMB_ENABLED) {
Comment thread
qodo-code-review[bot] marked this conversation as resolved.
climbSubsystem = new ClimbSubsystem();

} else {
climbSubsystem = null;
Comment thread
kyladev marked this conversation as resolved.
}
}
}
83 changes: 83 additions & 0 deletions src/main/java/frc/robot/subsystems/ClimbSubsystem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import com.ctre.phoenix6.StatusCode;
import com.ctre.phoenix6.configs.TalonFXConfiguration;
import com.ctre.phoenix6.configs.TalonFXConfigurator;
import com.ctre.phoenix6.hardware.TalonFX;
import com.ctre.phoenix6.signals.NeutralModeValue;
import edu.wpi.first.units.measure.Current;
import edu.wpi.first.wpilibj.RobotBase;
import edu.wpi.first.wpilibj2.command.SubsystemBase;
import frc.robot.Hardware;

public class ClimbSubsystem extends SubsystemBase {
public final int CLIMB_MOTOR_ID = 0; // TODO: placeholder

private final TalonFX climbMotor;

private double targetPos;
public final double TARGET_POS_START = 0.0;
public final double TARGET_POS_END = 0.0;

// TODO: private final FlywheelSim motorSim; // TODO: add sim class later

public ClimbSubsystem() {
climbMotor = new TalonFX(CLIMB_MOTOR_ID);
climbConfig();
if (RobotBase.isSimulation()) {
// TODO: add sim later
// motorSim = null;
} else {
// motorSim = null;
}
}

public void climbConfig() {

TalonFXConfigurator cfg = climbMotor.getConfigurator();
TalonFXConfiguration talonFXConfiguration = new TalonFXConfiguration();

talonFXConfiguration.MotorOutput.NeutralMode = NeutralModeValue.Coast;

// enabling current limits
talonFXConfiguration.CurrentLimits.StatorCurrentLimit = 50;
talonFXConfiguration.CurrentLimits.StatorCurrentLimitEnable = true;
talonFXConfiguration.CurrentLimits.SupplyCurrentLimit = 30;
talonFXConfiguration.CurrentLimits.SupplyCurrentLimitEnable = true;
talonFXConfiguration.CurrentLimits.SupplyCurrentLowerLimit = 0;
talonFXConfiguration.Slot0.kA = 0.5;
talonFXConfiguration.Slot0.kS = 2.2;
talonFXConfiguration.Slot0.kP = 10;

StatusCode status = StatusCode.StatusCodeNotInitialized;
for (int i = 0; i < 5; ++i) {
status = climbMotor.getConfigurator().apply(talonFXConfigs);
if (status.isOK()) break;
}
if (!status.isOK()) {
DriverStation.reportError("Failed to apply ClimbMotor configs: " + status, false);
}
}

public Command setPos(double pos) {
return runOnce(
() -> {
climbMotor.setPosition(pos);
targetPos = pos;
});
}

public void stopMotor() {
climbMotor.stopMotor();
}

@Override
public void simulationPeriodic() {
// TODO: add sim periodic
// motorSim.setInput(climbMotor.getSimState().getMotorVoltage());
Comment thread
kyladev marked this conversation as resolved.
// motorSim.update(TimedRobot.kDefaultPeriod); // every 20 ms
}

@Override
public void periodic() {
// TODO: add stuff later
}
}
Loading