From 782582a5f0acbbaf630e47826e495fefc3a1a140 Mon Sep 17 00:00:00 2001 From: David Polcen Date: Thu, 9 Apr 2026 19:23:04 -0500 Subject: [PATCH 1/4] Added in the feeder to the transfer subsystem --- src/main/java/frc/robot/Configs.java | 39 +++++++++++++++---- src/main/java/frc/robot/Constants.java | 9 +++-- src/main/java/frc/robot/RobotContainer.java | 9 +++-- .../robot/subsystems/TransferSubsystem.java | 36 ++++++++++++----- 4 files changed, 70 insertions(+), 23 deletions(-) diff --git a/src/main/java/frc/robot/Configs.java b/src/main/java/frc/robot/Configs.java index fa4fa91..5c970ca 100644 --- a/src/main/java/frc/robot/Configs.java +++ b/src/main/java/frc/robot/Configs.java @@ -126,31 +126,56 @@ public static final class Shooter { } } - public static final TalonFXConfiguration TRANSFER_CONFIG = new TalonFXConfiguration(); + public static final TalonFXConfiguration KICKER_CONFIG = new TalonFXConfiguration(); static { - TRANSFER_CONFIG + KICKER_CONFIG .CurrentLimits .SupplyCurrentLimit = Constants.Transfer.CURRENT_LIMIT; - TRANSFER_CONFIG + KICKER_CONFIG .CurrentLimits .SupplyCurrentLowerLimit = Constants.Transfer.CURRENT_LOWER_LIMIT; - TRANSFER_CONFIG + KICKER_CONFIG .CurrentLimits .SupplyCurrentLowerTime = Constants.Transfer.CURRENT_LOWER_TIME; - TRANSFER_CONFIG + KICKER_CONFIG .MotorOutput - .Inverted = Constants.Transfer.MOTOR_INVERTED ? InvertedValue.Clockwise_Positive : InvertedValue.CounterClockwise_Positive; + .Inverted = Constants.Transfer.KICKER_INVERTED ? InvertedValue.Clockwise_Positive : InvertedValue.CounterClockwise_Positive; - TRANSFER_CONFIG + KICKER_CONFIG .MotorOutput .NeutralMode = NeutralModeValue.Brake; } + public static final TalonFXConfiguration FEEDER_CONFIG = new TalonFXConfiguration(); + + static { + FEEDER_CONFIG + .CurrentLimits + .SupplyCurrentLimit = Constants.Transfer.CURRENT_LIMIT; + + FEEDER_CONFIG + .CurrentLimits + .SupplyCurrentLimit = Constants.Transfer.CURRENT_LOWER_LIMIT; + + FEEDER_CONFIG + .CurrentLimits + .SupplyCurrentLimit = Constants.Transfer.CURRENT_LOWER_TIME; + + FEEDER_CONFIG + .MotorOutput + .Inverted = Constants.Transfer.FEEDER_INVERTED ? InvertedValue.Clockwise_Positive : InvertedValue.CounterClockwise_Positive; + + FEEDER_CONFIG + .MotorOutput + .NeutralMode = NeutralModeValue.Brake; + + } + public static class Intake { public static TalonFXConfiguration INTAKE_CONFIGURATION = new TalonFXConfiguration(); diff --git a/src/main/java/frc/robot/Constants.java b/src/main/java/frc/robot/Constants.java index b04c2cb..6ac10b4 100644 --- a/src/main/java/frc/robot/Constants.java +++ b/src/main/java/frc/robot/Constants.java @@ -510,15 +510,18 @@ public static final class Shooter { } public static class Transfer { - public static final int TRANSFER_MOTOR_ID = 58; + public static final int TRANSFER_KICKER_ID = 58; + public static final int TRANSFER_FEEDER_ID = 57; public static final int CURRENT_LIMIT = 75; //Amps public static final int CURRENT_LOWER_LIMIT = 25; public static final double CURRENT_LOWER_TIME = 0.5; - public static final boolean MOTOR_INVERTED = true; + public static final boolean KICKER_INVERTED = true; + public static final boolean FEEDER_INVERTED = false; - public static final double LOAD_POWER = 0.25; + public static final double KICKER_LOAD_POWER = 0.25; + public static final double FEEDER_LOAD_POWER = 0.1; } public static class VisionOdometryConstants { diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 8f9280c..a94a709 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -297,10 +297,11 @@ public void configureBindings() { /* Transfer runs ONLY while button AND solver valid */ - shootTrigger - .whileTrue( - transferSubsystem.getLoadCommand()); - + shootTrigger.whileTrue( + Commands.parallel( + transferSubsystem.getLoadCommand(), + transferSubsystem.getFeederLoadCommand())); + /* Intake pivot runs while button held */ intakeTrigger.whileTrue( intakePivot.deployIntakeCommand()); diff --git a/src/main/java/frc/robot/subsystems/TransferSubsystem.java b/src/main/java/frc/robot/subsystems/TransferSubsystem.java index cce688d..5d5000a 100644 --- a/src/main/java/frc/robot/subsystems/TransferSubsystem.java +++ b/src/main/java/frc/robot/subsystems/TransferSubsystem.java @@ -31,7 +31,8 @@ public class TransferSubsystem extends SubsystemBase { // -------------------------------------------------------------------- /** Motor driving the transfer mechanism. */ - private final TalonFX transferMotor; + private final TalonFX kickerMotor; + private final TalonFX feederMotor; // -------------------------------------------------------------------- // Construction / Configuration @@ -41,8 +42,11 @@ public class TransferSubsystem extends SubsystemBase { * Creates and configures the transfer subsystem. */ public TransferSubsystem() { - transferMotor = new TalonFX(Constants.Transfer.TRANSFER_MOTOR_ID, Constants.CANIVORE_LOOP_NAME); - transferMotor.getConfigurator().apply(Configs.TRANSFER_CONFIG); + kickerMotor = new TalonFX(Constants.Transfer.TRANSFER_KICKER_ID, Constants.CANIVORE_LOOP_NAME); + kickerMotor.getConfigurator().apply(Configs.KICKER_CONFIG); + + feederMotor = new TalonFX(Constants.Transfer.TRANSFER_FEEDER_ID, Constants.CANIVORE_LOOP_NAME); + feederMotor.getConfigurator().apply(Configs.FEEDER_CONFIG); } // -------------------------------------------------------------------- @@ -55,7 +59,11 @@ public TransferSubsystem() { * @param power desired power */ public void setPower(double power) { - transferMotor.set(power); + kickerMotor.set(power); + } + + public void setFeederPower(double power) { + feederMotor.set(power); } // -------------------------------------------------------------------- @@ -73,22 +81,32 @@ public void setPower(double power) { */ public Command getSetPowerCommand(double power) { return new InstantCommand( - () -> setPower(power), - this + () -> { + setPower(power); + setFeederPower(power); + } ); } - /** * @return a command that runs the transfer at the load speed */ public Command getLoadCommand() { - return getSetPowerCommand(Constants.Transfer.LOAD_POWER).withName("TransferLoad"); + return getSetPowerCommand(Constants.Transfer.KICKER_LOAD_POWER).withName("TransferLoad"); + } + + public Command getFeederLoadCommand() { + return getSetPowerCommand(Constants.Transfer.FEEDER_LOAD_POWER).withName("FeederLoad"); } /** * @return a command that stops the transfer motor */ public Command getStopCommand() { - return new InstantCommand(() -> transferMotor.stopMotor()); + return new InstantCommand( + () -> { + setPower(0.0); + setFeederPower(0.0); + } + ); } } From 04b0bd9804acae494102dfc42638298a055f5de6 Mon Sep 17 00:00:00 2001 From: David Polcen Date: Fri, 10 Apr 2026 18:11:37 -0500 Subject: [PATCH 2/4] Switched feeder from Brake mode to Coast --- src/main/java/frc/robot/Configs.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/frc/robot/Configs.java b/src/main/java/frc/robot/Configs.java index 5c970ca..22f8ceb 100644 --- a/src/main/java/frc/robot/Configs.java +++ b/src/main/java/frc/robot/Configs.java @@ -172,7 +172,7 @@ public static final class Shooter { FEEDER_CONFIG .MotorOutput - .NeutralMode = NeutralModeValue.Brake; + .NeutralMode = NeutralModeValue.Coast; } From 1219565fbafc4c0e425f56bff25debdf0df5d1f5 Mon Sep 17 00:00:00 2001 From: David Polcen Date: Fri, 10 Apr 2026 18:20:55 -0500 Subject: [PATCH 3/4] Removed the Canivore from the feeder --- src/main/java/frc/robot/subsystems/TransferSubsystem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/frc/robot/subsystems/TransferSubsystem.java b/src/main/java/frc/robot/subsystems/TransferSubsystem.java index 5d5000a..7a85e32 100644 --- a/src/main/java/frc/robot/subsystems/TransferSubsystem.java +++ b/src/main/java/frc/robot/subsystems/TransferSubsystem.java @@ -45,7 +45,7 @@ public TransferSubsystem() { kickerMotor = new TalonFX(Constants.Transfer.TRANSFER_KICKER_ID, Constants.CANIVORE_LOOP_NAME); kickerMotor.getConfigurator().apply(Configs.KICKER_CONFIG); - feederMotor = new TalonFX(Constants.Transfer.TRANSFER_FEEDER_ID, Constants.CANIVORE_LOOP_NAME); + feederMotor = new TalonFX(Constants.Transfer.TRANSFER_FEEDER_ID); feederMotor.getConfigurator().apply(Configs.FEEDER_CONFIG); } From 97e7058b20d6813286294c8412b0e109ac26d706 Mon Sep 17 00:00:00 2001 From: CrumblzTheEgg Date: Fri, 10 Apr 2026 19:02:16 -0500 Subject: [PATCH 4/4] fix: fix bugs with transfer config and commands --- src/main/java/frc/robot/Configs.java | 4 +- src/main/java/frc/robot/Constants.java | 5 ++- src/main/java/frc/robot/RobotContainer.java | 42 ++++++++----------- .../robot/subsystems/TransferSubsystem.java | 27 ++++++------ 4 files changed, 36 insertions(+), 42 deletions(-) diff --git a/src/main/java/frc/robot/Configs.java b/src/main/java/frc/robot/Configs.java index 22f8ceb..ee2ab57 100644 --- a/src/main/java/frc/robot/Configs.java +++ b/src/main/java/frc/robot/Configs.java @@ -160,11 +160,11 @@ public static final class Shooter { FEEDER_CONFIG .CurrentLimits - .SupplyCurrentLimit = Constants.Transfer.CURRENT_LOWER_LIMIT; + .SupplyCurrentLowerLimit = Constants.Transfer.CURRENT_LOWER_LIMIT; FEEDER_CONFIG .CurrentLimits - .SupplyCurrentLimit = Constants.Transfer.CURRENT_LOWER_TIME; + .SupplyCurrentLowerTime = Constants.Transfer.CURRENT_LOWER_TIME; FEEDER_CONFIG .MotorOutput diff --git a/src/main/java/frc/robot/Constants.java b/src/main/java/frc/robot/Constants.java index e646ef3..6f8a677 100644 --- a/src/main/java/frc/robot/Constants.java +++ b/src/main/java/frc/robot/Constants.java @@ -518,10 +518,11 @@ public static class Transfer { public static final double CURRENT_LOWER_TIME = 0.5; public static final boolean KICKER_INVERTED = true; - public static final boolean FEEDER_INVERTED = false; + public static final boolean FEEDER_INVERTED = true; + public static final double KICKER_LOAD_POWER = 0.25; - public static final double FEEDER_LOAD_POWER = 0.1; + public static final double FEEDER_LOAD_POWER = 0.5; } public static class VisionOdometryConstants { diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 61f034d..c6dde69 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -198,14 +198,12 @@ public void setupSmartDashboard() { .setSpeedMultiplierSupplier(() -> shooterPercent.get() / 100.0); Command floatCommand = new ConditionalCommand( - Commands.parallel( - turretSubsystem.getFloatCommand(), - intakePivot.getFloatCommand() - ) - .withTimeout(Constants.Operator.Misc.FLOAT_TIME), - Commands.none(), - () -> !FieldUtil.isEnabled() - ).ignoringDisable(true); + Commands.parallel( + turretSubsystem.getFloatCommand(), + intakePivot.getFloatCommand()) + .withTimeout(Constants.Operator.Misc.FLOAT_TIME), + Commands.none(), + () -> !FieldUtil.isEnabled()).ignoringDisable(true); SmartDashboard.putData("FloatCommand", floatCommand); SmartDashboard.putNumber("Auto/StartDelay", Constants.Operator.Auto.DEFAULT_START_DELAY); @@ -369,7 +367,7 @@ public void configureBindings() { Trigger intakeTrigger = new Trigger(() -> driverController.getRightBumperButton()); Trigger reverseTransferTrigger = new Trigger(() -> driverController.getXButton()); - + // Driver X button: hold to lock robot pose (X-lock) Trigger xLockTrigger = new Trigger(() -> driverController.getXButton()); xLockTrigger.whileTrue(driveSubsystem.getLockPoseCommand()); @@ -380,15 +378,11 @@ public void configureBindings() { targetingSupplier, driveSubsystem::getPose, driveSubsystem::getVelocity)); - - /* Transfer runs ONLY while button AND solver valid */ shootTrigger.whileTrue( - Commands.parallel( - transferSubsystem.getLoadCommand(), - transferSubsystem.getFeederLoadCommand())); - + transferSubsystem.getLoadCommand()); + /* Intake pivot runs while button held */ intakeTrigger.whileTrue( intakePivot.deployIntakeCommand()); @@ -410,7 +404,7 @@ public void configureBindings() { intakeRoller.getStopCommand())); reverseTransferTrigger.whileTrue( - transferSubsystem.getSetPowerCommand(-1)).onFalse(transferSubsystem.getSetPowerCommand(0)); + transferSubsystem.getPowerCommand(-1.0, -1.0)).onFalse(transferSubsystem.getStopCommand()); // ========================= // Turret Offset Adjustment (POV Left / Right) @@ -511,10 +505,10 @@ public void configureBindings() { new InstantCommand(() -> xHeld = false)); // new Trigger( - // () -> operatorController.getYButton()).onTrue( - // new InstantCommand(() -> yHeld = true)) - // .onFalse( - // new InstantCommand(() -> yHeld = false)); + // () -> operatorController.getYButton()).onTrue( + // new InstantCommand(() -> yHeld = true)) + // .onFalse( + // new InstantCommand(() -> yHeld = false)); } @@ -717,12 +711,12 @@ private Command getIntakeStrategyCommand() { case B_N_F_R: return new DriveToSequenceCommand(driveSubsystem, Constants.Operator.Auto.BACK_N_FORTH_RIGHT_SEQUENCE.stream() - .map(FieldUtil::flipIfRed) - .toList()); + .map(FieldUtil::flipIfRed) + .toList()); case B_N_F_L: return new DriveToSequenceCommand(driveSubsystem, Constants.Operator.Auto.BACK_N_FORTH_LEFT_SEQUENCE.stream() - .map(FieldUtil::flipIfRed) - .toList()); + .map(FieldUtil::flipIfRed) + .toList()); default: return Commands.none(); } diff --git a/src/main/java/frc/robot/subsystems/TransferSubsystem.java b/src/main/java/frc/robot/subsystems/TransferSubsystem.java index 7a85e32..4f53fe3 100644 --- a/src/main/java/frc/robot/subsystems/TransferSubsystem.java +++ b/src/main/java/frc/robot/subsystems/TransferSubsystem.java @@ -58,7 +58,7 @@ public TransferSubsystem() { * * @param power desired power */ - public void setPower(double power) { + public void setKickerPower(double power) { kickerMotor.set(power); } @@ -79,23 +79,22 @@ public void setFeederPower(double power) { * @param power desired transfer power * @return an instant command that sets motor power */ - public Command getSetPowerCommand(double power) { + public Command getPowerCommand(double kickerPower, double feederPower) { return new InstantCommand( () -> { - setPower(power); - setFeederPower(power); + setKickerPower(kickerPower); + setFeederPower(feederPower); } ); } - /** - * @return a command that runs the transfer at the load speed - */ - public Command getLoadCommand() { - return getSetPowerCommand(Constants.Transfer.KICKER_LOAD_POWER).withName("TransferLoad"); - } - public Command getFeederLoadCommand() { - return getSetPowerCommand(Constants.Transfer.FEEDER_LOAD_POWER).withName("FeederLoad"); + public Command getLoadCommand() { + return new InstantCommand( + () -> { + setKickerPower(Constants.Transfer.KICKER_LOAD_POWER); + setFeederPower(Constants.Transfer.FEEDER_LOAD_POWER); + } + ); } /** @@ -104,8 +103,8 @@ public Command getFeederLoadCommand() { public Command getStopCommand() { return new InstantCommand( () -> { - setPower(0.0); - setFeederPower(0.0); + kickerMotor.stopMotor(); + feederMotor.stopMotor(); } ); }