From 82509c422dd2e54895518d57b44fb13f095c2125 Mon Sep 17 00:00:00 2001 From: MariaSH09 Date: Thu, 13 Nov 2025 20:54:46 -0800 Subject: [PATCH 1/5] create LED template --- src/main/java/frc/robot/Constants.java | 8 ++ .../frc/robot/subsystems/LedSubsystem.java | 119 ++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 src/main/java/frc/robot/subsystems/LedSubsystem.java diff --git a/src/main/java/frc/robot/Constants.java b/src/main/java/frc/robot/Constants.java index c50ba05..5f08f7a 100644 --- a/src/main/java/frc/robot/Constants.java +++ b/src/main/java/frc/robot/Constants.java @@ -16,4 +16,12 @@ public final class Constants { public static class OperatorConstants { public static final int kDriverControllerPort = 0; } + + //placeholder constants + public static class LEDConstants { + public static final int KPORT = 0; + public static final int KLENGTH = 60; + + public static final double BLINK_TIME = 1; // in seconds for after intake/outtake + } } diff --git a/src/main/java/frc/robot/subsystems/LedSubsystem.java b/src/main/java/frc/robot/subsystems/LedSubsystem.java new file mode 100644 index 0000000..743fdaf --- /dev/null +++ b/src/main/java/frc/robot/subsystems/LedSubsystem.java @@ -0,0 +1,119 @@ +package frc.robot.subsystems; + +import edu.wpi.first.units.Units; + +import static edu.wpi.first.units.Units.Centimeters; +import static edu.wpi.first.units.Units.Meters; +import static edu.wpi.first.units.Units.Percent; +import static edu.wpi.first.units.Units.Second; + +import edu.wpi.first.units.measure.Distance; +import edu.wpi.first.units.measure.Time; +import edu.wpi.first.wpilibj.AddressableLED; +import edu.wpi.first.wpilibj.AddressableLEDBuffer; +import edu.wpi.first.wpilibj.LEDPattern; +import edu.wpi.first.wpilibj.util.Color; +import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.SubsystemBase; +import frc.robot.Constants.LEDConstants; + +public class LedSubsystem extends SubsystemBase { + private final AddressableLED m_led; + private final AddressableLEDBuffer m_ledBuffer; + + /** Called once at the beginning of the robot program. */ + public LedSubsystem() { + // PWM port 9 + // Must be a PWM header, not MXP or DIO + m_led = new AddressableLED(LEDConstants.KPORT); + + // Reuse buffer + // Default to a length of 60, start empty output + // Length is expensive to set, so only set it once, then just update data + m_ledBuffer = new AddressableLEDBuffer(LEDConstants.KLENGTH); + m_led.setLength(m_ledBuffer.getLength()); + + // Set the data + m_led.setData(m_ledBuffer); + + m_led.start(); + + // Set the default command to turn the strip off, otherwise the last colors written by + // the last command to run will continue to be displayed. + // Note: Other default patterns could be used instead! + setDefaultCommand((runScrollingRedBlueCommand()).withName("Off")); + } + + + @Override + public void periodic() { + // Periodically send the latest LED color data to the LED strip for it to display + + + m_led.setData(m_ledBuffer); + } + + /** + * Creates a command that runs a pattern on the entire LED strip. + * + * @param pattern the LED pattern to run + */ + public Command runPattern(LEDPattern pattern) { + return run(() -> pattern.applyTo(m_ledBuffer)).ignoringDisable(true); + } + + public Command runBlinkGreen() { + return runPattern(LEDPattern.solid(Color.kGreen).blink(Time.ofBaseUnits(0.25, Units.Seconds))); + } + + public Command runSolidYellow() { + return runPattern(LEDPattern.solid(Color.kYellow)); + } + + public Command runSolidBlue() { + return runPattern(LEDPattern.solid(Color.kDarkBlue)); + } + + public Command runSolidOrange() { + return runPattern(LEDPattern.solid(Color.kOrange)); + } + + public Command runSolidGreen() { + return runPattern(LEDPattern.solid(Color.kGreen)); + } + + public Command runSolidRed() { + return runPattern(LEDPattern.solid(Color.kRed)); + } + + public Command runSolidWhite() { + return runPattern(LEDPattern.solid(Color.kWhite)); + } + + public Command runSolidPink() { + return runPattern(LEDPattern.solid(Color.kPink)); + } + + public Command runSolidPurple() { + return runPattern(LEDPattern.solid(Color.kPurple)); + } + + public Command runGradientBlueYellow(){ + LEDPattern gradient = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kYellow, Color.kBlue); + return runPattern(gradient); + } + + public Command runGradientGreenYellow(){ + LEDPattern gradient = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kYellow, Color.kGreen).scrollAtRelativeSpeed(Percent.per(Second).of(100)); + return runPattern(gradient); + } + + public Command runScrollingRedBlueCommand(){ + Distance ledSpacing = Meters.of(1 / 60.0); + LEDPattern base = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kRed, Color.kBlue); + LEDPattern pattern = base.scrollAtRelativeSpeed(Percent.per(Second).of(100)); + LEDPattern absolute = base.scrollAtAbsoluteSpeed(Centimeters.per(Second).of(6.25), ledSpacing); + return runPattern(pattern); + } + +} From 75d56746dd3924a629eaff24df46db2a810fa367 Mon Sep 17 00:00:00 2001 From: riley Date: Thu, 8 Jan 2026 18:04:16 -0800 Subject: [PATCH 2/5] make better --- .../frc/robot/subsystems/LedSubsystem.java | 53 +++++++++---------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/src/main/java/frc/robot/subsystems/LedSubsystem.java b/src/main/java/frc/robot/subsystems/LedSubsystem.java index 743fdaf..73302f8 100644 --- a/src/main/java/frc/robot/subsystems/LedSubsystem.java +++ b/src/main/java/frc/robot/subsystems/LedSubsystem.java @@ -1,13 +1,9 @@ package frc.robot.subsystems; import edu.wpi.first.units.Units; - -import static edu.wpi.first.units.Units.Centimeters; -import static edu.wpi.first.units.Units.Meters; import static edu.wpi.first.units.Units.Percent; import static edu.wpi.first.units.Units.Second; -import edu.wpi.first.units.measure.Distance; import edu.wpi.first.units.measure.Time; import edu.wpi.first.wpilibj.AddressableLED; import edu.wpi.first.wpilibj.AddressableLEDBuffer; @@ -41,15 +37,13 @@ public LedSubsystem() { // Set the default command to turn the strip off, otherwise the last colors written by // the last command to run will continue to be displayed. // Note: Other default patterns could be used instead! - setDefaultCommand((runScrollingRedBlueCommand()).withName("Off")); + setDefaultCommand((runScrollingYellowBlueCommand()).withName("LED/default colors")); } @Override public void periodic() { // Periodically send the latest LED color data to the LED strip for it to display - - m_led.setData(m_ledBuffer); } @@ -63,57 +57,58 @@ public Command runPattern(LEDPattern pattern) { } public Command runBlinkGreen() { - return runPattern(LEDPattern.solid(Color.kGreen).blink(Time.ofBaseUnits(0.25, Units.Seconds))); + return runPattern(LEDPattern.solid(Color.kGreen).blink(Time.ofBaseUnits(0.25, Units.Seconds))) + .withName("LED/blink green"); } public Command runSolidYellow() { - return runPattern(LEDPattern.solid(Color.kYellow)); + return runPattern(LEDPattern.solid(Color.kYellow)) + .withName("LED/solid yellow"); } public Command runSolidBlue() { - return runPattern(LEDPattern.solid(Color.kDarkBlue)); + return runPattern(LEDPattern.solid(Color.kDarkBlue)) + .withName("LED/solid blue"); } public Command runSolidOrange() { - return runPattern(LEDPattern.solid(Color.kOrange)); + return runPattern(LEDPattern.solid(Color.kOrange)) + .withName("LED/solid orange"); } public Command runSolidGreen() { - return runPattern(LEDPattern.solid(Color.kGreen)); + return runPattern(LEDPattern.solid(Color.kGreen)) + .withName("LED/solid green"); } public Command runSolidRed() { - return runPattern(LEDPattern.solid(Color.kRed)); + return runPattern(LEDPattern.solid(Color.kRed)) + .withName("LED/solid red"); } public Command runSolidWhite() { - return runPattern(LEDPattern.solid(Color.kWhite)); + return runPattern(LEDPattern.solid(Color.kWhite)) + .withName("LED/solid white"); } public Command runSolidPink() { - return runPattern(LEDPattern.solid(Color.kPink)); + return runPattern(LEDPattern.solid(Color.kPink)) + .withName("LED/solid pink"); } public Command runSolidPurple() { - return runPattern(LEDPattern.solid(Color.kPurple)); + return runPattern(LEDPattern.solid(Color.kPurple)) + .withName("LED/solid purple"); } - public Command runGradientBlueYellow(){ + public Command runGradientBlueYellow() { LEDPattern gradient = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kYellow, Color.kBlue); - return runPattern(gradient); + return runPattern(gradient).withName("LED/gradient blue-yellow"); } - public Command runGradientGreenYellow(){ - LEDPattern gradient = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kYellow, Color.kGreen).scrollAtRelativeSpeed(Percent.per(Second).of(100)); - return runPattern(gradient); - } - - public Command runScrollingRedBlueCommand(){ - Distance ledSpacing = Meters.of(1 / 60.0); - LEDPattern base = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kRed, Color.kBlue); + public Command runScrollingYellowBlueCommand() { + LEDPattern base = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kYellow, Color.kBlue); LEDPattern pattern = base.scrollAtRelativeSpeed(Percent.per(Second).of(100)); - LEDPattern absolute = base.scrollAtAbsoluteSpeed(Centimeters.per(Second).of(6.25), ledSpacing); - return runPattern(pattern); + return runPattern(pattern).withName("LED/scrolling yellow-blue"); } - } From b2b1190c1e010d3c77d400b3dc4b335f0ca97770 Mon Sep 17 00:00:00 2001 From: riley Date: Thu, 8 Jan 2026 18:06:51 -0800 Subject: [PATCH 3/5] rename file --- src/main/java/frc/robot/subsystems/LedSubsystem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/frc/robot/subsystems/LedSubsystem.java b/src/main/java/frc/robot/subsystems/LedSubsystem.java index 73302f8..d4d8750 100644 --- a/src/main/java/frc/robot/subsystems/LedSubsystem.java +++ b/src/main/java/frc/robot/subsystems/LedSubsystem.java @@ -13,12 +13,12 @@ import edu.wpi.first.wpilibj2.command.SubsystemBase; import frc.robot.Constants.LEDConstants; -public class LedSubsystem extends SubsystemBase { +public class LEDSubsystem extends SubsystemBase { private final AddressableLED m_led; private final AddressableLEDBuffer m_ledBuffer; /** Called once at the beginning of the robot program. */ - public LedSubsystem() { + public LEDSubsystem() { // PWM port 9 // Must be a PWM header, not MXP or DIO m_led = new AddressableLED(LEDConstants.KPORT); From 540d7d3694b2e4a850c05b719201b508ed7ed18d Mon Sep 17 00:00:00 2001 From: riley Date: Thu, 8 Jan 2026 18:11:42 -0800 Subject: [PATCH 4/5] delete to rename scuffed --- .../frc/robot/subsystems/LedSubsystem.java | 114 ------------------ 1 file changed, 114 deletions(-) delete mode 100644 src/main/java/frc/robot/subsystems/LedSubsystem.java diff --git a/src/main/java/frc/robot/subsystems/LedSubsystem.java b/src/main/java/frc/robot/subsystems/LedSubsystem.java deleted file mode 100644 index d4d8750..0000000 --- a/src/main/java/frc/robot/subsystems/LedSubsystem.java +++ /dev/null @@ -1,114 +0,0 @@ -package frc.robot.subsystems; - -import edu.wpi.first.units.Units; -import static edu.wpi.first.units.Units.Percent; -import static edu.wpi.first.units.Units.Second; - -import edu.wpi.first.units.measure.Time; -import edu.wpi.first.wpilibj.AddressableLED; -import edu.wpi.first.wpilibj.AddressableLEDBuffer; -import edu.wpi.first.wpilibj.LEDPattern; -import edu.wpi.first.wpilibj.util.Color; -import edu.wpi.first.wpilibj2.command.Command; -import edu.wpi.first.wpilibj2.command.SubsystemBase; -import frc.robot.Constants.LEDConstants; - -public class LEDSubsystem extends SubsystemBase { - private final AddressableLED m_led; - private final AddressableLEDBuffer m_ledBuffer; - - /** Called once at the beginning of the robot program. */ - public LEDSubsystem() { - // PWM port 9 - // Must be a PWM header, not MXP or DIO - m_led = new AddressableLED(LEDConstants.KPORT); - - // Reuse buffer - // Default to a length of 60, start empty output - // Length is expensive to set, so only set it once, then just update data - m_ledBuffer = new AddressableLEDBuffer(LEDConstants.KLENGTH); - m_led.setLength(m_ledBuffer.getLength()); - - // Set the data - m_led.setData(m_ledBuffer); - - m_led.start(); - - // Set the default command to turn the strip off, otherwise the last colors written by - // the last command to run will continue to be displayed. - // Note: Other default patterns could be used instead! - setDefaultCommand((runScrollingYellowBlueCommand()).withName("LED/default colors")); - } - - - @Override - public void periodic() { - // Periodically send the latest LED color data to the LED strip for it to display - m_led.setData(m_ledBuffer); - } - - /** - * Creates a command that runs a pattern on the entire LED strip. - * - * @param pattern the LED pattern to run - */ - public Command runPattern(LEDPattern pattern) { - return run(() -> pattern.applyTo(m_ledBuffer)).ignoringDisable(true); - } - - public Command runBlinkGreen() { - return runPattern(LEDPattern.solid(Color.kGreen).blink(Time.ofBaseUnits(0.25, Units.Seconds))) - .withName("LED/blink green"); - } - - public Command runSolidYellow() { - return runPattern(LEDPattern.solid(Color.kYellow)) - .withName("LED/solid yellow"); - } - - public Command runSolidBlue() { - return runPattern(LEDPattern.solid(Color.kDarkBlue)) - .withName("LED/solid blue"); - } - - public Command runSolidOrange() { - return runPattern(LEDPattern.solid(Color.kOrange)) - .withName("LED/solid orange"); - } - - public Command runSolidGreen() { - return runPattern(LEDPattern.solid(Color.kGreen)) - .withName("LED/solid green"); - } - - public Command runSolidRed() { - return runPattern(LEDPattern.solid(Color.kRed)) - .withName("LED/solid red"); - } - - public Command runSolidWhite() { - return runPattern(LEDPattern.solid(Color.kWhite)) - .withName("LED/solid white"); - } - - public Command runSolidPink() { - return runPattern(LEDPattern.solid(Color.kPink)) - .withName("LED/solid pink"); - } - - public Command runSolidPurple() { - return runPattern(LEDPattern.solid(Color.kPurple)) - .withName("LED/solid purple"); - } - - public Command runGradientBlueYellow() { - LEDPattern gradient = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kYellow, Color.kBlue); - return runPattern(gradient).withName("LED/gradient blue-yellow"); - } - - public Command runScrollingYellowBlueCommand() { - LEDPattern base = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kYellow, Color.kBlue); - LEDPattern pattern = base.scrollAtRelativeSpeed(Percent.per(Second).of(100)); - return runPattern(pattern).withName("LED/scrolling yellow-blue"); - } -} From e2b13aa3aa24eabc7a853ebc7b2592deba1ee8d9 Mon Sep 17 00:00:00 2001 From: riley Date: Thu, 8 Jan 2026 18:12:48 -0800 Subject: [PATCH 5/5] re-add file to rename scuffed pt 2 --- .../frc/robot/subsystems/LEDSubsystem.java | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/main/java/frc/robot/subsystems/LEDSubsystem.java diff --git a/src/main/java/frc/robot/subsystems/LEDSubsystem.java b/src/main/java/frc/robot/subsystems/LEDSubsystem.java new file mode 100644 index 0000000..d4d8750 --- /dev/null +++ b/src/main/java/frc/robot/subsystems/LEDSubsystem.java @@ -0,0 +1,114 @@ +package frc.robot.subsystems; + +import edu.wpi.first.units.Units; +import static edu.wpi.first.units.Units.Percent; +import static edu.wpi.first.units.Units.Second; + +import edu.wpi.first.units.measure.Time; +import edu.wpi.first.wpilibj.AddressableLED; +import edu.wpi.first.wpilibj.AddressableLEDBuffer; +import edu.wpi.first.wpilibj.LEDPattern; +import edu.wpi.first.wpilibj.util.Color; +import edu.wpi.first.wpilibj2.command.Command; +import edu.wpi.first.wpilibj2.command.SubsystemBase; +import frc.robot.Constants.LEDConstants; + +public class LEDSubsystem extends SubsystemBase { + private final AddressableLED m_led; + private final AddressableLEDBuffer m_ledBuffer; + + /** Called once at the beginning of the robot program. */ + public LEDSubsystem() { + // PWM port 9 + // Must be a PWM header, not MXP or DIO + m_led = new AddressableLED(LEDConstants.KPORT); + + // Reuse buffer + // Default to a length of 60, start empty output + // Length is expensive to set, so only set it once, then just update data + m_ledBuffer = new AddressableLEDBuffer(LEDConstants.KLENGTH); + m_led.setLength(m_ledBuffer.getLength()); + + // Set the data + m_led.setData(m_ledBuffer); + + m_led.start(); + + // Set the default command to turn the strip off, otherwise the last colors written by + // the last command to run will continue to be displayed. + // Note: Other default patterns could be used instead! + setDefaultCommand((runScrollingYellowBlueCommand()).withName("LED/default colors")); + } + + + @Override + public void periodic() { + // Periodically send the latest LED color data to the LED strip for it to display + m_led.setData(m_ledBuffer); + } + + /** + * Creates a command that runs a pattern on the entire LED strip. + * + * @param pattern the LED pattern to run + */ + public Command runPattern(LEDPattern pattern) { + return run(() -> pattern.applyTo(m_ledBuffer)).ignoringDisable(true); + } + + public Command runBlinkGreen() { + return runPattern(LEDPattern.solid(Color.kGreen).blink(Time.ofBaseUnits(0.25, Units.Seconds))) + .withName("LED/blink green"); + } + + public Command runSolidYellow() { + return runPattern(LEDPattern.solid(Color.kYellow)) + .withName("LED/solid yellow"); + } + + public Command runSolidBlue() { + return runPattern(LEDPattern.solid(Color.kDarkBlue)) + .withName("LED/solid blue"); + } + + public Command runSolidOrange() { + return runPattern(LEDPattern.solid(Color.kOrange)) + .withName("LED/solid orange"); + } + + public Command runSolidGreen() { + return runPattern(LEDPattern.solid(Color.kGreen)) + .withName("LED/solid green"); + } + + public Command runSolidRed() { + return runPattern(LEDPattern.solid(Color.kRed)) + .withName("LED/solid red"); + } + + public Command runSolidWhite() { + return runPattern(LEDPattern.solid(Color.kWhite)) + .withName("LED/solid white"); + } + + public Command runSolidPink() { + return runPattern(LEDPattern.solid(Color.kPink)) + .withName("LED/solid pink"); + } + + public Command runSolidPurple() { + return runPattern(LEDPattern.solid(Color.kPurple)) + .withName("LED/solid purple"); + } + + public Command runGradientBlueYellow() { + LEDPattern gradient = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kYellow, Color.kBlue); + return runPattern(gradient).withName("LED/gradient blue-yellow"); + } + + public Command runScrollingYellowBlueCommand() { + LEDPattern base = LEDPattern.gradient(LEDPattern.GradientType.kDiscontinuous, Color.kYellow, Color.kBlue); + LEDPattern pattern = base.scrollAtRelativeSpeed(Percent.per(Second).of(100)); + return runPattern(pattern).withName("LED/scrolling yellow-blue"); + } +}