From 10cd3cb10725d038d83cc4dae4f73a0c09f92fac Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 4 Feb 2026 14:41:39 -0500 Subject: [PATCH 1/8] created led class --- sensors/leds.py | 23 +++++++++++++++++++ .../7407-DriveCode-Rebuilt.code-workspace | 7 ++++++ 2 files changed, 30 insertions(+) create mode 100644 sensors/leds.py create mode 100644 subsystems/7407-DriveCode-Rebuilt.code-workspace diff --git a/sensors/leds.py b/sensors/leds.py new file mode 100644 index 0000000..0f2f54c --- /dev/null +++ b/sensors/leds.py @@ -0,0 +1,23 @@ +from wpilib import AddressableLED +import ntcore +import constants +from commands2 import Subsystem + +class LEDs(Subsystem): + + def __init__(self): + + self.led = AddressableLED(constants.leds_id) + self.led + #self.led_buffer = + def enable_leds(self): + """ + enables the LEDs + """ + self.led.start() + + def disable_leds(self): + """ + disables the LEDs + """ + self.led.stop() diff --git a/subsystems/7407-DriveCode-Rebuilt.code-workspace b/subsystems/7407-DriveCode-Rebuilt.code-workspace new file mode 100644 index 0000000..9e68e72 --- /dev/null +++ b/subsystems/7407-DriveCode-Rebuilt.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": ".." + } + ] +} \ No newline at end of file From 2cc75978de17cc4cc6a19d0631f772dac74f4556 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 4 Feb 2026 14:41:52 -0500 Subject: [PATCH 2/8] Create constants.py --- sensors/constants.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sensors/constants.py diff --git a/sensors/constants.py b/sensors/constants.py new file mode 100644 index 0000000..a213c7a --- /dev/null +++ b/sensors/constants.py @@ -0,0 +1,5 @@ + + +#leds +leds_id = 30 #placeholder +led_length = 60 #placeholder \ No newline at end of file From d0a7d3f66928b9c6a722145cd092e5b383fc28c7 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:22:48 -0500 Subject: [PATCH 3/8] scrolling function is sus --- sensors/constants.py | 6 ++++- sensors/leds.py | 59 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/sensors/constants.py b/sensors/constants.py index a213c7a..dcbd657 100644 --- a/sensors/constants.py +++ b/sensors/constants.py @@ -2,4 +2,8 @@ #leds leds_id = 30 #placeholder -led_length = 60 #placeholder \ No newline at end of file +led_length = 60 #placeholder + +rainbow_saturation = 255 #placeholder +rainbow_value = 255 #placeholder +scroll_speed = 0 #placeholder, in percent of whole LED strip per second \ No newline at end of file diff --git a/sensors/leds.py b/sensors/leds.py index 0f2f54c..eb65d08 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -1,15 +1,19 @@ -from wpilib import AddressableLED +from wpilib import AddressableLED, LEDPattern, Color import ntcore import constants from commands2 import Subsystem +from math import class LEDs(Subsystem): def __init__(self): self.led = AddressableLED(constants.leds_id) - self.led - #self.led_buffer = + self.led.setLength(constants.led_length) + self.led_buffer = [self.led.LEDData() for i in range(constants.led_length)] + + self.pattern = LEDPattern.solid(Color.kWhite) + def enable_leds(self): """ enables the LEDs @@ -21,3 +25,52 @@ def disable_leds(self): disables the LEDs """ self.led.stop() + + def update_leds(self): + """ + updates LED pattern + """ + self.pattern.applyTo(self.led_buffer) + self.led.setData(self.led_buffer) + + def set_solid(self, r: int, g: int, b: int): + """ + sets LEDs as a solid color + """ + self.pattern = LEDPattern.solid(Color(r/255, g/255, b/255)) + self.update_leds() + + def set_rainbow(self): + """ + sets LEDs to a rainbow pattern + """ + self.pattern = LEDPattern.rainbow(constants.rainbow_saturation, constants.rainbow_value) + self.update_leds() + + def set_gradient(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int): + """ + sets LEDs to a (continuous) gradient pattern + """ + self.pattern = LEDPattern.gradient(LEDPattern.GradientType.kContinuous, Color(r1/255, g1/255, b1/255), Color(r2/255, g2/255, b2/255)) + self.update_leds() + + def set_progress_mask(self, current_value, max_value, r: int, g: int, b: int): + """ + sets progress bar of any color of choice pattern for LEDs + """ + self.pattern = LEDPattern.progressMaskLayer(current_value / max_value).solid(Color(r/255, g/255, b/255)) + self.update_leds() + + def reverse_pattern(self): + """ + reverses direction of given pattern + """ + self.pattern.reversed() + self.update_leds() + + def set_scroll(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int): + """ + sets a scrolling pattern for the LEDs + """ + self.set_gradient(r1, g1, b1, r2, g2, b2) + self.pattern.scrollAtRelativeSpeed(constants.scroll_speed) \ No newline at end of file From 58028ed0f5eef78affbc558eca207717086236b7 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:35:36 -0500 Subject: [PATCH 4/8] more led functions --- sensors/constants.py | 4 +++- sensors/leds.py | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/sensors/constants.py b/sensors/constants.py index dcbd657..902a293 100644 --- a/sensors/constants.py +++ b/sensors/constants.py @@ -6,4 +6,6 @@ rainbow_saturation = 255 #placeholder rainbow_value = 255 #placeholder -scroll_speed = 0 #placeholder, in percent of whole LED strip per second \ No newline at end of file +scroll_speed = 0 #placeholder, in percent of whole LED strip per second + +blink_time = 2 #placeholder, in seconds diff --git a/sensors/leds.py b/sensors/leds.py index eb65d08..bdbda1e 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -33,6 +33,13 @@ def update_leds(self): self.pattern.applyTo(self.led_buffer) self.led.setData(self.led_buffer) + def set_brightness(self, brightness): + """ + sets LED brightness + """ + self.pattern.atBrightness(brightness) + self.update_leds() + def set_solid(self, r: int, g: int, b: int): """ sets LEDs as a solid color @@ -70,7 +77,28 @@ def reverse_pattern(self): def set_scroll(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int): """ - sets a scrolling pattern for the LEDs + sets a scrolling pattern for the whole LED strips """ self.set_gradient(r1, g1, b1, r2, g2, b2) - self.pattern.scrollAtRelativeSpeed(constants.scroll_speed) \ No newline at end of file + self.pattern.scrollAtRelativeSpeed(constants.scroll_speed) + self.update_leds() + + def set_blink(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int): + """ + set blink pattern for the LEDs + """ + self.set_gradient(r1, g1, b1, r2, g2, b2) + self.pattern.blink(constants.blink_time) + self.update_leds() + + def set_steps(self): + """ + sets step pattern + """ + pass #TO DO + + def add_scrolling_segment(self): + """ + adds a scrolling segment to a pre-exisiting pattern + """ + pass #TO DO \ No newline at end of file From 332af76df5e63bb12b4231aa9d9aa27e93a6cd3c Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:52:07 -0500 Subject: [PATCH 5/8] added smthg --- sensors/leds.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/sensors/leds.py b/sensors/leds.py index bdbda1e..6573558 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -12,7 +12,7 @@ def __init__(self): self.led.setLength(constants.led_length) self.led_buffer = [self.led.LEDData() for i in range(constants.led_length)] - self.pattern = LEDPattern.solid(Color.kWhite) + self.pattern = LEDPattern.solid(Color.kBlack) def enable_leds(self): """ @@ -91,14 +91,20 @@ def set_blink(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int): self.pattern.blink(constants.blink_time) self.update_leds() - def set_steps(self): - """ - sets step pattern - """ - pass #TO DO - - def add_scrolling_segment(self): - """ - adds a scrolling segment to a pre-exisiting pattern - """ - pass #TO DO \ No newline at end of file + def set_alternate(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int) + """ + LED strip alternates between two colors + """ + self.alternate = [] + for i in range(constants.led_length): + if i % 2 == 0: + self.alternate.append( + (i / constants.led_length, Color(r1 / 255, g1 / 255, b1 / 255)) + ) + elif i % 2 == 1: + self.alternate.append( + (i / constants.led_length, Color(r2 / 255, g2 / 255, b2 / 255)) + ) + self.pattern = LEDPattern.steps(self.alternate) + self.update_leds() + \ No newline at end of file From 1c0bbfc02e410187a36cef4de7f50058c1c08b93 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:52:37 -0500 Subject: [PATCH 6/8] Update leds.py --- sensors/leds.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sensors/leds.py b/sensors/leds.py index 6573558..e6f6bea 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -2,7 +2,6 @@ import ntcore import constants from commands2 import Subsystem -from math import class LEDs(Subsystem): From f04db5f37bc68482544197d965b4ee6f7d01548e Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Fri, 13 Feb 2026 16:36:09 -0500 Subject: [PATCH 7/8] did the code thingy u asked (timer) --- robot.py | 17 +++++++++++++++++ sensors/leds.py | 4 +++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/robot.py b/robot.py index aae3582..10995b6 100644 --- a/robot.py +++ b/robot.py @@ -79,6 +79,23 @@ def teleopInit(self) -> None: # this line or comment it out. if self.autonomousCommand: commands2.CommandScheduler.getInstance().cancel(self.autonomousCommand) + + data = wpilib.DriverStation.getGameSpecificMessage() + if data: + match data: + case "B": + # Blue case code + + case "R": + # Red case code + ... + case _: + # This is corrupt data + ... + else: + # Code for no data received yet + ... + def teleopPeriodic(self) -> None: """This function is called periodically during operator control""" diff --git a/sensors/leds.py b/sensors/leds.py index e6f6bea..29d9745 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -1,6 +1,7 @@ from wpilib import AddressableLED, LEDPattern, Color import ntcore import constants +from wpilib import DriverStation from commands2 import Subsystem class LEDs(Subsystem): @@ -90,7 +91,7 @@ def set_blink(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int): self.pattern.blink(constants.blink_time) self.update_leds() - def set_alternate(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int) + def set_alternate(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int): """ LED strip alternates between two colors """ @@ -106,4 +107,5 @@ def set_alternate(self, r1: int, g1: int, b1: int, r2: int, g2: int, b2: int) ) self.pattern = LEDPattern.steps(self.alternate) self.update_leds() + \ No newline at end of file From 088d76d508a2d1aba938278fe13d7c9bd5935b75 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Fri, 13 Feb 2026 17:10:18 -0500 Subject: [PATCH 8/8] Update robot.py --- robot.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/robot.py b/robot.py index 10995b6..1fba7df 100644 --- a/robot.py +++ b/robot.py @@ -80,21 +80,6 @@ def teleopInit(self) -> None: if self.autonomousCommand: commands2.CommandScheduler.getInstance().cancel(self.autonomousCommand) - data = wpilib.DriverStation.getGameSpecificMessage() - if data: - match data: - case "B": - # Blue case code - - case "R": - # Red case code - ... - case _: - # This is corrupt data - ... - else: - # Code for no data received yet - ... def teleopPeriodic(self) -> None: