From 733ae1484731dd19012822582b497744f2691b48 Mon Sep 17 00:00:00 2001 From: David Vo Date: Sun, 17 Mar 2024 10:11:30 +1100 Subject: [PATCH 1/7] robot: Run status lights after updating in disabled --- robot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/robot.py b/robot.py index c78c443f..811dc4ca 100644 --- a/robot.py +++ b/robot.py @@ -198,7 +198,6 @@ def disabledPeriodic(self) -> None: self.chassis.update_odometry() self.intake_component.maybe_reindex_deployment_encoder() - self.status_lights.execute() self.vision_port.execute() self.vision_starboard.execute() @@ -231,6 +230,8 @@ def disabledPeriodic(self) -> None: else: self.status_lights.missing_start_pose() + self.status_lights.execute() + def autonomousInit(self) -> None: self.field.getObject("Intended start pos").setPoses([]) From 5c761b34a4a5da9e95831f90d125931bfd22706b Mon Sep 17 00:00:00 2001 From: David Vo Date: Sun, 17 Mar 2024 10:12:57 +1100 Subject: [PATCH 2/7] led: Allow repeat calls to morse() --- components/led.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/led.py b/components/led.py index 5a58e12d..ff4c893e 100644 --- a/components/led.py +++ b/components/led.py @@ -87,7 +87,8 @@ def climbing_arm_retracted(self) -> None: self.high_priority_pattern = None def morse(self) -> None: - self.pattern = Morse(HsvColour.ORANGE) + if not isinstance(self.pattern, Morse): + self.pattern = Morse(HsvColour.ORANGE) def rainbow(self) -> None: self.pattern = Rainbow(HsvColour.RED) From 1cbfbf8ec5be7ae1f3be0415ef3828d702e5f5c8 Mon Sep 17 00:00:00 2001 From: David Vo Date: Sun, 17 Mar 2024 10:13:13 +1100 Subject: [PATCH 3/7] led: this is not the Honeybadger you're looking for --- components/led.py | 1 - 1 file changed, 1 deletion(-) diff --git a/components/led.py b/components/led.py index ff4c893e..6a8f7a49 100644 --- a/components/led.py +++ b/components/led.py @@ -174,7 +174,6 @@ class Morse(TimeBasedPattern): MESSAGES = ( "KILL ALL HUMANS", "MORSE CODE IS FOR NERDS", - "HONEYBADGER DONT CARE", "GLHF", "I HATE MORSE CODE", ) From cb676d4e7f3c1d60dc9afb88cccece2837dfca6b Mon Sep 17 00:00:00 2001 From: David Vo Date: Sun, 17 Mar 2024 10:14:35 +1100 Subject: [PATCH 4/7] led: Keep repeating the same message Give people a chance to actually read our Morse code. --- components/led.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/components/led.py b/components/led.py index 6a8f7a49..b936aa59 100644 --- a/components/led.py +++ b/components/led.py @@ -221,6 +221,10 @@ class Morse(TimeBasedPattern): def __post_init__(self) -> None: self.pick_new_message() + self.start_clock() + + def start_clock(self) -> None: + self.start_time = self.clock() def elapsed_time(self) -> float: return self.clock() - self.start_time @@ -228,9 +232,9 @@ def elapsed_time(self) -> float: def update(self) -> Hsv: elapsed_time = self.elapsed_time() - # End of the message. Pick new one if elapsed_time > self.message_time: - self.pick_new_message() + # End of message, repeat the message + self.start_clock() return HsvColour.OFF.value # TODO Might be better to store current token index and time? @@ -255,7 +259,6 @@ def update(self) -> Hsv: def pick_new_message(self) -> None: # QUESTION? Should functions take args or assume previous step already done - self.start_time = self.clock() # Reset the time of the pattern self.message = self.random_message() self.morse_message = self.translate_message(self.message) self.message_length = self.calculate_message_length(self.morse_message) From a4bb4eb2fdc49562074d73ea4200c087074704a2 Mon Sep 17 00:00:00 2001 From: David Vo Date: Sun, 17 Mar 2024 10:25:32 +1100 Subject: [PATCH 5/7] led: Blink Morse in our alliance colour --- components/led.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/components/led.py b/components/led.py index b936aa59..109eda07 100644 --- a/components/led.py +++ b/components/led.py @@ -87,8 +87,17 @@ def climbing_arm_retracted(self) -> None: self.high_priority_pattern = None def morse(self) -> None: - if not isinstance(self.pattern, Morse): - self.pattern = Morse(HsvColour.ORANGE) + match wpilib.DriverStation.getAlliance(): + case wpilib.DriverStation.Alliance.kBlue: + colour = HsvColour.BLUE + case wpilib.DriverStation.Alliance.kRed: + colour = HsvColour.RED + case _: + colour = HsvColour.ORANGE + if isinstance(self.pattern, Morse): + self.pattern.colour = colour + else: + self.pattern = Morse(colour) def rainbow(self) -> None: self.pattern = Rainbow(HsvColour.RED) From 1290d947408ea8cdd5f5dabb1f83da93d171fa14 Mon Sep 17 00:00:00 2001 From: David Vo Date: Sun, 17 Mar 2024 10:26:05 +1100 Subject: [PATCH 6/7] robot: Morse in disabled when happy --- robot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot.py b/robot.py index 811dc4ca..dcfa626e 100644 --- a/robot.py +++ b/robot.py @@ -222,7 +222,7 @@ def disabledPeriodic(self) -> None: distance_between(intended_start_pose, current_pose) < self.START_POS_TOLERANCE ): - self.status_lights.rainbow() + self.status_lights.morse() else: self.status_lights.invalid_start() else: From 6751df08af3d2ec81376c2cf0cf99b84606e82b4 Mon Sep 17 00:00:00 2001 From: David Vo Date: Sun, 5 May 2024 15:00:47 +1000 Subject: [PATCH 7/7] morse: Use str.join instead of repeated string concat --- components/led.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/components/led.py b/components/led.py index 109eda07..1037e9f5 100644 --- a/components/led.py +++ b/components/led.py @@ -280,16 +280,16 @@ def random_message(self) -> str: @classmethod def translate_message(cls, message: str) -> str: message = message.upper() - morse_message = "" + morse_message = [] for letter in message: if letter == " ": - morse_message += " " + morse_message.append("") continue - morse_message += cls.MORSE_TRANSLATION[letter] + " " + morse_message.append(cls.MORSE_TRANSLATION[letter]) # Add some space at end of message - morse_message += " " - return morse_message + morse_message.append(" ") + return " ".join(morse_message) @classmethod def calculate_message_length(cls, morse_message: str) -> int: