.
\ No newline at end of file
diff --git a/README.md b/README.md
index fc9cc11..5187815 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,146 @@
-# 65266 Lego Dynamics - UNEARTHED Season Repository
+# 65266 Lego Dynamics - UNEARTHED Season Robot Code
+
+
+
+**Competitive Robotics Code for FLL SUBMERGED℠ Season**
+
+
+
+
+
+
+
+---
## Project Overview
-This repository contains the Pybricks code for Team 65266 Lego Dynamics' robot for the UNEARTHED season.
+Welcome to the official code repository for **Team 65266 - Lego Dynamics**! This repository contains all the Pybricks code powering our robot through the UNEARTHED season missions. Our modular approach allows for flexible mission execution and quick color-sensor-based run selection.
+
+---
## Robot Hardware
-* **Robot Name:** Optimus Prime III
-* **Robot Firmware:** PyBricks firmware
-* **Motors:** Two large motors for attachments, C left, D right, Two small motors for drive, A left, B right
-* **Sensors:** visible up-facing color sensor for quick starts
-* **Attachments:** Lots of 'em
+### Meet Optimus Prime III
+
+| Component | Specification |
+|-----------|--------------|
+| **Robot Name** | Optimus Prime III |
+| **Firmware** | Pybricks |
+| **Attachment Motors** | 2x Large Motors (Ports C & D) |
+| **Drive Motors** | 2x Small Motors (Ports A & B) |
+| **Sensors** | Up-facing Color Sensor (Quick Start) |
+| **Attachments** | Multiple mission-specific tools |
+
+### Motor Configuration
+- **Port A**: Left Drive Motor (Small)
+- **Port B**: Right Drive Motor (Small)
+- **Port C**: Left Attachment Motor (Large)
+- **Port D**: Right Attachment Motor (Large)
+
+---
## Code Structure
-Files are the different runs we do, with each run consisting of one or multiple mission completions. Another script combines these files into a "master" file, which then adds the color-sensor-to-start logic.
+Our codebase is organized for maximum efficiency and modularity:
+
+```
+Repository
+ ┣ run_1.py # Individual mission runs
+ ┣ run_2.py
+ ┣ run_3.py
+ ┣ ...
+ ┗ masterFile.py # 🎯 Combined master file with color-start logic - this changes periodically as we release new versions. Check this README if you are unsure what code should be loaded on the robot.
+```
+
+### Workflow
+1. **Individual Run Files** → Contain specific mission sequences
+2. **Script Combination** → Merges runs into master file
+3. **Color Sensor Logic** → Adds intelligent run selection based on color detection
+
+---
## How to Use
-Load the master file into PyBricks, then send it over to the robot. Then you hold a color LEGO up to the sensor to start it.
+### Installation & Deployment - from the server - everyday
+
+1. Download the file codes_for_scrimmage/hazmat/mainhazmatUPD.py
+ - You can do this through the repo, by using cURL, or by using git.
+ - Repo - Go to [codes_for_scrimmage/hazmat/mainhazmatUPD.py](codes_for_scrimmage/hazmat/mainhazmatUPD.py) and click the "Download" button.
+ - cURL or another HTTP data transferrer -
+
+ ```curl -o mainhazmatUPD.py https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/main/codes_for_scrimmage/hazmat/mainhazmatUPD.py```
+ - git CLI -
+
+ ```git clone -b dev https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed.git && cd solutions_season_unearthed/codes_for_scrimmage/hazmat```
+
+ Then use mainhazmatUPD.py.
+
+2. Open https://code.pybricks.com/ and select the "Import a file" button on the top of the left bar. Import the .py file. Pair your robot via Bluetooth in Pybricks by selecting the Bluetooth button.
+
+ - Import button looks like this:
+ 
+ - Bluetooth button looks like this:
+ 
+
+3. **Upload to Robot** - Click "Download and Run" or send the program to the robot
+ - Run button looks like this: 
+
+
+4. **Start Your Run**
+ - If starting without Pybricks, press the center circular button on the SPIKE Prime Hub to start the program.
+ - Hold a colored LEGO brick up to the color sensor.
+ - Different colors trigger different mission runs - color mapping is below.
+
+### Color Start System
+| Color | Mission |
+|-------|-----------|
+| Green 🟩 | Run 1 |
+| Purple 🟪 | Run 2 |
+| Red 🟥| Run 3 |
+| Yellow 🟨| Run 4 |
+| Blue 🟦| Run 5 |
+| Orange 🟧| Run 6 |
+
+---
+
+## Competition Notes
+
+- **Quick Start**: Color sensor enables rapid run switching without reprogramming
+- **Modular Design**: Easy to test and modify individual missions
+- **Flexible Attachments**: Multiple tools optimized for different challenges
+
+---
+
+## Contributing
+
+Team members can contribute by:
+- Reporting bugs via Issues
+- Suggesting mission optimizations
+- Testing new attachment designs
+- Documenting successful strategies
+
+---
## License
-GNU General Public License
-You can take inspiration from our code, but you can't take our exact code.
\ No newline at end of file
+
+**GNU General Public License v3.0**
+
+You can take inspiration from our code, but you can't take our exact code.
+
+This project is licensed under GPL-3.0 - see the [LICENSE](LICENSE) file for complete details.
+
+### What This Means:
+- Learn from our approaches and strategies
+- Understand our logic and algorithms
+- Don't copy-paste our exact code
+- Create your own unique implementations
+
+---
+
+## Contact & Support
+
+**Team 65266 - Lego Dynamics**
+
+Questions about our approach? Interested in collaboration? Reach out!
+
+---
\ No newline at end of file
diff --git a/RoshoDaGoat.py b/RoshoDaGoat.py
new file mode 100644
index 0000000..7d84ee2
--- /dev/null
+++ b/RoshoDaGoat.py
@@ -0,0 +1,42 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch, run_task, multitask
+
+hub = PrimeHub()
+
+# Initialize both motors. In this example, the motor on the
+# left must turn counterclockwise to make the robot go forward.
+left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
+right_motor = Motor(Port.B)
+
+arm_motor = Motor(Port.D, Direction.CLOCKWISE)
+arm_motor_left= Motor(Port.C, Direction.CLOCKWISE)
+# Initialize the drive base. In this example, the wheel diameter is 56mm.
+# The distance between the two wheel-ground contact points is 112mm.
+drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180)
+
+print('The default settings are: ' + str(drive_base.settings()))
+drive_base.settings(300,1000,300,750)
+# Optionally, uncomment the line below to use the gyro for improved accuracy.
+drive_base.use_gyro(True)
+
+async def main():
+ await drive_base.straight(519)
+ await arm_motor_left.run_angle(-10000, 300)
+ await arm_motor_left.run_angle(10000, 600)
+ await drive_base.straight(160)
+ await drive_base.turn(-30)
+ await drive_base.straight(50)
+ await arm_motor.run_angle(3000, 3000)
+ await drive_base.straight(-150)
+ await drive_base.turn(135)
+ await drive_base.straight(50)
+ await arm_motor.run_angle(10000, -3000)
+ await drive_base.straight(-100)
+ await drive_base.turn(-54)
+ await arm_motor.run_angle(10000, -3000)
+ await drive_base.straight(200)
+ await arm_motor.run_angle(10000, 10000)
+run_task(main())
\ No newline at end of file
diff --git a/codes_for_scrimmage/hazmat/HazmatCodeChanges.py b/codes_for_scrimmage/hazmat/HazmatCodeChanges.py
new file mode 100644
index 0000000..c48de0b
--- /dev/null
+++ b/codes_for_scrimmage/hazmat/HazmatCodeChanges.py
@@ -0,0 +1,227 @@
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.tools import run_task, multitask
+from pybricks.tools import wait, StopWatch
+from pybricks.robotics import DriveBase
+from pybricks.hubs import PrimeHub
+
+# Initialize hub and devices
+hub = PrimeHub()
+left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
+right_motor = Motor(Port.B)
+left_arm = Motor(Port.C)
+right_arm = Motor(Port.D)
+lazer_ranger = UltrasonicSensor(Port.E)
+color_sensor = ColorSensor(Port.F)
+
+# DriveBase configuration
+WHEEL_DIAMETER = 68.8 # mm (adjust for your wheels)
+AXLE_TRACK = 180 # mm (distance between wheels)
+drive_base = DriveBase(left_motor, right_motor, WHEEL_DIAMETER, AXLE_TRACK)
+drive_base.settings(600, 500, 300, 200)
+drive_base.use_gyro(True)
+
+WALL_DISTANCE = 300 # mm
+
+async def drive_forward():
+ """Drive forward continuously using DriveBase."""
+ drive_base.drive(400, 0)
+
+
+async def monitor_distance():
+ """Monitor ultrasonic sensor and stop when wall is detected."""
+ while True:
+ distance = await lazer_ranger.distance()
+ print('Distancing...',distance)
+
+ if distance < WALL_DISTANCE:
+ # Stop the drivebase
+ await drive_base.stop
+ print(f"Wall detected at {distance}mm!")
+ break
+
+ # Small delay to prevent overwhelming the sensor
+ await wait(50)
+
+# New Section
+async def Run1(): # From M8_5.py
+ 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.turn(20)
+ 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(-145)
+ 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(-600)
+
+async def Run2(): # From Heavy_lifting_final.py
+ await drive_base.straight(200)
+ await drive_base.turn(-20)
+ await drive_base.straight(536)
+ await drive_base.turn(60, Stop.HOLD)
+ await drive_base.straight(30)
+ await right_arm.run_angle(5000, 2900)
+ await drive_base.straight(40)
+ await right_arm.run_angle(5000, -4000)
+ await drive_base.straight(-60)
+ await drive_base.turn(-60)
+ await drive_base.straight(-670)
+
+
+async def Run3(): # tip the scale.py
+ left_arm.run_angle(600,-200)
+ right_arm.run_angle(500,200)
+ await drive_base.straight(70)
+
+ await drive_base.turn(-70)
+ await drive_base.straight(900)
+ await drive_base.turn(115)
+
+ await drive_base.straight(75)
+ await drive_base.straight(33)
+ await right_arm.run_angle(500,-250)
+ await right_arm.run_angle(500,250)
+ await drive_base.turn(66)
+ await drive_base.straight(7)
+
+ await left_arm.run_angle(560,390) #going down
+ print('turning now...')
+ await drive_base.turn(40) # turning right
+ await left_arm.run_angle(410,-400) #lift a little bit
+ await drive_base.straight(80)
+ await drive_base.turn(-41) #ma din din din dun 67 41 21 69
+ await drive_base.straight(900)
+
+
+async def Run4(): # From Send_Over_Final.py
+ #Get to mission
+ await drive_base.straight(920)
+ await drive_base.turn(-90,Stop.HOLD)
+ await drive_base.straight(65)
+ #Solve mission
+ drive_base.turn(-10)
+ await left_arm.run_angle(10000, 4000)
+ #Get to Red Start
+ await drive_base.straight(-110)
+ await drive_base.turn(90)
+ # while True:
+ # distance_mm = await lazer_ranger.distance()
+ # print('distancing...',distance_mm)
+
+ # if distance_mm < 300:
+ # drive_base.stop
+ # break
+ # else:
+ # drive_base.straight(300)
+ # print('running...')
+ # await wait(10)
+ await multitask(
+ drive_forward(),
+ monitor_distance()
+ )
+
+
+
+# Add Rishi's code here
+async def Run5():
+ await drive_base.straight(519)
+ await left_arm.run_angle(-10000, 300)
+ await left_arm.run_angle(10000, 600)
+ await drive_base.straight(160)
+ await drive_base.turn(-30)
+ await drive_base.straight(50)
+ await right_arm.run_angle(3000, 3000)
+ await drive_base.straight(-150)
+ await drive_base.turn(120)
+ await drive_base.straight(25)
+ await right_arm.run_angle(10000, -3000)
+ await drive_base.straight(-110)
+ await drive_base.turn(-43)
+ await right_arm.run_angle(10000, -3000)
+ await drive_base.straight(295)
+ await right_arm.run_angle(10000, 9000)
+ await drive_base.straight(-65)
+ await drive_base.turn(45)
+ await drive_base.straight(175)
+ await drive_base.turn(24.5)
+ await drive_base.straight(-100)
+ await right_arm.run_angle(10000, -8500)
+ await drive_base.straight(100)
+ await right_arm.run_angle(10000, 3500)
+ await drive_base.turn(-30)
+ await drive_base.straight(-300)
+ await drive_base.turn(-80)
+ await drive_base.straight(-700)
+
+
+# Add - Adi's code here
+async def Run6():
+ await drive_base.straight(750)
+ await drive_base.straight(-650)
+
+
+# Function to classify color based on HSV
+def detect_color(h, s, v, reflected):
+ if reflected > 4:
+ if h < 4 or h > 350: # red
+ return "Red"
+ elif 3 < h < 40 and s > 70: # orange
+ return "Orange"
+ elif 47 < h < 56: # yellow
+ return "Yellow"
+ elif 70 < h < 160: # green - do it vertically not horizontally for accuracy
+ return "Green"
+ elif 210 < h < 225: # blue - do it vertically not horizontally for accuracy
+ return "Blue"
+ elif 260 < h < 350: # purple
+ return "Purple"
+ else:
+ return "Unknown"
+ return "Unknown"
+
+
+async def main():
+ while True:
+ h, s, v = await color_sensor.hsv()
+ reflected = await color_sensor.reflection()
+ color = detect_color(h, s, v, reflected)
+
+ if color == "Red":
+ print('Running Mission 3')
+ await Run3() #red
+ elif color == "Orange":
+ print('Running Mission 6')
+ await Run6() #orange
+ elif color == "Yellow":
+ print('Running Mission 4')
+ await Run4() #yellow
+ elif color == "Green":
+ print('Running Mission 1')
+ await Run1() #green - vertically
+ elif color == "Blue":
+ print('Running Mission 5')
+ await Run5() #blue - vertically
+ elif color == "Purple":
+ print('Running Mission 2')
+ await Run2() #purple - vertically
+ else:
+ print(f"Unknown color detected (Hue: {h}, Sat: {s}, Val: {v})")
+ await wait(10)
+# Run the main function
+run_task(main())
\ No newline at end of file
diff --git a/codes_for_scrimmage/hazmat/Heavy_lifting_final.py b/codes_for_scrimmage/hazmat/Heavy_lifting_final.py
new file mode 100644
index 0000000..86a67e9
--- /dev/null
+++ b/codes_for_scrimmage/hazmat/Heavy_lifting_final.py
@@ -0,0 +1,33 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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(600,500,300,200)
+drive_base.use_gyro(True)
+
+async def main():
+ #await drive_base.straight(200)
+ await drive_base.turn(-20)
+ await drive_base.straight(536)
+ await drive_base.turn(60, Stop.HOLD)
+ await drive_base.straight(30)
+
+ await right_arm.run_angle(5000,2900)
+ await drive_base.straight(40)
+ await right_arm.run_angle(5000,-4000)
+ await drive_base.straight(-60)
+
+ await drive_base.turn(-60)
+ await drive_base.straight(-670)
+run_task(main())
\ No newline at end of file
diff --git a/codes_for_scrimmage/hazmat/M8_5.py b/codes_for_scrimmage/hazmat/M8_5.py
new file mode 100644
index 0000000..95ecc9e
--- /dev/null
+++ b/codes_for_scrimmage/hazmat/M8_5.py
@@ -0,0 +1,49 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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(600,500,300,200)
+drive_base.use_gyro(True)
+
+async def main():
+ 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.turn(20)
+ 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(-145)
+ 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(-600)
+run_task(main())
\ No newline at end of file
diff --git a/codes_for_scrimmage/hazmat/Send_Over_Final.py b/codes_for_scrimmage/hazmat/Send_Over_Final.py
new file mode 100644
index 0000000..db9a179
--- /dev/null
+++ b/codes_for_scrimmage/hazmat/Send_Over_Final.py
@@ -0,0 +1,46 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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)
+lazer_ranger = UltrasonicSensor(Port.E)
+
+drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180)
+
+drive_base.settings(600,500,300,200)
+drive_base.use_gyro(True)
+
+async def main():
+ #Get to mission
+ await drive_base.straight(920)
+ await drive_base.turn(-90,Stop.HOLD)
+ await drive_base.straight(65)
+ #Solve mission
+ drive_base.turn(-10)
+ await left_arm.run_angle(10000,-4000)
+ #Get to Red Start
+ await drive_base.straight(-110)
+ await drive_base.turn(90)
+ await drive_base.straight(500)
+ while True:
+ distance_mm = await lazer_ranger.distance()
+ print('distancing...',distance_mm)
+
+ if distance_mm < 300:
+ drive_base.stop
+ break
+ else:
+ drive_base.straight(300)
+ print('running...')
+ await wait(10)
+
+run_task(main())
\ No newline at end of file
diff --git a/codes_for_scrimmage/hazmat/hazmat_main.py b/codes_for_scrimmage/hazmat/hazmat_main.py
new file mode 100644
index 0000000..ea87f5e
--- /dev/null
+++ b/codes_for_scrimmage/hazmat/hazmat_main.py
@@ -0,0 +1,384 @@
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.tools import run_task, multitask
+from pybricks.tools import wait, StopWatch
+from pybricks.robotics import DriveBase
+from pybricks.hubs import PrimeHub
+
+# Initialize hub and devices
+hub = PrimeHub()
+
+left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
+right_motor = Motor(Port.B)
+
+left_arm = Motor(Port.C)
+right_arm = Motor(Port.D)
+lazer_ranger = UltrasonicSensor(Port.E)
+color_sensor = ColorSensor(Port.F)
+
+# DriveBase configuration
+WHEEL_DIAMETER = 68.8 # mm (adjust for your wheels)
+AXLE_TRACK = 180 # mm (distance between wheels)
+drive_base = DriveBase(left_motor, right_motor, WHEEL_DIAMETER, AXLE_TRACK)
+drive_base.settings(600,500,300,200)
+drive_base.use_gyro(True)
+
+# Color Settings
+# https://docs.pybricks.com/en/latest/parameters/color.html
+print("Default Detected Colors:", color_sensor.detectable_colors())
+
+# Custom color Hue, Saturation, Brightness value for Lego bricks
+Color.MAGENTA = Color(300,100,100)
+Color.VIOLET = Color(277,68,32)
+Color.BLUE = Color(240,100,100)
+Color.CYAN = Color(180,100,100)
+
+LEGO_BRICKS_COLOR = [
+ Color.BLUE,
+ Color.GREEN,
+ Color.WHITE,
+ Color.RED,
+ Color.YELLOW,
+ Color.MAGENTA,
+ Color.VIOLET,
+ Color.NONE
+]
+#Update Detectable colors
+color_sensor.detectable_colors(LEGO_BRICKS_COLOR)
+
+print("Updated Detected Colors:", color_sensor.detectable_colors())
+
+hub.speaker.volume(50) # Set the volume of the speaker
+
+# 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()
+
+WALL_DISTANCE = 200 # mm
+async def drive_forward():
+ """Drive forward continuously using DriveBase."""
+ #await drive_base.straight(5000)
+ drive_base.drive(400,0)
+async def monitor_distance():
+ """Monitor ultrasonic sensor and stop when wall is detected."""
+ while True:
+ distance = await lazer_ranger.distance()
+ print('distancing...',distance)
+
+ if distance < WALL_DISTANCE:
+ # Stop the drivebase
+ await drive_base.turn(-180)
+ drive_base.brake
+ print(f"Wall detected at {distance}mm!")
+ break
+
+ # Small delay to prevent overwhelming the sensor
+ await wait(50)
+
+async def Run1(): #From M8_5.py
+ 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.turn(20)
+ 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(-145)
+ 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(-600)
+
+async def Run2(): #From Heavy_lifting_final.py
+ await drive_base.straight(200)
+ await drive_base.turn(-20)
+ await drive_base.straight(536)
+ await drive_base.turn(60, Stop.HOLD)
+ await drive_base.straight(30)
+
+ await right_arm.run_angle(5000,2900)
+ await drive_base.straight(40)
+ await right_arm.run_angle(5000,-4000)
+ await drive_base.straight(-60)
+
+ await drive_base.turn(-60)
+ await drive_base.straight(-670)
+
+
+async def Run3(): #tip the scale.py
+ left_arm.run_angle(600,200)
+ right_arm.run_angle(500,200)
+ await drive_base.straight(70)
+
+ await drive_base.turn(-70)
+ await drive_base.straight(900)
+ await drive_base.turn(115)
+
+ await drive_base.straight(75)
+ await drive_base.straight(33)
+ await right_arm.run_angle(500,-250)
+ await right_arm.run_angle(500,250)
+ await drive_base.turn(66)
+ await drive_base.straight(7)
+
+ await left_arm.run_angle(560,-390) #going down
+ await drive_base.turn(40) # turning right
+ await left_arm.run_angle(-410,-400) #lift a little bit
+
+ await drive_base.turn(-46.5) #ma din din din dun
+ await drive_base.turn(-40)
+ await drive_base.straight(900)
+
+async def Run4(): #From Send_Over_Final.py
+
+ #Get to mission
+ await drive_base.straight(920)
+ await drive_base.turn(-90,Stop.HOLD)
+ await drive_base.straight(65)
+ #Solve mission
+ drive_base.turn(-10)
+ await left_arm.run_angle(10000,-4000)
+ #Get to Red Start
+ await drive_base.straight(-110)
+ await drive_base.turn(90)
+ await drive_base.straight(500)
+
+ # while True:
+ # distance_mm = await lazer_ranger.distance()
+ # print('distancing...',distance_mm)
+
+ # if distance_mm < 300:
+ # drive_base.stop
+ # break
+ # else:
+ # drive_base.straight(300)
+ # print('running...')
+ # await wait(10)
+ await multitask(
+ drive_forward(),
+ monitor_distance()
+ )
+
+#Add Rishi's code here
+async def Run5():
+ await drive_base.straight(519)
+ await left_arm.run_angle(-10000, 300)
+ await left_arm.run_angle(10000, 600)
+ await drive_base.straight(160)
+ await drive_base.turn(-30)
+ await drive_base.straight(50)
+ await right_arm.run_angle(3000, 3000)
+ await drive_base.straight(-150)
+ await drive_base.turn(135)
+ await drive_base.straight(25)
+ await right_arm.run_angle(10000, -3000)
+ await drive_base.straight(-100)
+ await drive_base.turn(-55)
+ await right_arm.run_angle(10000, -3000)
+ await drive_base.straight(250)
+ await drive_base.turn(-5)
+ await right_arm.run_angle(10000, 7000)
+ await drive_base.straight(-50)
+ await drive_base.turn(45)
+ await drive_base.straight(100)
+ await drive_base.turn(37)
+ await right_arm.run_angle(10000, -6000)
+ await drive_base.straight(90)
+ await right_arm.run_angle(3000, 3000)
+ await drive_base.turn(-40)
+
+#Add - Adi's code here
+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:
+
+ #await celebrate_mission_complete(CelebrationSound.LEVEL_UP)
+ color_reflected_percent = await color_sensor.reflection()
+ print(color_reflected_percent)
+
+
+ if color_reflected_percent > 0: # Make sure we actually have color reflections before checking for color
+ color_detected = await color_sensor.color() # Moved this inside the if clause
+ print(f'Detected color:{color_detected} : {color_detected.h}, {color_detected.s}, {color_detected.v}')
+
+ 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.RED:
+ print('Running Mission 3')
+ await Run3()
+ #await celebrate_mission_complete(CelebrationSound.SUCCESS_CHIME )
+ elif color_detected == Color.YELLOW:
+ print('Running Mission 4')
+ await Run4()
+ #await celebrate_mission_complete(CelebrationSound.POWER_UP)
+ elif color_detected == Color.BLUE:
+ print('Running Mission 5')
+ await Run5()
+ #await celebrate_mission_complete(CelebrationSound.LEVEL_UP)
+ elif color_detected == Color.VIOLET:
+ print('Running Mission 6')
+ await Run6()
+ else:
+ hub.light.off()
+ left_motor.stop()
+ right_motor.stop()
+ color_detected = Color.NONE
+ else:
+ color_detected = Color.NONE
+
+ await wait(1000) #prevent loop from iterating fast
+# Main execution loop
+run_task(main())
diff --git a/codes_for_scrimmage/hazmat/mainhazmatUPD.py b/codes_for_scrimmage/hazmat/mainhazmatUPD.py
new file mode 100644
index 0000000..c48de0b
--- /dev/null
+++ b/codes_for_scrimmage/hazmat/mainhazmatUPD.py
@@ -0,0 +1,227 @@
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.tools import run_task, multitask
+from pybricks.tools import wait, StopWatch
+from pybricks.robotics import DriveBase
+from pybricks.hubs import PrimeHub
+
+# Initialize hub and devices
+hub = PrimeHub()
+left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
+right_motor = Motor(Port.B)
+left_arm = Motor(Port.C)
+right_arm = Motor(Port.D)
+lazer_ranger = UltrasonicSensor(Port.E)
+color_sensor = ColorSensor(Port.F)
+
+# DriveBase configuration
+WHEEL_DIAMETER = 68.8 # mm (adjust for your wheels)
+AXLE_TRACK = 180 # mm (distance between wheels)
+drive_base = DriveBase(left_motor, right_motor, WHEEL_DIAMETER, AXLE_TRACK)
+drive_base.settings(600, 500, 300, 200)
+drive_base.use_gyro(True)
+
+WALL_DISTANCE = 300 # mm
+
+async def drive_forward():
+ """Drive forward continuously using DriveBase."""
+ drive_base.drive(400, 0)
+
+
+async def monitor_distance():
+ """Monitor ultrasonic sensor and stop when wall is detected."""
+ while True:
+ distance = await lazer_ranger.distance()
+ print('Distancing...',distance)
+
+ if distance < WALL_DISTANCE:
+ # Stop the drivebase
+ await drive_base.stop
+ print(f"Wall detected at {distance}mm!")
+ break
+
+ # Small delay to prevent overwhelming the sensor
+ await wait(50)
+
+# New Section
+async def Run1(): # From M8_5.py
+ 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.turn(20)
+ 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(-145)
+ 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(-600)
+
+async def Run2(): # From Heavy_lifting_final.py
+ await drive_base.straight(200)
+ await drive_base.turn(-20)
+ await drive_base.straight(536)
+ await drive_base.turn(60, Stop.HOLD)
+ await drive_base.straight(30)
+ await right_arm.run_angle(5000, 2900)
+ await drive_base.straight(40)
+ await right_arm.run_angle(5000, -4000)
+ await drive_base.straight(-60)
+ await drive_base.turn(-60)
+ await drive_base.straight(-670)
+
+
+async def Run3(): # tip the scale.py
+ left_arm.run_angle(600,-200)
+ right_arm.run_angle(500,200)
+ await drive_base.straight(70)
+
+ await drive_base.turn(-70)
+ await drive_base.straight(900)
+ await drive_base.turn(115)
+
+ await drive_base.straight(75)
+ await drive_base.straight(33)
+ await right_arm.run_angle(500,-250)
+ await right_arm.run_angle(500,250)
+ await drive_base.turn(66)
+ await drive_base.straight(7)
+
+ await left_arm.run_angle(560,390) #going down
+ print('turning now...')
+ await drive_base.turn(40) # turning right
+ await left_arm.run_angle(410,-400) #lift a little bit
+ await drive_base.straight(80)
+ await drive_base.turn(-41) #ma din din din dun 67 41 21 69
+ await drive_base.straight(900)
+
+
+async def Run4(): # From Send_Over_Final.py
+ #Get to mission
+ await drive_base.straight(920)
+ await drive_base.turn(-90,Stop.HOLD)
+ await drive_base.straight(65)
+ #Solve mission
+ drive_base.turn(-10)
+ await left_arm.run_angle(10000, 4000)
+ #Get to Red Start
+ await drive_base.straight(-110)
+ await drive_base.turn(90)
+ # while True:
+ # distance_mm = await lazer_ranger.distance()
+ # print('distancing...',distance_mm)
+
+ # if distance_mm < 300:
+ # drive_base.stop
+ # break
+ # else:
+ # drive_base.straight(300)
+ # print('running...')
+ # await wait(10)
+ await multitask(
+ drive_forward(),
+ monitor_distance()
+ )
+
+
+
+# Add Rishi's code here
+async def Run5():
+ await drive_base.straight(519)
+ await left_arm.run_angle(-10000, 300)
+ await left_arm.run_angle(10000, 600)
+ await drive_base.straight(160)
+ await drive_base.turn(-30)
+ await drive_base.straight(50)
+ await right_arm.run_angle(3000, 3000)
+ await drive_base.straight(-150)
+ await drive_base.turn(120)
+ await drive_base.straight(25)
+ await right_arm.run_angle(10000, -3000)
+ await drive_base.straight(-110)
+ await drive_base.turn(-43)
+ await right_arm.run_angle(10000, -3000)
+ await drive_base.straight(295)
+ await right_arm.run_angle(10000, 9000)
+ await drive_base.straight(-65)
+ await drive_base.turn(45)
+ await drive_base.straight(175)
+ await drive_base.turn(24.5)
+ await drive_base.straight(-100)
+ await right_arm.run_angle(10000, -8500)
+ await drive_base.straight(100)
+ await right_arm.run_angle(10000, 3500)
+ await drive_base.turn(-30)
+ await drive_base.straight(-300)
+ await drive_base.turn(-80)
+ await drive_base.straight(-700)
+
+
+# Add - Adi's code here
+async def Run6():
+ await drive_base.straight(750)
+ await drive_base.straight(-650)
+
+
+# Function to classify color based on HSV
+def detect_color(h, s, v, reflected):
+ if reflected > 4:
+ if h < 4 or h > 350: # red
+ return "Red"
+ elif 3 < h < 40 and s > 70: # orange
+ return "Orange"
+ elif 47 < h < 56: # yellow
+ return "Yellow"
+ elif 70 < h < 160: # green - do it vertically not horizontally for accuracy
+ return "Green"
+ elif 210 < h < 225: # blue - do it vertically not horizontally for accuracy
+ return "Blue"
+ elif 260 < h < 350: # purple
+ return "Purple"
+ else:
+ return "Unknown"
+ return "Unknown"
+
+
+async def main():
+ while True:
+ h, s, v = await color_sensor.hsv()
+ reflected = await color_sensor.reflection()
+ color = detect_color(h, s, v, reflected)
+
+ if color == "Red":
+ print('Running Mission 3')
+ await Run3() #red
+ elif color == "Orange":
+ print('Running Mission 6')
+ await Run6() #orange
+ elif color == "Yellow":
+ print('Running Mission 4')
+ await Run4() #yellow
+ elif color == "Green":
+ print('Running Mission 1')
+ await Run1() #green - vertically
+ elif color == "Blue":
+ print('Running Mission 5')
+ await Run5() #blue - vertically
+ elif color == "Purple":
+ print('Running Mission 2')
+ await Run2() #purple - vertically
+ else:
+ print(f"Unknown color detected (Hue: {h}, Sat: {s}, Val: {v})")
+ await wait(10)
+# Run the main function
+run_task(main())
\ No newline at end of file
diff --git a/codes_for_scrimmage/hazmat/tip the scale.py b/codes_for_scrimmage/hazmat/tip the scale.py
new file mode 100644
index 0000000..200b1ea
--- /dev/null
+++ b/codes_for_scrimmage/hazmat/tip the scale.py
@@ -0,0 +1,42 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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(300,1000,300,200)
+
+#drive_base.use_gyro(True)
+
+async def main():
+ 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.turn(55)
+
+ await left_arm.run_angle(300,-400)
+
+ await drive_base.turn(46.5)
+ await drive_base.turn(-40)
+ await drive_base.straight(900)
+run_task(main())
\ No newline at end of file
diff --git a/final/1main.py b/final/1main.py
new file mode 100644
index 0000000..f535603
--- /dev/null
+++ b/final/1main.py
@@ -0,0 +1,116 @@
+
+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
+import asyncio
+
+hub = PrimeHub()
+left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
+right_motor = Motor(Port.B)
+atarm1 = Motor(Port.E, Direction.COUNTERCLOCKWISE)
+atarm2 = Motor(Port.F)
+drive_base = DriveBase(left_motor, right_motor, wheel_diameter=56, axle_track=112)
+color_sensor = ColorSensor(Port.C)
+
+drive_base.settings(300, 500, 300, 200)
+Color.ORANGE = Color(10, 100, 100)
+Color.MAGENTA = Color(321, 100, 86)
+
+
+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)
+
+
+async def main():
+ if color_sensor.color() == Color.ORANGE:
+ await Run1()
+
+ if color_sensor.color() == Color.GREEN:
+ await Run2()
+
+ if color_sensor.color() == Color.WHITE:
+ await Run3()
+
+ if color_sensor.color() == Color.YELLOW:
+ await Run5()
+
+ if color_sensor.color() == Color.BLUE:
+ await Run6()
+
+
+ print(f'Detected color: {color_sensor.color()}')
+
+# Main execution loop
+while True:
+ run_task(main())
+ wait(100)
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/4main.py b/final/4main.py
new file mode 100644
index 0000000..147822a
--- /dev/null
+++ b/final/4main.py
@@ -0,0 +1,295 @@
+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(277)
+ await drive_base.turn(20)
+ 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(-145)
+ 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(-600)
+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)
+<<<<<<< HEAD:final/4main.py
+ 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,Stop.HOLD)
+ await drive_base.straight(65)
+ drive_base.turn(-10)
+ await left_arm.run_angle(10000,-4000)
+ await drive_base.straight(-100)
+>>>>>>> Vickram_dev_:final/main4.py
+ await drive_base.turn(90)
+ 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():
+ 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
+ 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
diff --git a/final/main5.py b/final/main5.py
new file mode 100644
index 0000000..7461d72
--- /dev/null
+++ b/final/main5.py
@@ -0,0 +1,280 @@
+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)
+Color.ORANGE = Color(37, 85, 95)
+Color.BLUE = Color(230,100,100)
+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()
+
+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 Run4():
+ await drive_base.straight(519)
+ await arm_motor_left.run_angle(-10000, 300)
+ await arm_motor_left.run_angle(10000, 600)
+ await drive_base.straight(160)
+ await drive_base.turn(-30)
+ await drive_base.straight(50)
+ await arm_motor.run_angle(3000, 3000)
+ await drive_base.straight(-150)
+ await drive_base.turn(135)
+ await drive_base.straight(50)
+ await arm_motor.run_angle(10000, -3000)
+ await drive_base.straight(-100)
+ await drive_base.turn(-54)
+ await arm_motor.run_angle(10000, -3000)
+ await drive_base.straight(250)
+ await drive_base.turn(-5)
+ await arm_motor.run_angle(10000, 7000)
+ await drive_base.straight(-50)
+ await drive_base.turn(68)
+ await arm_motor.run_angle(10000, -6000)
+ await drive_base.straight(200)
+ await arm_motor.run_angle(10000, 4000)
+ await drive_base.turn(-40)
+ await arm_motor.run_angle(10000, 7000)
+
+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:
+
+ 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.h}, {color_detected.s}, {color_detected.v}')
+ if color_reflected_percent > 0:
+ 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 4')
+ await Run4()
+ 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)
+ else:
+ hub.light.off()
+ left_motor.stop()
+ right_motor.stop()
+ await wait(1000) #prevent loop from iterating fast
+# Main execution loop
+run_task(main())
diff --git a/members/Rishi.txt b/members/Rishi.txt
new file mode 100644
index 0000000..88bea53
--- /dev/null
+++ 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
diff --git a/missions/Boat_mission.py b/missions/Boat_mission.py
new file mode 100644
index 0000000..6d87949
--- /dev/null
+++ b/missions/Boat_mission.py
@@ -0,0 +1,27 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task,multitask
+
+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(880,850,700,700)
+
+drive_base.use_gyro(True)
+
+first_run = True
+
+async def main():
+ await drive_base.straight(750)
+ await drive_base.straight(-650)
+
+run_task(main())
\ No newline at end of file
diff --git a/missions/HEAVY_LIFTING_UPD.py b/missions/HEAVY_LIFTING_UPD.py
new file mode 100644
index 0000000..da0f004
--- /dev/null
+++ b/missions/HEAVY_LIFTING_UPD.py
@@ -0,0 +1,33 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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(600,500,300,200)
+drive_base.use_gyro(True)
+
+async def main():
+ await drive_base.straight(200)
+ await drive_base.turn(-20)
+ await drive_base.straight(536)
+ await drive_base.turn(60, Stop.HOLD)
+ await drive_base.straight(30)
+
+ await right_arm.run_angle(5000,3000)
+ await drive_base.straight(40)
+ await right_arm.run_angle(5000,-4000)
+ await drive_base.straight(-60)
+
+ await drive_base.turn(-60)
+ await drive_base.straight(-670)
+run_task(main())
\ No newline at end of file
diff --git a/missions/Heavy lifting.py b/missions/Heavy lifting.py
new file mode 100644
index 0000000..643e47d
--- /dev/null
+++ b/missions/Heavy lifting.py
@@ -0,0 +1,37 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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(600,500,300,200)
+drive_base.use_gyro(True)
+
+async def main():
+ await right_arm.run_angle(2000,1000)
+
+ await drive_base.straight(200)
+ await drive_base.turn(-20)
+ await drive_base.straight(525)
+ await drive_base.turn(60)
+ await drive_base.straight(30)
+
+ await right_arm.run_angle(2000,-1000)
+ await drive_base.straight(30)
+ await right_arm.run_angle(3000,1000)
+ await drive_base.straight(-60)
+
+ await drive_base.turn(-60)
+ await drive_base.straight(-525)
+ await drive_base.turn(20)
+ await drive_base.straight(-200)
+
diff --git a/missions/Heavy_lifting_final.py b/missions/Heavy_lifting_final.py
new file mode 100644
index 0000000..5a9dd1d
--- /dev/null
+++ b/missions/Heavy_lifting_final.py
@@ -0,0 +1,36 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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(600,500,300,200)
+drive_base.use_gyro(True)
+
+async def main():
+ #Get to mission
+ await drive_base.straight(200)
+ await drive_base.turn(-20)
+ await drive_base.straight(525)
+ await drive_base.turn(60)
+ #Solve mission
+ 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)
+ #Return home
+ await drive_base.straight(-100)
+ await drive_base.turn(-100)
+ await drive_base.straight(-600)
+run_task(main())
\ No newline at end of file
diff --git a/missions/Lift.py b/missions/Lift.py
new file mode 100644
index 0000000..a5e1773
--- /dev/null
+++ b/missions/Lift.py
@@ -0,0 +1,34 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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(600,500,300,200)
+drive_base.use_gyro(True)
+
+async def main():
+ 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)
+run_task(main())
\ No newline at end of file
diff --git a/missions/Lift2.py b/missions/Lift2.py
new file mode 100644
index 0000000..a5e1773
--- /dev/null
+++ b/missions/Lift2.py
@@ -0,0 +1,34 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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(600,500,300,200)
+drive_base.use_gyro(True)
+
+async def main():
+ 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)
+run_task(main())
\ No newline at end of file
diff --git a/missions/Sand Mission.py b/missions/Sand Mission.py
index 73e1e16..368ba5c 100644
--- a/missions/Sand Mission.py
+++ b/missions/Sand Mission.py
@@ -20,10 +20,10 @@ drive_base.use_gyro(True)
async def main():
- await drive_base.straight(420)
- await right_arm.run_angle(300,-100)
+ await drive_base.straight(500)
+ await right_arm.run_angle(300,100)
await drive_base.straight(-100)
- await right_arm.run_angle(300, 100)
+ await right_arm.run_angle(300,-100)
await drive_base.straight(-350)
run_task(main())
\ No newline at end of file
diff --git a/missions/Sand_mission.py b/missions/Sand_mission.py
new file mode 100644
index 0000000..368ba5c
--- /dev/null
+++ b/missions/Sand_mission.py
@@ -0,0 +1,29 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task,multitask
+
+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(400,500,100,100)
+
+drive_base.use_gyro(True)
+
+
+async def main():
+ await drive_base.straight(500)
+ await right_arm.run_angle(300,100)
+ await drive_base.straight(-100)
+ await right_arm.run_angle(300,-100)
+ await drive_base.straight(-350)
+
+run_task(main())
\ No newline at end of file
diff --git a/missions/Send_Over.py b/missions/Send_Over.py
index 97bed5f..61e2d37 100644
--- a/missions/Send_Over.py
+++ b/missions/Send_Over.py
@@ -23,9 +23,9 @@ async def main():
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 left_arm.run_angle(10000,-4000)
+ await drive_base.straight(-90)
+ await drive_base.turn(80)
await drive_base.straight(2000)
-
+
run_task(main())
\ No newline at end of file
diff --git a/missions/Send_Over_Final.py b/missions/Send_Over_Final.py
new file mode 100644
index 0000000..db9a179
--- /dev/null
+++ b/missions/Send_Over_Final.py
@@ -0,0 +1,46 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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)
+lazer_ranger = UltrasonicSensor(Port.E)
+
+drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180)
+
+drive_base.settings(600,500,300,200)
+drive_base.use_gyro(True)
+
+async def main():
+ #Get to mission
+ await drive_base.straight(920)
+ await drive_base.turn(-90,Stop.HOLD)
+ await drive_base.straight(65)
+ #Solve mission
+ drive_base.turn(-10)
+ await left_arm.run_angle(10000,-4000)
+ #Get to Red Start
+ await drive_base.straight(-110)
+ await drive_base.turn(90)
+ await drive_base.straight(500)
+ while True:
+ distance_mm = await lazer_ranger.distance()
+ print('distancing...',distance_mm)
+
+ if distance_mm < 300:
+ drive_base.stop
+ break
+ else:
+ drive_base.straight(300)
+ print('running...')
+ await wait(10)
+
+run_task(main())
\ No newline at end of file
diff --git a/missions/Set2.py b/missions/Set2.py
new file mode 100644
index 0000000..9298da3
--- /dev/null
+++ b/missions/Set2.py
@@ -0,0 +1,50 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch, run_task, multitask
+
+hub = PrimeHub()
+
+# Initialize both motors. In this example, the motor on the
+# left must turn counterclockwise to make the robot go forward.
+left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
+right_motor = Motor(Port.B)
+
+arm_motor = Motor(Port.D, Direction.CLOCKWISE)
+arm_motor_left= Motor(Port.C, Direction.CLOCKWISE)
+# Initialize the drive base. In this example, the wheel diameter is 56mm.
+# The distance between the two wheel-ground contact points is 112mm.
+drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180)
+
+print('The default settings are: ' + str(drive_base.settings()))
+drive_base.settings(300,1000,300,750)
+# Optionally, uncomment the line below to use the gyro for improved accuracy.
+drive_base.use_gyro(True)
+
+async def main():
+ await drive_base.straight(519)
+ await arm_motor_left.run_angle(-10000, 300)
+ await arm_motor_left.run_angle(10000, 600)
+ await drive_base.straight(160)
+ await drive_base.turn(-30)
+ await drive_base.straight(50)
+ await arm_motor.run_angle(3000, 3000)
+ await drive_base.straight(-150)
+ await drive_base.turn(135)
+ await drive_base.straight(50)
+ await arm_motor.run_angle(10000, -3000)
+ await drive_base.straight(-100)
+ await drive_base.turn(-54)
+ await arm_motor.run_angle(10000, -3000)
+ await drive_base.straight(250)
+ await drive_base.turn(-5)
+ await arm_motor.run_angle(10000, 7000)
+ await drive_base.straight(-50)
+ await drive_base.turn(68)
+ await arm_motor.run_angle(10000, -6000)
+ await drive_base.straight(200)
+ await arm_motor.run_angle(10000, 4000)
+ await drive_base.turn(-40)
+ await arm_motor.run_angle(10000, 7000)
+run_task(main())
\ No newline at end of file
diff --git a/missions/tip the scale.py b/missions/tip the scale.py
new file mode 100644
index 0000000..3a4264e
--- /dev/null
+++ b/missions/tip the scale.py
@@ -0,0 +1,48 @@
+from pybricks.hubs import PrimeHub
+from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
+from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
+from pybricks.robotics import DriveBase
+from pybricks.tools import wait, StopWatch
+from pybricks.tools import run_task, multitask
+
+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(600,500,300,200)
+
+drive_base.use_gyro(True)
+
+async def main():
+ left_arm.run_angle(600,200)
+ right_arm.run_angle(500,200)
+ await drive_base.straight(70)
+
+ await drive_base.turn(-70)
+ await drive_base.straight(900)
+ await drive_base.turn(115)
+
+ await drive_base.straight(75)
+ await drive_base.straight(33)
+ await right_arm.run_angle(500,-250)
+ await right_arm.run_angle(500,250)
+ await drive_base.turn(66)
+ await drive_base.straight(7)
+
+ await left_arm.run_angle(560,-390) #going down
+ print('turning now...')
+ await drive_base.turn(40) # turning right
+ await left_arm.run_angle(-410,-400) #lift a little bit
+
+ await drive_base.turn(-46.5) #ma din din din dun
+ await drive_base.turn(-40)
+ await drive_base.straight(900)
+run_task(main())
+
+
diff --git a/test_10_17_2025.py b/test_10_17_2025.py
new file mode 100644
index 0000000..1d89281
--- /dev/null
+++ b/test_10_17_2025.py
@@ -0,0 +1,303 @@
+# Stuff from 10/15/2025
+# Atharv trying with no avail to add more colors to the color sensor logic 😭😭😭😭😭😭😭
+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)
+Color.ORANGE = Color(28, 61, 61)
+Color.BLUE = Color(230,100,100)
+Color.YELLOW = Color(37, 85, 95)
+Color.PURPLE = Color(326, 60, 87)
+color_sensor.detectable_colors([Color.ORANGE, Color.BLUE, Color.GREEN, Color.WHITE, Color.RED, Color.YELLOW, Color.NONE, Color.PURPLE])
+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()
+
+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(277)
+ await drive_base.turn(20)
+ 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(-145)
+ 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(-700)
+
+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(-750)
+
+
+async def Run3():
+ await drive_base.straight(920)
+ 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 drive_base.straight(2000)
+
+async def Run4():
+ await drive_base.straight(519)
+ await drive_base.straight(519)
+ await arm_motor_left.run_angle(-10000, 300)
+ await arm_motor_left.run_angle(10000, 600)
+ await drive_base.straight(160)
+ await drive_base.turn(-30)
+ await drive_base.straight(50)
+ await arm_motor.run_angle(3000, 3000)
+ await drive_base.straight(-150)
+ await drive_base.turn(135)
+ await drive_base.straight(50)
+ await arm_motor.run_angle(10000, -3000)
+ await drive_base.straight(-100)
+ await drive_base.turn(-54)
+ await arm_motor.run_angle(10000, -3000)
+ await drive_base.straight(250)
+ await drive_base.turn(-5)
+ await arm_motor.run_angle(10000, 7000)
+ await drive_base.straight(-50)
+ await drive_base.turn(68)
+ await arm_motor.run_angle(10000, -6000)
+ await drive_base.straight(200)
+ await arm_motor.run_angle(10000, 4000)
+ await drive_base.turn(-40)
+ await arm_motor.run_angle(10000, 7000)
+
+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():
+ 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.turn(55)
+
+ await left_arm.run_angle(300,-400)
+
+ await drive_base.turn(46.5)
+ await drive_base.turn(-40)
+ await drive_base.straight(900)
+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.h}, {color_detected.s}, {color_detected.v}')
+ if color_reflected_percent > 1:
+ 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 4')
+ await Run4()
+ #await celebrate_mission_complete(CelebrationSound.POWER_UP)
+ elif color_detected == Color.ORANGE:
+ print('Running Mission 5')
+ await Run5()
+ #await celebrate_mission_complete(CelebrationSound.LEVEL_UP)
+ elif color_detected == Color.PURPLE:
+ print('Running Mission 6 (this is ayaan\'s code)')
+ await Run6()
+ #await celebrate_mission_complete(CelebrationSound.LEVEL_UP)
+ else:
+ hub.light.off()
+ left_motor.stop()
+ right_motor.stop()
+ await wait(1000) #prevent loop from iterating fast
+# Main execution loop
+run_task(main())
diff --git a/twist_scrimmage.py b/twist_scrimmage.py
new file mode 100644
index 0000000..8f68b24
--- /dev/null
+++ b/twist_scrimmage.py
@@ -0,0 +1,281 @@
+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)
+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()
+# 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()
+
+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(277)
+ await drive_base.turn(20)
+ 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(-145)
+ 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(-700)
+
+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(-750)
+
+
+async def Run3():
+ await drive_base.straight(920)
+ 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 drive_base.straight(2000)
+
+async def Run4():
+ await drive_base.straight(519)
+ 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, -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, -200)
+ await drive_base.turn(-40)
+ 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(-67)
+ await drive_base.straight(-800)
+
+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:
+
+ #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.h}, {color_detected.s}, {color_detected.v}')
+ if color_reflected_percent > 1:
+ 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 4')
+ await Run4()
+ #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)
+ else:
+ hub.light.off()
+ left_motor.stop()
+ right_motor.stop()
+ await wait(1000) #prevent loop from iterating fast
+# Main execution loop
+run_task(main())
diff --git a/utils/combine_runs.py b/utils/combine_runs.py
index 0d3fab1..c377d13 100644
--- a/utils/combine_runs.py
+++ b/utils/combine_runs.py
@@ -1,5 +1,5 @@
# Guys please use the same setup code and put into the imports for consistency
-script_names = ["untitled14.py", "untitled13.py"] # This is a list of the files of the mission runs
+script_names = ["Run1.py", "Run2.py", "Run3.py", "Run5.py", "Run6.py"] # This is a list of the files of the mission runs
content = ""
imports = """
from pybricks.hubs import PrimeHub
@@ -72,7 +72,7 @@ function_calls = []
# Define colors properly - one per script
colors = [
- 'Color.ORANGE', 'Color.GREEN', 'Color.BLACK', 'Color.WHITE',
+ 'Color.ORANGE', 'Color.GREEN', 'Color.WHITE',
'Color.YELLOW', 'Color.BLUE', 'Color.MAGENTA', 'Color.RED', 'Color.BROWN'
]
@@ -96,7 +96,7 @@ for i, f_name in enumerate(script_names):
m.write(func_def)
# Assign one color per script
- color_condition = colors[i % len(colors)]
+ color_condition = colors[i]
function_calls.append({
'name': func_name,
'is_async': is_async,
@@ -120,10 +120,10 @@ with open("main.py", 'a') as m:
m.write(f" await {func_info['name']}()\n")
else:
m.write(f" {func_info['name']}()\n")
- m.write(" return # Exit after running one function\n")
+ m.write(" \n")
# Add a default case
- m.write(" # Default case - no matching color detected\n")
+ m.write(" \n")
m.write(" print(f'Detected color: {color_sensor.color()}')\n")
# Write the main loop
@@ -131,9 +131,4 @@ with open("main.py", 'a') as m:
m.write("\n# Main execution loop\n")
m.write("while True:\n")
m.write(" run_task(main())\n")
- m.write(" wait(100)\n")
-
-print("Script merger completed successfully!")
-print("Functions created:")
-for func_info in function_calls:
- print(f" - {func_info['name']}() triggered by {func_info['color']} (from {func_info['filename']})")
\ No newline at end of file
+ m.write(" wait(100)\n")
\ No newline at end of file