From 8391619c717ed4ce6f26fc4fe5823d0b69162012 Mon Sep 17 00:00:00 2001 From: Rishikesh Lolapu <31lolapr@elmbrookstudents.org> Date: Sat, 11 Oct 2025 15:24:59 +0000 Subject: [PATCH 1/6] Add members/Rishi.txt --- members/Rishi.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 members/Rishi.txt diff --git a/members/Rishi.txt b/members/Rishi.txt new file mode 100644 index 0000000..e69de29 From ae114667f1651d0c7eb510cbe1c7f2e8fd83661b Mon Sep 17 00:00:00 2001 From: Rishikesh Lolapu <31lolapr@elmbrookstudents.org> Date: Sat, 11 Oct 2025 15:27:44 +0000 Subject: [PATCH 2/6] Update members/Rishi.txt --- members/Rishi.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/members/Rishi.txt b/members/Rishi.txt index e69de29..88bea53 100644 --- a/members/Rishi.txt +++ b/members/Rishi.txt @@ -0,0 +1,2 @@ +Hi I'm Rishi, the coding manager for Team: 65266 +I love coding and making things that probably end the world. \ No newline at end of file From 1a3abbb4d14f70b83109edd793afbe650a1bc40c Mon Sep 17 00:00:00 2001 From: Rishikesh Lolapu <31lolapr@elmbrookstudents.org> Date: Sat, 11 Oct 2025 18:03:55 +0000 Subject: [PATCH 3/6] Update twist_scrimmage.py --- twist_scrimmage.py | 389 +++++++++++++++++++-------------------------- 1 file changed, 163 insertions(+), 226 deletions(-) diff --git a/twist_scrimmage.py b/twist_scrimmage.py index b796f44..2b0fcd6 100644 --- a/twist_scrimmage.py +++ b/twist_scrimmage.py @@ -1,11 +1,9 @@ -# Imports... because we kinda need them... from pybricks.hubs import PrimeHub from pybricks.pupdevices import Motor, ColorSensor from pybricks.parameters import Port, Stop, Color, Direction from pybricks.robotics import DriveBase from pybricks.tools import wait, StopWatch, multitask, run_task -# Sets all the default values for the runs hub = PrimeHub() left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE) right_motor = Motor(Port.B) @@ -17,59 +15,157 @@ drive_base.use_gyro(True) color_sensor = ColorSensor(Port.F) Color.ORANGE = Color(37, 85, 95) Color.BLUE = Color(230,100,100) -Color.YELLOW = Color(53, 75, 84) -color_sensor.detectable_colors([Color.YELLOW, Color.BLUE, Color.GREEN, Color.WHITE, Color.RED, Color.ORANGE, Color.NONE]) +color_sensor.detectable_colors([Color.ORANGE, Color.BLUE, Color.GREEN, Color.WHITE, Color.RED, Color.YELLOW]) hub.speaker.volume(50) # Set the volume of the speaker color_sensor.detectable_colors() +# Celebration sound types +class CelebrationSound: + VICTORY_FANFARE = 0 + LEVEL_UP = 1 + SUCCESS_CHIME = 2 + TA_DA = 3 + POWER_UP = 4 + RICKROLL_INSPIRED = 5 + +async def play_victory_fanfare(): + """Classic victory fanfare""" + notes = [ + (262, 200), # C4 + (262, 200), # C4 + (262, 200), # C4 + (349, 600), # F4 + ] + + for freq, duration in notes: + await hub.speaker.beep(freq, duration) + await wait(50) +async def play_level_up(): + """Upward scale for level completion""" + notesold = [ + (262, 100), # C4 + (294, 100), # D4 + (330, 100), # E4 + (349, 100), # F4 + (392, 100), # G4 + (440, 100), # A4 + (494, 100), # B4 + (523, 300), # C5 + ] + notes = [ + (277, 100), + (330, 100), + (277, 100), + (554, 100), + (277, 100), + (413, 100), + (330, 100), + (277, 100), + (413, 100), + (277, 100), + (554, 100), + (413, 100), + (277, 100), + (413, 100), + (554, 100), + (413, 100) + ] + + for freq, duration in notes: + await hub.speaker.beep(freq, duration) + #await wait(20) +async def play_success_chime(): + """Simple success notification""" + notes = [ + (523, 150), # C5 + (659, 150), # E5 + (784, 300), # G5 + ] + + for freq, duration in notes: + await hub.speaker.beep(freq, duration) + await wait(50) +async def play_ta_da(): + """Classic "ta-da!" sound""" + notes = [ + (392, 200), # G4 + (523, 400), # C5 + ] + + for freq, duration in notes: + await hub.speaker.beep(freq, duration) + await wait(100) +async def play_power_up(): + """Rising power-up sound""" + for freq in range(200, 800, 50): + await hub.speaker.beep(freq, 50) + await wait(10) + await hub.speaker.beep(1000, 200) +async def play_rickroll_inspired(): + """Fun 80s-style dance beat inspired sound""" + # Upbeat bouncy rhythm + pattern = [ + (392, 200), (440, 200), (494, 200), (523, 200), + (440, 200), (392, 200), (349, 200), (392, 300), + (440, 200), (392, 200), (349, 200), (330, 400), + ] + + for freq, duration in pattern: + await hub.speaker.beep(freq, duration) + await wait(50) +async def celebrate_mission_complete(sound_type=CelebrationSound.SUCCESS_CHIME): + """ + Main celebration function to call after completing a mission. + Plays a sound and shows light animation. + + Args: + sound_type: CelebrationSound enum value (default: SUCCESS_CHIME) + """ + # Light show + hub.light.on(Color.GREEN) + + # Play the selected celebration sound + if sound_type == CelebrationSound.VICTORY_FANFARE: + await play_victory_fanfare() + elif sound_type == CelebrationSound.LEVEL_UP: + await play_level_up() + elif sound_type == CelebrationSound.SUCCESS_CHIME: + await play_success_chime() + elif sound_type == CelebrationSound.TA_DA: + await play_ta_da() + elif sound_type == CelebrationSound.POWER_UP: + await play_power_up() + elif sound_type == CelebrationSound.RICKROLL_INSPIRED: + await play_rickroll_inspired() + else: + await play_success_chime() # Default fallback + + # Blink the light + for _ in range(3): + hub.light.off() + await wait(100) + hub.light.on(Color.GREEN) + await wait(100) + + hub.light.off() -# Notes to hertz for nice music -cn = { - "Cs3": 138.59, - "D3": 146.83, - "Ds3": 155.56, - "E3": 164.81, - "F3": 174.61, - "Fs3": 185.00, - "G3": 196.00, - "Gs3": 207.65, - "A3": 220.00, - "As3": 233.08, - "B3": 246.94, - "C4": 261.63, - "Cs4": 277.18, - "D4": 293.66, - "Ds4": 311.13, - "E4": 329.63, - "F4": 349.23, - "Fs4": 369.99, - "G4": 392.00, - "Gs4": 415.30, - "A4": 440.00, - "As4": 466.16, - "B4": 493.88, - "C5": 523.25, - "Cs5": 554.37 -} - - -# RUNS - contains the mission code that will be executed on color sensor detection async def Run1(): - left_arm.run_angle(1000, 300) - right_arm.run_angle(1000,500) + await multitask(left_arm.run_angle(1000, 300), right_arm.run_angle(1000,500)) await drive_base.straight(320) + await right_arm.run_angle(5000,-500, Stop.HOLD) await right_arm.run_angle(5000,500, Stop.HOLD) await right_arm.run_angle(5000,-500, Stop.HOLD) await right_arm.run_angle(5000,500, Stop.HOLD) await right_arm.run_angle(5000,-500, Stop.HOLD) + await drive_base.turn(-20) - await drive_base.straight(277) + await drive_base.straight(275) await drive_base.turn(20) - await drive_base.straight(65) - await drive_base.turn(-30) - right_arm.run_angle(50,500) + await drive_base.straight(63) + + await multitask(drive_base.turn(-30), right_arm.run_angle(50,500)) await drive_base.turn(45) - await drive_base.straight(-145) + await drive_base.straight(-135) await drive_base.turn(-60) await drive_base.straight(90) await left_arm.run_angle(1000,-450) @@ -77,31 +173,32 @@ async def Run1(): await left_arm.run_angle(1000,450) await drive_base.straight(10) await drive_base.turn(35) - await drive_base.straight(-600) + await drive_base.straight(-500) async def Run2(): await drive_base.straight(200) await drive_base.turn(-20) await drive_base.straight(525) await drive_base.turn(60) + await drive_base.straight(50) await right_arm.run_angle(2000,1000) await drive_base.straight(-50) await drive_base.turn(45) await drive_base.straight(50) await right_arm.run_angle(350,-1000) - await drive_base.straight(-100) + await drive_base.turn(-100) await drive_base.straight(-600) + async def Run3(): - await drive_base.straight(920) + await drive_base.straight(915) await drive_base.turn(-90) await drive_base.straight(60) - drive_base.turn(-10) - await left_arm.run_angle(10000,-4000) - await drive_base.straight(-110) - await drive_base.turn(90) + await left_arm.run_angle(10000,-15000) + await drive_base.straight(-60) + await drive_base.turn(85) await drive_base.straight(2000) async def Run4(): @@ -135,177 +232,22 @@ async def Run5(): await right_arm.run_angle(300, 100) await drive_base.straight(-350) + async def Run6(): - left_arm.run_angle(500,200) - right_arm.run_angle(500,200) - await drive_base.straight(70) - await drive_base.turn(-55) - await drive_base.straight(900) - await drive_base.turn(92.5) - await drive_base.straight(75) - await drive_base.straight(21) - await right_arm.run_angle(500,-250) - await right_arm.run_angle(500,250) - await drive_base.straight(-20) - await drive_base.turn(55) - await left_arm.run_angle(300,-400) - await drive_base.turn(70) - await left_arm.run_angle(300,400) - await drive_base.turn(-60) - await drive_base.straight(900) - -# Celebration sound types -class CelebrationSound: - VICTORY_FANFARE = 0 - WAITING_SOUND = 1 - SUCCESS_CHIME = 2 - TA_DA = 3 - POWER_UP = 4 - RICKROLL_INSPIRED = 5 - -# Sounds functions -async def play_victory_fanfare(): - """Classic victory fanfare""" - notes = [ - (cn["B3"], 200), - (cn["B3"], 100), - (cn["B3"], 100), - (cn["E4"], 600) - ] - - for freq, duration in notes: - await hub.speaker.beep(freq, duration) - await wait(50) -async def play_waiting_sound(): - - # T3rm1na1 V3l0c1ty arpeggio recreated in pybricks - notes = [ - (cn["Cs4"], 100), - (cn["E4"], 100), - (cn["Cs4"], 100), - (cn["Cs5"], 100), - (cn["Cs4"], 100), - (cn["Gs4"], 100), - (cn["E4"], 100), - (cn["Cs4"], 100), - (cn["Gs4"], 100), - (cn["Cs4"], 100), - (cn["Cs5"], 100), - (cn["Gs4"], 100), - (cn["Cs4"], 100), - (cn["Gs4"], 100), - (cn["Cs5"], 100), - (cn["Gs4"], 100) - ] - - - for freq, duration in notes: - await hub.speaker.beep(freq, duration) -async def play_success_chime(): - """Simple success notification""" - notes = [ - (cn["E4"], 150), - (cn["Gs4"], 150), - (cn["B4"], 300), - ] - - - for freq, duration in notes: - await hub.speaker.beep(freq, duration) - await wait(50) -async def play_ta_da(): - """Classic "ta-da!" sound""" - notes = [ - (cn["Cs4"], 200), - (cn["Ds4"], 200), - (cn["E4"], 200), - (cn["Ds4"], 200), - (cn["E4"], 200), - (cn["Fs4"], 400), - (cn["Gs4"], 600), - (cn["Fs4"], 400), - (cn["Gs4"], 200), - (cn["A4"], 200), - (cn["B4"], 200), - (cn["C5"], 200), - (cn["Cs5"], 200) - ] - - for freq, duration in notes: - await hub.speaker.beep(freq, duration) - #await wait(100) -async def play_power_up(): - """Rising power-up sound""" - frequencies = [ - 164.81, 207.65, 246.94, 329.63, 415.30, 493.88 - ] - - for freq in frequencies: - await hub.speaker.beep(freq, 50) - await wait(10) - - - await hub.speaker.beep(659.24, 200) -async def play_rickroll_inspired(): - """Fun 80s-style dance beat inspired sound""" - # Upbeat bouncy rhythm - pattern = [ (cn["B3"], 100), (cn["Cs4"], 100), (cn["Ds4"], 100), (cn["E4"], 100), (cn["Cs4"], 100), (cn["B3"], 100), (cn["A3"], 100), (cn["B3"], 200), (cn["Cs4"], 100), (cn["B3"], 100), (cn["A3"], 100), (cn["Gs3"], 200), ] - - - - for freq, duration in pattern: - await hub.speaker.beep(freq, duration) - #await wait(50) - -# Basically a big if else statement that calls the functions above -async def celebrate_mission_complete(sound_type=CelebrationSound.RICKROLL_INSPIRED): - """ - Main celebration function to call after completing a mission. - Plays a sound and shows light animation. - - Args: - sound_type: CelebrationSound enum value (default: SUCCESS_CHIME) - """ - # Light show - hub.light.on(Color.GREEN) - - # Play the selected celebration sound - if sound_type == CelebrationSound.VICTORY_FANFARE: - await play_victory_fanfare() - elif sound_type == CelebrationSound.WAITING_SOUND: - await play_waiting_sound() - elif sound_type == CelebrationSound.SUCCESS_CHIME: - await play_success_chime() - elif sound_type == CelebrationSound.TA_DA: - await play_ta_da() - elif sound_type == CelebrationSound.POWER_UP: - await play_power_up() - elif sound_type == CelebrationSound.RICKROLL_INSPIRED: - await play_rickroll_inspired() - else: - await play_success_chime() # Default fallback - - # Blink the light - for _ in range(3): - hub.light.off() - await wait(100) - hub.light.on(Color.GREEN) - await wait(100) - - hub.light.off() - -# This where everything happens + await drive_base.straight(420) + await right_arm.run_angle(300,-100) + await drive_base.straight(-100) + await right_arm.run_angle(300, 100) + await drive_base.straight(-350) async def main(): - # MAIN LOOP while True: - await celebrate_mission_complete(CelebrationSound.RICKROLL_INSPIRED) + + await celebrate_mission_complete(CelebrationSound.LEVEL_UP) color_reflected_percent = await color_sensor.reflection() - print(f"Color reflection percentage: {color_reflected_percent}") + print(color_reflected_percent) color_detected = await color_sensor.color() - print(f'Detected color: {color_detected}') - hsv = await color_sensor.hsv() - print(f"Measured HSV: {hsv}") + print(f'Detected color: {color_detected.h}, {color_detected.s}, {color_detected.v}') if color_reflected_percent > 0: if color_detected == Color.GREEN: print('Running Mission 1') @@ -318,24 +260,19 @@ async def main(): elif color_detected == Color.YELLOW: print('Running Mission 3') await Run3() - await celebrate_mission_complete(CelebrationSound.SUCCESS_CHIME) - elif color_detected == Color.ORANGE: + await celebrate_mission_complete(CelebrationSound.SUCCESS_CHIME ) + elif color_detected == Color.BLUE: print('Running Mission 4') await Run4() await celebrate_mission_complete(CelebrationSound.POWER_UP) - elif color_detected == Color.BLUE: + elif color_detected == Color.RED: print('Running Mission 5') await Run5() - await celebrate_mission_complete(CelebrationSound.POWER_UP) - elif color_detected == Color.RED: - print('Running Mission 6') - await Run6() - await celebrate_mission_complete(CelebrationSound.TA_DA) + await celebrate_mission_complete(CelebrationSound.LEVEL_UP) else: hub.light.off() left_motor.stop() right_motor.stop() - else: - print("No color was detected.") - await wait(100) # prevent loop from iterating fast -run_task(main()) \ No newline at end of file + await wait(1000) #prevent loop from iterating fast +# Main execution loop +run_task(main()) From 9b04c18889b21db32c2f003b8a77572d201b0698 Mon Sep 17 00:00:00 2001 From: Atharv <30nagava@elmbrookstudents.org> Date: Sat, 11 Oct 2025 18:22:21 +0000 Subject: [PATCH 4/6] Update for contest --- twist_scrimmage.py | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/twist_scrimmage.py b/twist_scrimmage.py index 2b0fcd6..1e2d7f1 100644 --- a/twist_scrimmage.py +++ b/twist_scrimmage.py @@ -149,23 +149,22 @@ async def celebrate_mission_complete(sound_type=CelebrationSound.SUCCESS_CHIME): hub.light.off() async def Run1(): - await multitask(left_arm.run_angle(1000, 300), right_arm.run_angle(1000,500)) + left_arm.run_angle(1000, 300) + right_arm.run_angle(1000,500) await drive_base.straight(320) - await right_arm.run_angle(5000,-500, Stop.HOLD) await right_arm.run_angle(5000,500, Stop.HOLD) await right_arm.run_angle(5000,-500, Stop.HOLD) await right_arm.run_angle(5000,500, Stop.HOLD) await right_arm.run_angle(5000,-500, Stop.HOLD) - await drive_base.turn(-20) - await drive_base.straight(275) + await drive_base.straight(277) await drive_base.turn(20) - await drive_base.straight(63) - - await multitask(drive_base.turn(-30), right_arm.run_angle(50,500)) + await drive_base.straight(65) + await drive_base.turn(-30) + right_arm.run_angle(50,500) await drive_base.turn(45) - await drive_base.straight(-135) + await drive_base.straight(-145) await drive_base.turn(-60) await drive_base.straight(90) await left_arm.run_angle(1000,-450) @@ -173,7 +172,7 @@ async def Run1(): await left_arm.run_angle(1000,450) await drive_base.straight(10) await drive_base.turn(35) - await drive_base.straight(-500) + await drive_base.straight(-600) async def Run2(): await drive_base.straight(200) @@ -187,18 +186,19 @@ async def Run2(): await drive_base.turn(45) await drive_base.straight(50) await right_arm.run_angle(350,-1000) - + await drive_base.straight(-100) await drive_base.turn(-100) await drive_base.straight(-600) async def Run3(): - await drive_base.straight(915) + await drive_base.straight(920) await drive_base.turn(-90) await drive_base.straight(60) - await left_arm.run_angle(10000,-15000) - await drive_base.straight(-60) - await drive_base.turn(85) + drive_base.turn(-10) + await left_arm.run_angle(10000,-4000) + await drive_base.straight(-110) + await drive_base.turn(90) await drive_base.straight(2000) async def Run4(): @@ -242,7 +242,7 @@ async def Run6(): async def main(): while True: - await celebrate_mission_complete(CelebrationSound.LEVEL_UP) + #await celebrate_mission_complete(CelebrationSound.LEVEL_UP) color_reflected_percent = await color_sensor.reflection() print(color_reflected_percent) @@ -252,23 +252,23 @@ async def main(): if color_detected == Color.GREEN: print('Running Mission 1') await Run1() - await celebrate_mission_complete(CelebrationSound.VICTORY_FANFARE) + #await celebrate_mission_complete(CelebrationSound.VICTORY_FANFARE) elif color_detected == Color.WHITE: print('Running Mission 2') await Run2() - await celebrate_mission_complete(CelebrationSound.RICKROLL_INSPIRED) + #await celebrate_mission_complete(CelebrationSound.RICKROLL_INSPIRED) elif color_detected == Color.YELLOW: print('Running Mission 3') await Run3() - await celebrate_mission_complete(CelebrationSound.SUCCESS_CHIME ) + #await celebrate_mission_complete(CelebrationSound.SUCCESS_CHIME ) elif color_detected == Color.BLUE: print('Running Mission 4') await Run4() - await celebrate_mission_complete(CelebrationSound.POWER_UP) + #await celebrate_mission_complete(CelebrationSound.POWER_UP) elif color_detected == Color.RED: print('Running Mission 5') await Run5() - await celebrate_mission_complete(CelebrationSound.LEVEL_UP) + #await celebrate_mission_complete(CelebrationSound.LEVEL_UP) else: hub.light.off() left_motor.stop() From 19afacd87b641facc594d031b8cf261aff30288b Mon Sep 17 00:00:00 2001 From: Atharv <30nagava@elmbrookstudents.org> Date: Sat, 11 Oct 2025 18:47:09 +0000 Subject: [PATCH 5/6] Scrimmage update after run 2 well at least yellow works now. --- twist_scrimmage.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/twist_scrimmage.py b/twist_scrimmage.py index 1e2d7f1..9e066f7 100644 --- a/twist_scrimmage.py +++ b/twist_scrimmage.py @@ -15,6 +15,7 @@ drive_base.use_gyro(True) color_sensor = ColorSensor(Port.F) Color.ORANGE = Color(37, 85, 95) Color.BLUE = Color(230,100,100) +Color.YELLOW = Color(37, 85, 95) color_sensor.detectable_colors([Color.ORANGE, Color.BLUE, Color.GREEN, Color.WHITE, Color.RED, Color.YELLOW]) hub.speaker.volume(50) # Set the volume of the speaker color_sensor.detectable_colors() @@ -149,7 +150,7 @@ async def celebrate_mission_complete(sound_type=CelebrationSound.SUCCESS_CHIME): hub.light.off() async def Run1(): - left_arm.run_angle(1000, 300) + left_arm.run_angle(1000, -300) right_arm.run_angle(1000,500) await drive_base.straight(320) await right_arm.run_angle(5000,-500, Stop.HOLD) @@ -167,12 +168,12 @@ async def Run1(): await drive_base.straight(-145) await drive_base.turn(-60) await drive_base.straight(90) - await left_arm.run_angle(1000,-450) + await left_arm.run_angle(1000, 450) await drive_base.straight(-145) - await left_arm.run_angle(1000,450) + await left_arm.run_angle(1000,-450) await drive_base.straight(10) await drive_base.turn(35) - await drive_base.straight(-600) + await drive_base.straight(-700) async def Run2(): await drive_base.straight(200) @@ -188,7 +189,7 @@ async def Run2(): await right_arm.run_angle(350,-1000) await drive_base.straight(-100) await drive_base.turn(-100) - await drive_base.straight(-600) + await drive_base.straight(-750) async def Run3(): @@ -248,7 +249,7 @@ async def main(): color_detected = await color_sensor.color() print(f'Detected color: {color_detected.h}, {color_detected.s}, {color_detected.v}') - if color_reflected_percent > 0: + if color_reflected_percent > 1: if color_detected == Color.GREEN: print('Running Mission 1') await Run1() From 5e1f3098f9bd07bf80bfeec1d8959ea6ff06b41a Mon Sep 17 00:00:00 2001 From: Atharv <30nagava@elmbrookstudents.org> Date: Sat, 11 Oct 2025 19:08:38 +0000 Subject: [PATCH 6/6] Changes after scrimmage run 3 --- twist_scrimmage.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/twist_scrimmage.py b/twist_scrimmage.py index 9e066f7..8f68b24 100644 --- a/twist_scrimmage.py +++ b/twist_scrimmage.py @@ -204,26 +204,28 @@ async def Run3(): async def Run4(): await drive_base.straight(519) - await left_arm.run_angle(300, -100) - await left_arm.run_angle(300, 500) + await left_arm.run_angle(300, -200) + await left_arm.run_angle(800, 1000) await drive_base.straight(180) await drive_base.turn(-37) + await right_arm.run_angle(300, -50) await drive_base.straight(50) - await right_arm.run_angle(300, -400) + await right_arm.run_angle(300, -350) await drive_base.straight(-150) await drive_base.turn(125) await drive_base.straight(50) await right_arm.run_angle(300, 400) await drive_base.straight(-75) - await right_arm.run_angle(300, 300) + await right_arm.run_angle(300, -200) await drive_base.turn(-40) - await drive_base.straight(250) + await right_arm.run_angle(300, 250) + await drive_base.straight(260) await right_arm.run_angle(100, -300) await drive_base.straight(30) await right_arm.run_angle(50,-250) await drive_base.turn(30) await drive_base.straight(-200) - await drive_base.turn(-50) + await drive_base.turn(-67) await drive_base.straight(-800) async def Run5():