diff --git a/final/2main.py b/final/2main.py new file mode 100644 index 0000000..7c0940d --- /dev/null +++ b/final/2main.py @@ -0,0 +1,113 @@ + +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 + + +left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE) +right_motor = Motor(Port.B) +left_arm = Motor(Port.C, Direction.COUNTERCLOCKWISE) +right_arm = Motor(Port.D) + +drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180) + +drive_base.settings(550,700,100,100) + +drive_base.use_gyro(True) + +async def Run1(): + 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.turn(20) + await drive_base.straight(63) + + await drive_base.turn(-30) + right_arm.run_angle(50,500) + await drive_base.turn(45) + await drive_base.straight(-135) + await drive_base.turn(-60) + await drive_base.straight(90) + await left_arm.run_angle(1000,-450) + await drive_base.straight(-145) + await left_arm.run_angle(1000,450) + await drive_base.straight(10) + await drive_base.turn(35) + 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.turn(-100) + await drive_base.straight(-600) + + +async def Run3(): + await drive_base.straight(915) + 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) + await drive_base.straight(2000) + + +async def Run5(): + 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 Run6(): + 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) + + +def main(): + if color_sensor.color() == Color.GREEN: + Run1() + + if color_sensor.color() == Color.WHITE: + Run2() + + if color_sensor.color() == Color.YELLOW: + Run3() + + if color_sensor.color() == Color.BLUE: + Run5() + + if color_sensor.color() == Color.RED: + Run6() + + print(f'Detected color: {color_sensor.color()}') + +# Main execution loop +while True: + main() + wait(100) diff --git a/final/3main.py b/final/3main.py new file mode 100644 index 0000000..5475bd3 --- /dev/null +++ b/final/3main.py @@ -0,0 +1,102 @@ +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 + +async def Run1(): + 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(275) + 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.turn(45) + await drive_base.straight(-135) + await drive_base.turn(-60) + await drive_base.straight(90) + await left_arm.run_angle(1000,-450) + await drive_base.straight(-145) + await left_arm.run_angle(1000,450) + await drive_base.straight(10) + await drive_base.turn(35) + 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.turn(-100) + await drive_base.straight(-600) + +async def Run3(): + await drive_base.straight(915) + 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) + await drive_base.straight(2000) + +async def Run5(): + 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 Run6(): + 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(): + while True: + detected_color = color_sensor.color(True) + + if detected_color == Color.GREEN: + print('Detected color: Green') + await Run1() + + elif detected_color == Color.WHITE: + print('Detected color: White') + await Run2() + + elif detected_color == Color.YELLOW: + print('Detected color: Yellow') + await Run3() + + elif detected_color == Color.BLUE: + print('Detected color: Blue') + await Run5() + + elif detected_color == Color.RED: + print('Detected color: Red') + await Run6() + + else: + print("None detected") + +# Main execution +run_task(main()) \ No newline at end of file diff --git a/final/main4emaj.py b/final/main4emaj.py new file mode 100644 index 0000000..5335147 --- /dev/null +++ b/final/main4emaj.py @@ -0,0 +1,274 @@ +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 + +hub = PrimeHub() +left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE) +right_motor = Motor(Port.B) +left_arm = Motor(Port.C, Direction.COUNTERCLOCKWISE) +right_arm = Motor(Port.D) +drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180) +drive_base.settings(550,700,100,100) +drive_base.use_gyro(True) +color_sensor = ColorSensor(Port.F) +hub.speaker.volume(50) # Set the volume of the speaker + +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 +} + + + +async def Run1(): + 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.turn(20) + await drive_base.straight(63) + await drive_base.turn(-30) + right_arm.run_angle(50,500) + await drive_base.turn(45) + await drive_base.straight(-135) + await drive_base.turn(-60) + await drive_base.straight(90) + await left_arm.run_angle(1000,-450) + await drive_base.straight(-145) + await left_arm.run_angle(1000,450) + await drive_base.straight(10) + await drive_base.turn(35) + 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(915) + 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) + await drive_base.straight(2000) +async def Run5(): + 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 Run6(): + 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) +# 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 = [ + (330, 200), # E4 + (330, 100), # E4 + (330, 100), # E4 + (440, 600), # A4 + ] + + for freq, duration in notes: + await hub.speaker.beep(freq, duration) + await wait(50) +async def play_level_up(): + """Upward scale for level completion""" + 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) + await wait(20) +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["B3"], 200), # B4 + (cn["E4"], 400), # E5 + ] + + 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"], 200), (cn["Cs4"], 200), (cn["Ds4"], 200), (cn["E4"], 200), + (cn["Cs4"], 200), (cn["B3"], 200), (cn["A3"], 200), (cn["B3"], 300), + (cn["Cs4"], 200), (cn["B3"], 200), (cn["A3"], 200), (cn["Gs3"], 400), + ] + + + + for freq, duration in pattern: + await hub.speaker.beep(freq, duration) + await wait(50) +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.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() + +async def main(): + while True: + + await celebrate_mission_complete(CelebrationSound.LEVEL_UP) + color_reflected_percent = await color_sensor.reflection() + print(color_reflected_percent) + + color_detected = await color_sensor.color() + print(f'Detected color: {color_detected}') + + if color_detected == Color.GREEN: + print('Running Mission 1') + await Run1() + 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) + elif color_detected == Color.YELLOW: + print('Running Mission 3') + await Run3() + await celebrate_mission_complete(CelebrationSound.SUCCESS_CHIME) + elif color_detected == Color.BLUE: + 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.LEVEL_UP) + else: + hub.light.off() + left_motor.stop() + right_motor.stop() + await wait(100) #prevent loop from iterating fast + +# Main execution loop +run_task(main()) \ No newline at end of file