From 44aea039899f916a22bb5a07895559e81d458615 Mon Sep 17 00:00:00 2001 From: LoganCHS <824922@seq.org> Date: Sun, 1 Feb 2026 14:45:45 -0800 Subject: [PATCH 1/8] added intake motors --- .../java/org/carlmontrobotics/Constants.java | 5 +++ .../org/carlmontrobotics/RobotContainer.java | 14 ++++--- .../commands/IntakeCommands/IntakeBalls.java | 42 +++++++++++++++++++ .../subsystems/Drivetrain.java | 5 ++- .../carlmontrobotics/subsystems/Intake.java | 33 +++++++++++++++ 5 files changed, 91 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/carlmontrobotics/commands/IntakeCommands/IntakeBalls.java create mode 100644 src/main/java/org/carlmontrobotics/subsystems/Intake.java diff --git a/src/main/java/org/carlmontrobotics/Constants.java b/src/main/java/org/carlmontrobotics/Constants.java index 3a841ee..dd65ce0 100644 --- a/src/main/java/org/carlmontrobotics/Constants.java +++ b/src/main/java/org/carlmontrobotics/Constants.java @@ -51,6 +51,7 @@ public static final class Driver { public static final class Manipulator { public static final int port = 1; public static final int Y = Button.kY.value; + public static final int INTAKE_BUTTON = Button.kA.value; //get real button later } public static final double JOY_THRESH = 0.13; @@ -268,5 +269,9 @@ public static class LimeLightc { public static final int[] sampleLL1_VALID_IDS = {1, 2, 12, 13}; public static final int[] sampleLL2_VALID_IDS = {1, 6, 7, 8, 9, 10, 11, 17, 18, 19, 20, 21, 22}; } + public static final class IntakeC { // get real values later + public static final int INTAKE_ID = 1; + public static final double INTAKE_SPEED = 0.1; + } } //#endregion \ No newline at end of file diff --git a/src/main/java/org/carlmontrobotics/RobotContainer.java b/src/main/java/org/carlmontrobotics/RobotContainer.java index b921a51..e866b8a 100644 --- a/src/main/java/org/carlmontrobotics/RobotContainer.java +++ b/src/main/java/org/carlmontrobotics/RobotContainer.java @@ -8,9 +8,6 @@ //199 files import org.carlmontrobotics.subsystems.*; - -import org.carlmontrobotics.commands.DriveCommands.TeleopDrive; - import java.util.ArrayList; import java.util.List; @@ -53,7 +50,7 @@ import edu.wpi.first.wpilibj2.command.button.POVButton; import edu.wpi.first.wpilibj2.command.button.Trigger; -//constats +//constants import org.carlmontrobotics.Constants.OI; import org.carlmontrobotics.Constants.OI.Driver; import org.carlmontrobotics.Constants.OI.Manipulator; @@ -63,7 +60,8 @@ import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - +import org.carlmontrobotics.commands.DriveCommands.TeleopDrive; +import org.carlmontrobotics.commands.IntakeCommands.IntakeBalls; public class RobotContainer { @@ -74,6 +72,7 @@ public class RobotContainer { public final Limelight limelight = new Limelight(); public final Drivetrain drivetrain = new Drivetrain(limelight); + public final Intake intake = new Intake(); private SendableChooser autoChooser = new SendableChooser<>(); public boolean alignOverride = true; @@ -116,7 +115,10 @@ private void setBindingsDriver() { .onFalse(new InstantCommand(() -> drivetrain.setExtraSpeedMult(0))); } - private void setBindingsManipulator() {} + private void setBindingsManipulator() { + new JoystickButton(manipulatorController, Manipulator.INTAKE_BUTTON) + .whileTrue(new IntakeBalls(intake)); + } //#endregion //#region AutoMaking private void RegisterAutoCommands() {} diff --git a/src/main/java/org/carlmontrobotics/commands/IntakeCommands/IntakeBalls.java b/src/main/java/org/carlmontrobotics/commands/IntakeCommands/IntakeBalls.java new file mode 100644 index 0000000..412bfc7 --- /dev/null +++ b/src/main/java/org/carlmontrobotics/commands/IntakeCommands/IntakeBalls.java @@ -0,0 +1,42 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package org.carlmontrobotics.commands.IntakeCommands; + +import edu.wpi.first.wpilibj2.command.Command; + +import org.carlmontrobotics.subsystems.Intake; +import org.carlmontrobotics.Constants.IntakeC; + +/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */ +public class IntakeBalls extends Command { + Intake intake; + /** Creates a new IntakeBalls. */ + public IntakeBalls(Intake intake) { + this.intake = intake; + // Use addRequirements() here to declare subsystem dependencies. + } + + // Called when the command is initially scheduled. + @Override + public void initialize() { + intake.spinIntake(IntakeC.INTAKE_SPEED); + } + + // Called every time the scheduler runs while the command is scheduled. + @Override + public void execute() {} + + // Called once the command ends or is interrupted. + @Override + public void end(boolean interrupted) { + intake.spinIntake(0); + } + + // Returns true when the command should end. + @Override + public boolean isFinished() { + return false; + } +} diff --git a/src/main/java/org/carlmontrobotics/subsystems/Drivetrain.java b/src/main/java/org/carlmontrobotics/subsystems/Drivetrain.java index 404994a..e6690f3 100644 --- a/src/main/java/org/carlmontrobotics/subsystems/Drivetrain.java +++ b/src/main/java/org/carlmontrobotics/subsystems/Drivetrain.java @@ -109,10 +109,11 @@ import org.carlmontrobotics.Constants; import org.carlmontrobotics.Constants.Drivetrainc; import org.carlmontrobotics.Constants.Drivetrainc.Autoc; -import org.carlmontrobotics.Robot; -import org.carlmontrobotics.subsystems.Limelight; import org.carlmontrobotics.commands.DriveCommands.RotateToFieldRelativeAngle; import org.carlmontrobotics.commands.DriveCommands.TeleopDrive; +import org.carlmontrobotics.Robot; +import org.carlmontrobotics.subsystems.Limelight; + import static org.carlmontrobotics.Constants.Drivetrainc.*; import static org.carlmontrobotics.Constants.LimeLightc.*; diff --git a/src/main/java/org/carlmontrobotics/subsystems/Intake.java b/src/main/java/org/carlmontrobotics/subsystems/Intake.java new file mode 100644 index 0000000..7f8fbfa --- /dev/null +++ b/src/main/java/org/carlmontrobotics/subsystems/Intake.java @@ -0,0 +1,33 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package org.carlmontrobotics.subsystems; + +import org.carlmontrobotics.lib199.MotorConfig; +import org.carlmontrobotics.lib199.MotorControllerFactory; + +import org.carlmontrobotics.Constants.IntakeC; + +import edu.wpi.first.wpilibj2.command.SubsystemBase; + +import com.revrobotics.spark.SparkMax; + +public class Intake extends SubsystemBase { + SparkMax intake; + /** Creates a new Intake. */ + public Intake() { + SparkMax intake = MotorControllerFactory.createSparkMax(IntakeC.INTAKE_ID, MotorConfig.NEO); + } + + //FIXME add configs + + public void spinIntake(double intakeSpeed) { + intake.set(intakeSpeed); + } + + @Override + public void periodic() { + // This method will be called once per scheduler run + } +} From 1b57b488eb1d6bb6e1447dac295486fc3c32efd8 Mon Sep 17 00:00:00 2001 From: LoganCHS <824922@seq.org> Date: Tue, 3 Feb 2026 17:39:11 -0800 Subject: [PATCH 2/8] added outtake motors with pid --- .../java/org/carlmontrobotics/Constants.java | 11 ++++- .../org/carlmontrobotics/RobotContainer.java | 6 +++ .../commands/OuttakeCommands/ShootBalls.java | 43 +++++++++++++++++ .../carlmontrobotics/subsystems/Intake.java | 4 +- .../carlmontrobotics/subsystems/Outtake.java | 47 +++++++++++++++++++ 5 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/carlmontrobotics/commands/OuttakeCommands/ShootBalls.java create mode 100644 src/main/java/org/carlmontrobotics/subsystems/Outtake.java diff --git a/src/main/java/org/carlmontrobotics/Constants.java b/src/main/java/org/carlmontrobotics/Constants.java index dd65ce0..4de372c 100644 --- a/src/main/java/org/carlmontrobotics/Constants.java +++ b/src/main/java/org/carlmontrobotics/Constants.java @@ -52,6 +52,7 @@ public static final class Manipulator { public static final int port = 1; public static final int Y = Button.kY.value; public static final int INTAKE_BUTTON = Button.kA.value; //get real button later + public static final int OUTTAKE_BUTTON = Button.kB.value; //get real button later } public static final double JOY_THRESH = 0.13; @@ -269,9 +270,17 @@ public static class LimeLightc { public static final int[] sampleLL1_VALID_IDS = {1, 2, 12, 13}; public static final int[] sampleLL2_VALID_IDS = {1, 6, 7, 8, 9, 10, 11, 17, 18, 19, 20, 21, 22}; } - public static final class IntakeC { // get real values later + //#region Manipulator + public static final class IntakeC { // FIXME get real values for intake and outtake public static final int INTAKE_ID = 1; public static final double INTAKE_SPEED = 0.1; } + public static final class OuttakeC { + public static final int OUTTAKE_ID = 14; + public static final double OUTTAKE_SPEED = 0.2; + public static final double OUTTAKE_KP = 0.01; + public static final double OUTTAKE_KI = 0.01; + public static final double OUTTAKE_KD = 0.01; + } } //#endregion \ No newline at end of file diff --git a/src/main/java/org/carlmontrobotics/RobotContainer.java b/src/main/java/org/carlmontrobotics/RobotContainer.java index e866b8a..a2cd5d9 100644 --- a/src/main/java/org/carlmontrobotics/RobotContainer.java +++ b/src/main/java/org/carlmontrobotics/RobotContainer.java @@ -45,6 +45,7 @@ import edu.wpi.first.wpilibj2.command.PrintCommand; import edu.wpi.first.wpilibj2.command.SequentialCommandGroup; import edu.wpi.first.wpilibj2.command.WaitCommand; + //control bindings import edu.wpi.first.wpilibj2.command.button.JoystickButton; import edu.wpi.first.wpilibj2.command.button.POVButton; @@ -52,6 +53,7 @@ //constants import org.carlmontrobotics.Constants.OI; +import org.carlmontrobotics.Constants.OuttakeC; import org.carlmontrobotics.Constants.OI.Driver; import org.carlmontrobotics.Constants.OI.Manipulator; import org.carlmontrobotics.Constants.Drivetrainc.Autoc; @@ -62,6 +64,7 @@ import org.carlmontrobotics.commands.DriveCommands.TeleopDrive; import org.carlmontrobotics.commands.IntakeCommands.IntakeBalls; +import org.carlmontrobotics.commands.OuttakeCommands.ShootBalls; public class RobotContainer { @@ -73,6 +76,7 @@ public class RobotContainer { public final Drivetrain drivetrain = new Drivetrain(limelight); public final Intake intake = new Intake(); + public final Outtake outtake = new Outtake(OuttakeC.OUTTAKE_KP, OuttakeC.OUTTAKE_KI, OuttakeC.OUTTAKE_KD); private SendableChooser autoChooser = new SendableChooser<>(); public boolean alignOverride = true; @@ -118,6 +122,8 @@ private void setBindingsDriver() { private void setBindingsManipulator() { new JoystickButton(manipulatorController, Manipulator.INTAKE_BUTTON) .whileTrue(new IntakeBalls(intake)); + new JoystickButton(manipulatorController, Manipulator.OUTTAKE_BUTTON) + .whileTrue(new ShootBalls(outtake)); } //#endregion //#region AutoMaking diff --git a/src/main/java/org/carlmontrobotics/commands/OuttakeCommands/ShootBalls.java b/src/main/java/org/carlmontrobotics/commands/OuttakeCommands/ShootBalls.java new file mode 100644 index 0000000..680d9b4 --- /dev/null +++ b/src/main/java/org/carlmontrobotics/commands/OuttakeCommands/ShootBalls.java @@ -0,0 +1,43 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package org.carlmontrobotics.commands.OuttakeCommands; + +import edu.wpi.first.wpilibj2.command.Command; + +import org.carlmontrobotics.subsystems.Outtake; + +import org.carlmontrobotics.Constants.OuttakeC; + +/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */ +public class ShootBalls extends Command { + Outtake outtake; + /** Creates a new OuttakeBalls. */ + public ShootBalls(Outtake outtake) { + this.outtake = outtake; + // Use addRequirements() here to declare subsystem dependencies. + } + + // Called when the command is initially scheduled. + @Override + public void initialize() { + outtake.spinOuttake(OuttakeC.OUTTAKE_SPEED); + } + + // Called every time the scheduler runs while the command is scheduled. + @Override + public void execute() {} + + // Called once the command ends or is interrupted. + @Override + public void end(boolean interrupted) { + outtake.spinOuttake(0); + } + + // Returns true when the command should end. + @Override + public boolean isFinished() { + return false; + } +} diff --git a/src/main/java/org/carlmontrobotics/subsystems/Intake.java b/src/main/java/org/carlmontrobotics/subsystems/Intake.java index 7f8fbfa..994913c 100644 --- a/src/main/java/org/carlmontrobotics/subsystems/Intake.java +++ b/src/main/java/org/carlmontrobotics/subsystems/Intake.java @@ -18,9 +18,9 @@ public class Intake extends SubsystemBase { /** Creates a new Intake. */ public Intake() { SparkMax intake = MotorControllerFactory.createSparkMax(IntakeC.INTAKE_ID, MotorConfig.NEO); - } - //FIXME add configs + //FIXME add configs if needed + } public void spinIntake(double intakeSpeed) { intake.set(intakeSpeed); diff --git a/src/main/java/org/carlmontrobotics/subsystems/Outtake.java b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java new file mode 100644 index 0000000..0665216 --- /dev/null +++ b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java @@ -0,0 +1,47 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package org.carlmontrobotics.subsystems; + +import org.carlmontrobotics.lib199.MotorConfig; +import org.carlmontrobotics.lib199.MotorControllerFactory; + +import org.carlmontrobotics.Constants.OuttakeC; + +import edu.wpi.first.wpilibj2.command.SubsystemBase; + +import com.revrobotics.spark.FeedbackSensor; +import com.revrobotics.spark.SparkBase.ControlType; +import com.revrobotics.spark.SparkFlex; +import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; +import com.revrobotics.spark.config.SparkFlexConfig; +import com.revrobotics.spark.SparkClosedLoopController; + +public class Outtake extends SubsystemBase { + SparkFlex outtake; + private double kP; + private double kI; + private double kD; + private SparkClosedLoopController pidController; + /** Creates a new Outtake. */ + public Outtake(double kP, double kI, double kD) { + this.kP = kP; + this.kI = kI; + this.kD = kD; + outtake = MotorControllerFactory.createSparkFlex(OuttakeC.OUTTAKE_ID); + + final SparkFlexConfig outtakeConfig = new SparkFlexConfig(); + outtakeConfig.idleMode(IdleMode.kCoast); + outtakeConfig.closedLoop.pid(kP,kI,kD).feedbackSensor(FeedbackSensor.kAbsoluteEncoder); + } + + public void spinOuttake(double input) { + pidController.setReference(input, ControlType.kDutyCycle); + } + + @Override + public void periodic() { + // This method will be called once per scheduler run + } +} From c97015e77c87562c034d35254e4766ebc128353e Mon Sep 17 00:00:00 2001 From: Team 199 Driver Station Computer <35879629+DriverStationComputer@users.noreply.github.com> Date: Fri, 6 Feb 2026 16:57:54 -0800 Subject: [PATCH 3/8] wip pid revisions/testing --- .../java/org/carlmontrobotics/Constants.java | 4 +- src/main/java/org/carlmontrobotics/Robot.java | 118 +++++++++--------- .../org/carlmontrobotics/RobotContainer.java | 4 +- .../commands/IntakeCommands/IntakeBalls.java | 42 ------- .../commands/OuttakeCommands/ShootBalls.java | 43 ------- .../carlmontrobotics/subsystems/Outtake.java | 10 +- 6 files changed, 72 insertions(+), 149 deletions(-) delete mode 100644 src/main/java/org/carlmontrobotics/commands/IntakeCommands/IntakeBalls.java delete mode 100644 src/main/java/org/carlmontrobotics/commands/OuttakeCommands/ShootBalls.java diff --git a/src/main/java/org/carlmontrobotics/Constants.java b/src/main/java/org/carlmontrobotics/Constants.java index 4de372c..c68b2a3 100644 --- a/src/main/java/org/carlmontrobotics/Constants.java +++ b/src/main/java/org/carlmontrobotics/Constants.java @@ -271,14 +271,14 @@ public static class LimeLightc { public static final int[] sampleLL2_VALID_IDS = {1, 6, 7, 8, 9, 10, 11, 17, 18, 19, 20, 21, 22}; } //#region Manipulator - public static final class IntakeC { // FIXME get real values for intake and outtake + public static final class IntakeC { // FIXME get real values public static final int INTAKE_ID = 1; public static final double INTAKE_SPEED = 0.1; } public static final class OuttakeC { public static final int OUTTAKE_ID = 14; public static final double OUTTAKE_SPEED = 0.2; - public static final double OUTTAKE_KP = 0.01; + public static final double OUTTAKE_KP = 0.05; public static final double OUTTAKE_KI = 0.01; public static final double OUTTAKE_KD = 0.01; } diff --git a/src/main/java/org/carlmontrobotics/Robot.java b/src/main/java/org/carlmontrobotics/Robot.java index 0c602ae..70aed8a 100644 --- a/src/main/java/org/carlmontrobotics/Robot.java +++ b/src/main/java/org/carlmontrobotics/Robot.java @@ -8,6 +8,9 @@ import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.CommandScheduler; +import org.carlmontrobotics.subsystems.Outtake; +import org.carlmontrobotics.commands.ManipulatorCommands.ShootBalls; + /** * The methods in this class are called automatically corresponding to each mode, as described in * the TimedRobot documentation. If you change the name of this class or the package after creating @@ -17,64 +20,67 @@ public class Robot extends TimedRobot { private Command m_autonomousCommand; private final RobotContainer m_robotContainer; - - /** - * This function is run when the robot is first started up and should be used for any - * initialization code. - */ - public Robot() { - // Instantiate our RobotContainer. This will perform all our button bindings, and put our - // autonomous chooser on the dashboard. - m_robotContainer = new RobotContainer(); - } - - /** - * This function is called every 20 ms, no matter the mode. Use this for items like diagnostics - * that you want ran during disabled, autonomous, teleoperated and test. - * - *

This runs after the mode specific periodic functions, but before LiveWindow and - * SmartDashboard integrated updating. - */ - @Override - public void robotPeriodic() { - // Runs the Scheduler. This is responsible for polling buttons, adding newly-scheduled - // commands, running already-scheduled commands, removing finished or interrupted commands, - // and running subsystem periodic() methods. This must be called from the robot's periodic - // block in order for anything in the Command-based framework to work. - CommandScheduler.getInstance().run(); - } - - /** This function is called once each time the robot enters Disabled mode. */ - @Override - public void disabledInit() {} - - @Override - public void disabledPeriodic() {} - - /** This autonomous runs the autonomous command selected by your {@link RobotContainer} class. */ - @Override - public void autonomousInit() { - m_autonomousCommand = m_robotContainer.getAutonomousCommand(); - - // schedule the autonomous command (example) - if (m_autonomousCommand != null) { - CommandScheduler.getInstance().schedule(m_autonomousCommand); + + private Outtake outtake; + + /** + * This function is run when the robot is first started up and should be used for any + * initialization code. + */ + public Robot() { + // Instantiate our RobotContainer. This will perform all our button bindings, and put our + // autonomous chooser on the dashboard. + m_robotContainer = new RobotContainer(); } - } - - /** This function is called periodically during autonomous. */ - @Override - public void autonomousPeriodic() {} - - @Override - public void teleopInit() { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (m_autonomousCommand != null) { - m_autonomousCommand.cancel(); + + /** + * This function is called every 20 ms, no matter the mode. Use this for items like diagnostics + * that you want ran during disabled, autonomous, teleoperated and test. + * + *

This runs after the mode specific periodic functions, but before LiveWindow and + * SmartDashboard integrated updating. + */ + @Override + public void robotPeriodic() { + // Runs the Scheduler. This is responsible for polling buttons, adding newly-scheduled + // commands, running already-scheduled commands, removing finished or interrupted commands, + // and running subsystem periodic() methods. This must be called from the robot's periodic + // block in order for anything in the Command-based framework to work. + CommandScheduler.getInstance().run(); + } + + /** This function is called once each time the robot enters Disabled mode. */ + @Override + public void disabledInit() {} + + @Override + public void disabledPeriodic() {} + + /** This autonomous runs the autonomous command selected by your {@link RobotContainer} class. */ + @Override + public void autonomousInit() { + m_autonomousCommand = m_robotContainer.getAutonomousCommand(); + + // schedule the autonomous command (example) + if (m_autonomousCommand != null) { + CommandScheduler.getInstance().schedule(m_autonomousCommand); + } } + + /** This function is called periodically during autonomous. */ + @Override + public void autonomousPeriodic() {} + + @Override + public void teleopInit() { + // This makes sure that the autonomous stops running when + // teleop starts running. If you want the autonomous to + // continue until interrupted by another command, remove + // this line or comment it out. + if (m_autonomousCommand != null) { + m_autonomousCommand.cancel(); + } + new ShootBalls(outtake); } /** This function is called periodically during operator control. */ diff --git a/src/main/java/org/carlmontrobotics/RobotContainer.java b/src/main/java/org/carlmontrobotics/RobotContainer.java index a2cd5d9..5a86b56 100644 --- a/src/main/java/org/carlmontrobotics/RobotContainer.java +++ b/src/main/java/org/carlmontrobotics/RobotContainer.java @@ -63,8 +63,8 @@ import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; import org.carlmontrobotics.commands.DriveCommands.TeleopDrive; -import org.carlmontrobotics.commands.IntakeCommands.IntakeBalls; -import org.carlmontrobotics.commands.OuttakeCommands.ShootBalls; +import org.carlmontrobotics.commands.ManipulatorCommands.IntakeBalls; +import org.carlmontrobotics.commands.ManipulatorCommands.ShootBalls; public class RobotContainer { diff --git a/src/main/java/org/carlmontrobotics/commands/IntakeCommands/IntakeBalls.java b/src/main/java/org/carlmontrobotics/commands/IntakeCommands/IntakeBalls.java deleted file mode 100644 index 412bfc7..0000000 --- a/src/main/java/org/carlmontrobotics/commands/IntakeCommands/IntakeBalls.java +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package org.carlmontrobotics.commands.IntakeCommands; - -import edu.wpi.first.wpilibj2.command.Command; - -import org.carlmontrobotics.subsystems.Intake; -import org.carlmontrobotics.Constants.IntakeC; - -/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */ -public class IntakeBalls extends Command { - Intake intake; - /** Creates a new IntakeBalls. */ - public IntakeBalls(Intake intake) { - this.intake = intake; - // Use addRequirements() here to declare subsystem dependencies. - } - - // Called when the command is initially scheduled. - @Override - public void initialize() { - intake.spinIntake(IntakeC.INTAKE_SPEED); - } - - // Called every time the scheduler runs while the command is scheduled. - @Override - public void execute() {} - - // Called once the command ends or is interrupted. - @Override - public void end(boolean interrupted) { - intake.spinIntake(0); - } - - // Returns true when the command should end. - @Override - public boolean isFinished() { - return false; - } -} diff --git a/src/main/java/org/carlmontrobotics/commands/OuttakeCommands/ShootBalls.java b/src/main/java/org/carlmontrobotics/commands/OuttakeCommands/ShootBalls.java deleted file mode 100644 index 680d9b4..0000000 --- a/src/main/java/org/carlmontrobotics/commands/OuttakeCommands/ShootBalls.java +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package org.carlmontrobotics.commands.OuttakeCommands; - -import edu.wpi.first.wpilibj2.command.Command; - -import org.carlmontrobotics.subsystems.Outtake; - -import org.carlmontrobotics.Constants.OuttakeC; - -/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */ -public class ShootBalls extends Command { - Outtake outtake; - /** Creates a new OuttakeBalls. */ - public ShootBalls(Outtake outtake) { - this.outtake = outtake; - // Use addRequirements() here to declare subsystem dependencies. - } - - // Called when the command is initially scheduled. - @Override - public void initialize() { - outtake.spinOuttake(OuttakeC.OUTTAKE_SPEED); - } - - // Called every time the scheduler runs while the command is scheduled. - @Override - public void execute() {} - - // Called once the command ends or is interrupted. - @Override - public void end(boolean interrupted) { - outtake.spinOuttake(0); - } - - // Returns true when the command should end. - @Override - public boolean isFinished() { - return false; - } -} diff --git a/src/main/java/org/carlmontrobotics/subsystems/Outtake.java b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java index 0665216..234527b 100644 --- a/src/main/java/org/carlmontrobotics/subsystems/Outtake.java +++ b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java @@ -4,13 +4,14 @@ package org.carlmontrobotics.subsystems; -import org.carlmontrobotics.lib199.MotorConfig; import org.carlmontrobotics.lib199.MotorControllerFactory; import org.carlmontrobotics.Constants.OuttakeC; import edu.wpi.first.wpilibj2.command.SubsystemBase; +import com.revrobotics.PersistMode; +import com.revrobotics.ResetMode; import com.revrobotics.spark.FeedbackSensor; import com.revrobotics.spark.SparkBase.ControlType; import com.revrobotics.spark.SparkFlex; @@ -30,14 +31,15 @@ public Outtake(double kP, double kI, double kD) { this.kI = kI; this.kD = kD; outtake = MotorControllerFactory.createSparkFlex(OuttakeC.OUTTAKE_ID); - + pidController = outtake.getClosedLoopController(); final SparkFlexConfig outtakeConfig = new SparkFlexConfig(); outtakeConfig.idleMode(IdleMode.kCoast); - outtakeConfig.closedLoop.pid(kP,kI,kD).feedbackSensor(FeedbackSensor.kAbsoluteEncoder); + outtakeConfig.closedLoop.pid(kP,kI,kD).feedbackSensor(FeedbackSensor.kPrimaryEncoder); + outtake.configure(outtakeConfig, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters); } public void spinOuttake(double input) { - pidController.setReference(input, ControlType.kDutyCycle); + pidController.setSetpoint(input, ControlType.kDutyCycle); } @Override From 471b830a73947f1ac9b061cf2a85a89b919e9fbc Mon Sep 17 00:00:00 2001 From: Team 199 Driver Station Computer <35879629+DriverStationComputer@users.noreply.github.com> Date: Fri, 6 Feb 2026 17:23:33 -0800 Subject: [PATCH 4/8] wip commands readded after bug deleted them --- .../ManipulatorCommands/IntakeBalls.java | 42 ++++++++++++++++++ .../ManipulatorCommands/ShootBalls.java | 43 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/IntakeBalls.java create mode 100644 src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java diff --git a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/IntakeBalls.java b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/IntakeBalls.java new file mode 100644 index 0000000..277ce23 --- /dev/null +++ b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/IntakeBalls.java @@ -0,0 +1,42 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package org.carlmontrobotics.commands.ManipulatorCommands; + +import edu.wpi.first.wpilibj2.command.Command; + +import org.carlmontrobotics.subsystems.Intake; +import org.carlmontrobotics.Constants.IntakeC; + +/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */ +public class IntakeBalls extends Command { + Intake intake; + /** Creates a new IntakeBalls. */ + public IntakeBalls(Intake intake) { + this.intake = intake; + // Use addRequirements() here to declare subsystem dependencies. + } + + // Called when the command is initially scheduled. + @Override + public void initialize() { + intake.spinIntake(IntakeC.INTAKE_SPEED); + } + + // Called every time the scheduler runs while the command is scheduled. + @Override + public void execute() {} + + // Called once the command ends or is interrupted. + @Override + public void end(boolean interrupted) { + intake.spinIntake(0); + } + + // Returns true when the command should end. + @Override + public boolean isFinished() { + return false; + } +} diff --git a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java new file mode 100644 index 0000000..aa9f8fd --- /dev/null +++ b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java @@ -0,0 +1,43 @@ +// Copyright (c) FIRST and other WPILib contributors. +// Open Source Software; you can modify and/or share it under the terms of +// the WPILib BSD license file in the root directory of this project. + +package org.carlmontrobotics.commands.ManipulatorCommands; + +import edu.wpi.first.wpilibj2.command.Command; + +import org.carlmontrobotics.subsystems.Outtake; + +import org.carlmontrobotics.Constants.OuttakeC; + +/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */ +public class ShootBalls extends Command { + Outtake outtake; + /** Creates a new OuttakeBalls. */ + public ShootBalls(Outtake outtake) { + this.outtake = outtake; + // Use addRequirements() here to declare subsystem dependencies. + } + + // Called when the command is initially scheduled. + @Override + public void initialize() { + outtake.spinOuttake(OuttakeC.OUTTAKE_SPEED); + } + + // Called every time the scheduler runs while the command is scheduled. + @Override + public void execute() {} + + // Called once the command ends or is interrupted. + @Override + public void end(boolean interrupted) { + outtake.spinOuttake(0); + } + + // Returns true when the command should end. + @Override + public boolean isFinished() { + return false; + } +} \ No newline at end of file From a1b6fe5e6bb8904d7f6f7c577de79e371213d310 Mon Sep 17 00:00:00 2001 From: Team 199 Driver Station Computer <35879629+DriverStationComputer@users.noreply.github.com> Date: Fri, 13 Feb 2026 16:29:06 -0800 Subject: [PATCH 5/8] outtake finished, pid will need to be tuned --- src/main/java/org/carlmontrobotics/Constants.java | 8 ++++---- .../commands/ManipulatorCommands/ShootBalls.java | 2 +- .../java/org/carlmontrobotics/subsystems/Outtake.java | 11 ++++++----- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/Constants.java b/src/main/java/org/carlmontrobotics/Constants.java index c68b2a3..90007f2 100644 --- a/src/main/java/org/carlmontrobotics/Constants.java +++ b/src/main/java/org/carlmontrobotics/Constants.java @@ -277,10 +277,10 @@ public static final class IntakeC { // FIXME get real values } public static final class OuttakeC { public static final int OUTTAKE_ID = 14; - public static final double OUTTAKE_SPEED = 0.2; - public static final double OUTTAKE_KP = 0.05; - public static final double OUTTAKE_KI = 0.01; - public static final double OUTTAKE_KD = 0.01; + public static final double OUTTAKE_RPM = 60; + public static final double OUTTAKE_KP = 0.01; + public static final double OUTTAKE_KI = 0; + public static final double OUTTAKE_KD = 0; } } //#endregion \ No newline at end of file diff --git a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java index aa9f8fd..0371528 100644 --- a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java +++ b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java @@ -22,7 +22,7 @@ public ShootBalls(Outtake outtake) { // Called when the command is initially scheduled. @Override public void initialize() { - outtake.spinOuttake(OuttakeC.OUTTAKE_SPEED); + outtake.spinOuttake(OuttakeC.OUTTAKE_RPM); } // Called every time the scheduler runs while the command is scheduled. diff --git a/src/main/java/org/carlmontrobotics/subsystems/Outtake.java b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java index 234527b..ddbdf38 100644 --- a/src/main/java/org/carlmontrobotics/subsystems/Outtake.java +++ b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java @@ -4,6 +4,7 @@ package org.carlmontrobotics.subsystems; +import org.carlmontrobotics.lib199.MotorConfig; import org.carlmontrobotics.lib199.MotorControllerFactory; import org.carlmontrobotics.Constants.OuttakeC; @@ -15,12 +16,13 @@ import com.revrobotics.spark.FeedbackSensor; import com.revrobotics.spark.SparkBase.ControlType; import com.revrobotics.spark.SparkFlex; +import com.revrobotics.spark.SparkMax; import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; import com.revrobotics.spark.config.SparkFlexConfig; import com.revrobotics.spark.SparkClosedLoopController; public class Outtake extends SubsystemBase { - SparkFlex outtake; + SparkMax outtake; private double kP; private double kI; private double kD; @@ -30,7 +32,7 @@ public Outtake(double kP, double kI, double kD) { this.kP = kP; this.kI = kI; this.kD = kD; - outtake = MotorControllerFactory.createSparkFlex(OuttakeC.OUTTAKE_ID); + outtake = MotorControllerFactory.createSparkMax(OuttakeC.OUTTAKE_ID, MotorConfig.NEO); pidController = outtake.getClosedLoopController(); final SparkFlexConfig outtakeConfig = new SparkFlexConfig(); outtakeConfig.idleMode(IdleMode.kCoast); @@ -39,11 +41,10 @@ public Outtake(double kP, double kI, double kD) { } public void spinOuttake(double input) { - pidController.setSetpoint(input, ControlType.kDutyCycle); + pidController.setSetpoint(input, ControlType.kVelocity); } @Override - public void periodic() { + public void periodic() {} // This method will be called once per scheduler run - } } From b7bfd6d84a462fbc1e6eb475e28bf861b095a684 Mon Sep 17 00:00:00 2001 From: LoganCHS <824922@seq.org> Date: Sat, 14 Feb 2026 12:28:34 -0800 Subject: [PATCH 6/8] revisions and clean up, will at intake deployment soon --- .../java/org/carlmontrobotics/Constants.java | 9 +++++--- src/main/java/org/carlmontrobotics/Robot.java | 5 ---- .../org/carlmontrobotics/RobotContainer.java | 7 ++---- .../ManipulatorCommands/IntakeBalls.java | 3 +-- .../ManipulatorCommands/ShootBalls.java | 20 ++++++++++++---- .../carlmontrobotics/subsystems/Intake.java | 18 +++++++++++---- .../carlmontrobotics/subsystems/Outtake.java | 23 ++++++++----------- 7 files changed, 47 insertions(+), 38 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/Constants.java b/src/main/java/org/carlmontrobotics/Constants.java index c68b2a3..fdbd7ae 100644 --- a/src/main/java/org/carlmontrobotics/Constants.java +++ b/src/main/java/org/carlmontrobotics/Constants.java @@ -271,16 +271,19 @@ public static class LimeLightc { public static final int[] sampleLL2_VALID_IDS = {1, 6, 7, 8, 9, 10, 11, 17, 18, 19, 20, 21, 22}; } //#region Manipulator - public static final class IntakeC { // FIXME get real values + public static final class IntakeC { // FIXME get real values for intake and outtake public static final int INTAKE_ID = 1; public static final double INTAKE_SPEED = 0.1; } public static final class OuttakeC { - public static final int OUTTAKE_ID = 14; + public static final int OUTTAKE_ID = 2; + public static final int FEEDER_ID = 3; public static final double OUTTAKE_SPEED = 0.2; - public static final double OUTTAKE_KP = 0.05; + public static final double FEEDER_SPEED = 0.2; + public static final double OUTTAKE_KP = 0.01; public static final double OUTTAKE_KI = 0.01; public static final double OUTTAKE_KD = 0.01; + public static final double DELAY = 0.5; } } //#endregion \ No newline at end of file diff --git a/src/main/java/org/carlmontrobotics/Robot.java b/src/main/java/org/carlmontrobotics/Robot.java index 70aed8a..0c80009 100644 --- a/src/main/java/org/carlmontrobotics/Robot.java +++ b/src/main/java/org/carlmontrobotics/Robot.java @@ -8,8 +8,6 @@ import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.CommandScheduler; -import org.carlmontrobotics.subsystems.Outtake; -import org.carlmontrobotics.commands.ManipulatorCommands.ShootBalls; /** * The methods in this class are called automatically corresponding to each mode, as described in @@ -21,8 +19,6 @@ public class Robot extends TimedRobot { private final RobotContainer m_robotContainer; - private Outtake outtake; - /** * This function is run when the robot is first started up and should be used for any * initialization code. @@ -80,7 +76,6 @@ public void teleopInit() { if (m_autonomousCommand != null) { m_autonomousCommand.cancel(); } - new ShootBalls(outtake); } /** This function is called periodically during operator control. */ diff --git a/src/main/java/org/carlmontrobotics/RobotContainer.java b/src/main/java/org/carlmontrobotics/RobotContainer.java index 5a86b56..0469916 100644 --- a/src/main/java/org/carlmontrobotics/RobotContainer.java +++ b/src/main/java/org/carlmontrobotics/RobotContainer.java @@ -76,7 +76,7 @@ public class RobotContainer { public final Drivetrain drivetrain = new Drivetrain(limelight); public final Intake intake = new Intake(); - public final Outtake outtake = new Outtake(OuttakeC.OUTTAKE_KP, OuttakeC.OUTTAKE_KI, OuttakeC.OUTTAKE_KD); + public final Outtake outtake = new Outtake(); private SendableChooser autoChooser = new SendableChooser<>(); public boolean alignOverride = true; @@ -89,9 +89,6 @@ public RobotContainer() { SmartDashboard.putData("Auto Chooser", autoChooser); - SmartDashboard.putBoolean("AlignOverride", alignOverride); - SmartDashboard.putBoolean("AutoScoring", autoScoring); - SmartDashboard.putBoolean("AlignOverride", true); //#endregion setDefaultCommands(); setBindingsDriver(); @@ -123,7 +120,7 @@ private void setBindingsManipulator() { new JoystickButton(manipulatorController, Manipulator.INTAKE_BUTTON) .whileTrue(new IntakeBalls(intake)); new JoystickButton(manipulatorController, Manipulator.OUTTAKE_BUTTON) - .whileTrue(new ShootBalls(outtake)); + .whileTrue(new ShootBalls(outtake, outtake)); } //#endregion //#region AutoMaking diff --git a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/IntakeBalls.java b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/IntakeBalls.java index 277ce23..100311d 100644 --- a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/IntakeBalls.java +++ b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/IntakeBalls.java @@ -14,8 +14,7 @@ public class IntakeBalls extends Command { Intake intake; /** Creates a new IntakeBalls. */ public IntakeBalls(Intake intake) { - this.intake = intake; - // Use addRequirements() here to declare subsystem dependencies. + addRequirements(this.intake = intake); } // Called when the command is initially scheduled. diff --git a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java index aa9f8fd..1f5c8f0 100644 --- a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java +++ b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java @@ -5,6 +5,7 @@ package org.carlmontrobotics.commands.ManipulatorCommands; import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj.Timer; import org.carlmontrobotics.subsystems.Outtake; @@ -13,26 +14,35 @@ /* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */ public class ShootBalls extends Command { Outtake outtake; + Outtake feeder; + Timer timer = new Timer(); /** Creates a new OuttakeBalls. */ - public ShootBalls(Outtake outtake) { - this.outtake = outtake; + public ShootBalls(Outtake outtake, Outtake feeder) { + addRequirements(this.outtake = outtake); + addRequirements(this.feeder = feeder); // Use addRequirements() here to declare subsystem dependencies. } // Called when the command is initially scheduled. @Override public void initialize() { - outtake.spinOuttake(OuttakeC.OUTTAKE_SPEED); + timer.start(); + feeder.spinFeeder(OuttakeC.FEEDER_SPEED); } // Called every time the scheduler runs while the command is scheduled. @Override - public void execute() {} + public void execute() { + if(timer.get() > OuttakeC.DELAY){ + outtake.spinOuttake(OuttakeC.OUTTAKE_SPEED); + } + } // Called once the command ends or is interrupted. @Override public void end(boolean interrupted) { - outtake.spinOuttake(0); + outtake.outtake.set(0); + outtake.feeder.set(0); } // Returns true when the command should end. diff --git a/src/main/java/org/carlmontrobotics/subsystems/Intake.java b/src/main/java/org/carlmontrobotics/subsystems/Intake.java index 994913c..f5cf450 100644 --- a/src/main/java/org/carlmontrobotics/subsystems/Intake.java +++ b/src/main/java/org/carlmontrobotics/subsystems/Intake.java @@ -4,22 +4,29 @@ package org.carlmontrobotics.subsystems; -import org.carlmontrobotics.lib199.MotorConfig; import org.carlmontrobotics.lib199.MotorControllerFactory; import org.carlmontrobotics.Constants.IntakeC; import edu.wpi.first.wpilibj2.command.SubsystemBase; -import com.revrobotics.spark.SparkMax; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; + +import com.revrobotics.PersistMode; +import com.revrobotics.ResetMode; +import com.revrobotics.spark.SparkFlex; +import com.revrobotics.spark.config.SparkBaseConfig.IdleMode; +import com.revrobotics.spark.config.SparkFlexConfig; public class Intake extends SubsystemBase { - SparkMax intake; + SparkFlex intake; /** Creates a new Intake. */ public Intake() { - SparkMax intake = MotorControllerFactory.createSparkMax(IntakeC.INTAKE_ID, MotorConfig.NEO); + intake = MotorControllerFactory.createSparkFlex(IntakeC.INTAKE_ID); - //FIXME add configs if needed + final SparkFlexConfig intakeConfig = new SparkFlexConfig(); + intakeConfig.idleMode(IdleMode.kCoast); + intake.configure(intakeConfig, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters); } public void spinIntake(double intakeSpeed) { @@ -29,5 +36,6 @@ public void spinIntake(double intakeSpeed) { @Override public void periodic() { // This method will be called once per scheduler run + SmartDashboard.putNumber("Intake Speed", intake.get()); } } diff --git a/src/main/java/org/carlmontrobotics/subsystems/Outtake.java b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java index 234527b..d9a7a95 100644 --- a/src/main/java/org/carlmontrobotics/subsystems/Outtake.java +++ b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java @@ -10,8 +10,6 @@ import edu.wpi.first.wpilibj2.command.SubsystemBase; -import com.revrobotics.PersistMode; -import com.revrobotics.ResetMode; import com.revrobotics.spark.FeedbackSensor; import com.revrobotics.spark.SparkBase.ControlType; import com.revrobotics.spark.SparkFlex; @@ -20,28 +18,27 @@ import com.revrobotics.spark.SparkClosedLoopController; public class Outtake extends SubsystemBase { - SparkFlex outtake; - private double kP; - private double kI; - private double kD; + public SparkFlex outtake; + public SparkFlex feeder; private SparkClosedLoopController pidController; /** Creates a new Outtake. */ - public Outtake(double kP, double kI, double kD) { - this.kP = kP; - this.kI = kI; - this.kD = kD; + public Outtake() { outtake = MotorControllerFactory.createSparkFlex(OuttakeC.OUTTAKE_ID); - pidController = outtake.getClosedLoopController(); + feeder = MotorControllerFactory.createSparkFlex(OuttakeC.FEEDER_ID); + final SparkFlexConfig outtakeConfig = new SparkFlexConfig(); outtakeConfig.idleMode(IdleMode.kCoast); - outtakeConfig.closedLoop.pid(kP,kI,kD).feedbackSensor(FeedbackSensor.kPrimaryEncoder); - outtake.configure(outtakeConfig, ResetMode.kNoResetSafeParameters, PersistMode.kPersistParameters); + outtakeConfig.closedLoop.pid(OuttakeC.OUTTAKE_KP, OuttakeC.OUTTAKE_KI, OuttakeC.OUTTAKE_KD); } public void spinOuttake(double input) { pidController.setSetpoint(input, ControlType.kDutyCycle); } + public void spinFeeder(double input) { + feeder.set(input); + } + @Override public void periodic() { // This method will be called once per scheduler run From 97149f33e3a4755e844c745122a3e5740c0148ba Mon Sep 17 00:00:00 2001 From: LoganCHS <824922@seq.org> Date: Tue, 17 Feb 2026 11:53:40 -0800 Subject: [PATCH 7/8] OUTTAKE_SPEED is now OUTTAKE_RPM in ShootBalls (wonder why this didnt get commited) --- .../commands/ManipulatorCommands/ShootBalls.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java index 1f5c8f0..619999b 100644 --- a/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java +++ b/src/main/java/org/carlmontrobotics/commands/ManipulatorCommands/ShootBalls.java @@ -34,7 +34,7 @@ public void initialize() { @Override public void execute() { if(timer.get() > OuttakeC.DELAY){ - outtake.spinOuttake(OuttakeC.OUTTAKE_SPEED); + outtake.spinOuttake(OuttakeC.OUTTAKE_RPM); } } From 3a517fc76e9eb283b285589e1b17a03aac9d0293 Mon Sep 17 00:00:00 2001 From: LoganCHS <824922@seq.org> Date: Tue, 24 Feb 2026 15:18:23 -0800 Subject: [PATCH 8/8] revisions --- src/main/java/org/carlmontrobotics/subsystems/Drivetrain.java | 4 ++-- src/main/java/org/carlmontrobotics/subsystems/Outtake.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/subsystems/Drivetrain.java b/src/main/java/org/carlmontrobotics/subsystems/Drivetrain.java index e6690f3..57aff44 100644 --- a/src/main/java/org/carlmontrobotics/subsystems/Drivetrain.java +++ b/src/main/java/org/carlmontrobotics/subsystems/Drivetrain.java @@ -109,10 +109,10 @@ import org.carlmontrobotics.Constants; import org.carlmontrobotics.Constants.Drivetrainc; import org.carlmontrobotics.Constants.Drivetrainc.Autoc; -import org.carlmontrobotics.commands.DriveCommands.RotateToFieldRelativeAngle; -import org.carlmontrobotics.commands.DriveCommands.TeleopDrive; import org.carlmontrobotics.Robot; import org.carlmontrobotics.subsystems.Limelight; +import org.carlmontrobotics.commands.DriveCommands.RotateToFieldRelativeAngle; +import org.carlmontrobotics.commands.DriveCommands.TeleopDrive; import static org.carlmontrobotics.Constants.Drivetrainc.*; import static org.carlmontrobotics.Constants.LimeLightc.*; diff --git a/src/main/java/org/carlmontrobotics/subsystems/Outtake.java b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java index cf8e66d..481515d 100644 --- a/src/main/java/org/carlmontrobotics/subsystems/Outtake.java +++ b/src/main/java/org/carlmontrobotics/subsystems/Outtake.java @@ -34,7 +34,7 @@ public Outtake() { } public void spinOuttake(double input) { - pidController.setSetpoint(input, ControlType.kVelocity); + pidController.setSetpoint(input, ControlType.kDutyCycle); } public void spinFeeder(double input) {