92 Commits

Author SHA1 Message Date
b4385dcecd Merge pull request 'dev' (#32) from dev into atharv-dev
Reviewed-on: #32
2025-10-31 11:56:39 +00:00
e785a8ad05 Delete HEAVY_LIFTING_UPD
we dont need it it is alr in missions/
2025-10-30 15:42:53 +00:00
a6bbba9419 Update README.md 2025-10-30 15:42:31 +00:00
8ccf8b9a5a Update README.md 2025-10-30 12:21:46 +00:00
bb95852bf1 Update README.md 2025-10-28 18:22:25 +00:00
9ca160a8c7 Update README.md 2025-10-28 18:11:19 +00:00
882ba3e13a Delete Screenshot 2025-10-28 1.06.30 PM.png 2025-10-28 18:07:08 +00:00
33b926cb1f Upload files to "/" 2025-10-28 18:06:44 +00:00
4ff5de480d Update README.md 2025-10-28 18:06:09 +00:00
aa062122de Merge pull request 'main' (#29) from main into dev
Reviewed-on: #29
2025-10-28 12:23:07 +00:00
0fbb38baeb Merge pull request 'dev' (#28) from dev into main
Reviewed-on: #28
2025-10-27 12:23:13 +00:00
3e1928fcad Merge pull request 'Update missions/tip the scale.py' (#27) from ayaan_dev into dev
Reviewed-on: #27
2025-10-27 12:22:25 +00:00
ef0ff44f2b HazmatCodeChanges
This is the code we changed at the scrimmage.
2025-10-25 02:06:49 +00:00
7b539b45d0 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
CVC
2025-10-25 02:05:16 +00:00
9a320589ab Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
67
2025-10-25 01:38:57 +00:00
4d1bd8abe3 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-25 01:26:41 +00:00
1317c8e8ce Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
Minor Changes
2025-10-25 01:15:49 +00:00
54e8c9eba5 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 01:16:19 +00:00
9d3d8b48e4 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 01:15:43 +00:00
702e05e7f7 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 01:13:45 +00:00
5427c73f1c Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
I am not a monkey
2025-10-24 01:09:49 +00:00
b41f833c5e Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 01:07:23 +00:00
3765db3001 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
MINOR CHANGES AGAIN
2025-10-24 01:01:04 +00:00
94bae3c140 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 00:52:40 +00:00
dbb0749ff3 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
Minor Changes AGAIN!!
2025-10-24 00:49:24 +00:00
831b75025d Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
Minor changes.
2025-10-24 00:45:10 +00:00
249071f5c3 Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 00:42:21 +00:00
32a695e9ca Update codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-24 00:38:26 +00:00
2d2863726b Update codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-24 00:35:06 +00:00
1dec912abb Update missions/tip the scale.py 2025-10-24 00:11:38 +00:00
12f3d97a9e Merge pull request 'Update missions/tip the scale.py' (#25) from ayaan_dev into dev
Reviewed-on: #25
2025-10-23 15:49:51 +00:00
99aa81a68c Merge pull request 'arcmyx-dev' (#26) from arcmyx-dev into dev
Reviewed-on: #26
2025-10-23 15:49:44 +00:00
acfe0e622e Update codes_for_scrimmage/hazmat/mainhazmatUPD.py
This is the new version of Hazmat Code with the colors. Check to see if your color is different. Only Run2 is different, it was white, now violet.
2025-10-23 02:30:26 +00:00
4ad60502b9 Add codes_for_scrimmage/hazmat/mainhazmatUPD.py 2025-10-23 02:14:42 +00:00
9e0c82b26b Update missions/tip the scale.py 2025-10-23 00:52:26 +00:00
819b222610 Update codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:38:23 +00:00
a16d5deb92 Update codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:35:38 +00:00
30bc22a457 Delete codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:34:40 +00:00
1cb08a0c32 Update codes_for_scrimmage/hazmat/hazmat_main.py
Adding Rishi/Vickram + Adi Mission's
2025-10-23 00:34:14 +00:00
11acca0744 Add codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:33:01 +00:00
68aff887da Update codes_for_scrimmage/hazmat/hazmat_main.py 2025-10-23 00:29:22 +00:00
1f2a467b9b Update codes_for_scrimmage/hazmat/Heavy_lifting_final.py 2025-10-23 00:28:52 +00:00
b3b0590bb9 Merge pull request 'Organize mission codes for scrimmage. Fixed some coolor detection issues' (#22) from add-folder-structure-for-scrimmage into dev
Reviewed-on: #22
2025-10-22 18:55:29 +00:00
d8f1d47882 Organize mission codes for scrimmage. Fixed some coolor detection issues 2025-10-22 12:37:05 -05:00
e0061dc672 Merge pull request 'dev' (#21) from Johannes/Johannes-dev:dev into dev
Reviewed-on: #21
2025-10-22 00:15:37 +00:00
4496396d0b Update missions/M8_5.py 2025-10-22 00:15:11 +00:00
3ec1aafbeb Update missions/M8_5.py 2025-10-22 00:07:04 +00:00
6c9efe26f9 Update missions/Heavy_lifting_final.py 2025-10-22 00:05:00 +00:00
cf1f8a1995 Update missions/Send_Over_Final.py 2025-10-22 00:04:16 +00:00
2567e8b8d7 Add missions/Send_Over_Final.py 2025-10-21 23:57:13 +00:00
cb79ecbb95 Add missions/Heavy_lifting_final.py 2025-10-21 23:54:55 +00:00
59213ae3f6 Update final/main5.py
Just adjusted my code!!
2025-10-21 00:24:33 +00:00
97963488eb Update test_10_17_2025.py
Rishi, A.K.A me replaced my outdated code with the new one.
2025-10-21 00:21:53 +00:00
b263687c3b dis id vewwy impotent codes
AAAGGGHHHHHHHHHHHHH COLOR SENSORS CAUSE ME PAIN!!!!!!!!!!!
2025-10-20 16:13:13 +00:00
e32c773d58 Merge pull request 'Changed Johannes values' (#20) from johannes-fork-merge into dev
Reviewed-on: #20
2025-10-20 15:49:05 +00:00
50dd00cba6 Changed Johannes values
Old code was:
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(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)
    
run_task(main())
2025-10-20 15:48:22 +00:00
f3f99f4e94 Merge pull request 'johannes-fork-merge' (#19) from johannes-fork-merge into dev
Reviewed-on: #19
2025-10-20 15:44:54 +00:00
ce4435e7eb Changed line 23 from 420 to 500
johannes did it idk
2025-10-20 15:44:31 +00:00
b8476d4bfc Upload files to "missions" 2025-10-20 15:43:35 +00:00
8bd76e5692 afniawemhcfj8ewa hjciuawefn awenfuiearhi nofuahweof e2q 2025-10-20 15:39:58 +00:00
9c2b3a2ad9 Upload files to "/" 2025-10-20 15:35:14 +00:00
639588e253 Merge pull request 'Add missions/Heavy lifting.py' (#17) from Johannes_Dev into dev
Reviewed-on: #17
2025-10-20 15:34:41 +00:00
48f504cbda Merge pull request 'arcmyx-dev' (#18) from arcmyx-dev into dev
Reviewed-on: #18
2025-10-20 15:34:27 +00:00
51d7255cd0 Add HEAVY_LIFTING_UPD 2025-10-20 00:48:18 +00:00
53d13476a9 Add missions/Heavy lifting.py 2025-10-19 03:02:40 +00:00
c6783889b7 Add missions/Set2.py
Please add the backward part of the code.
2025-10-19 01:51:03 +00:00
9eada9f151 Update RoshoDaGoat.py 2025-10-18 14:53:08 +00:00
79baeca507 Update RoshoDaGoat 2025-10-18 14:52:58 +00:00
8667a66ab1 Add sechs-sieben.py 2025-10-18 14:51:46 +00:00
alkadienePhoton
bcc47c1d1b Merge branch 'dev' of https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed into dev 2025-10-17 19:36:33 -05:00
alkadienePhoton
e9e40896f2 Merging 2025-10-17 17:25:12 -05:00
bbbfe0078c Add test_10_17_2025.py
um so i was testing the colors and IMMA GO insane so lemme check my lego bin for something that will work.
2025-10-17 21:58:44 +00:00
f69c61e796 Add missions/Sand_mission.py 2025-10-17 20:52:24 +00:00
8061eb71d5 Add missions/Boat_mission.py 2025-10-17 20:51:55 +00:00
5e1f3098f9 Changes after scrimmage run 3 2025-10-11 19:08:38 +00:00
19afacd87b Scrimmage update after run 2
well at least yellow works now.
2025-10-11 18:47:09 +00:00
9b04c18889 Update for contest 2025-10-11 18:22:21 +00:00
1a3abbb4d1 Update twist_scrimmage.py 2025-10-11 18:03:55 +00:00
ae114667f1 Update members/Rishi.txt 2025-10-11 15:27:44 +00:00
8391619c71 Add members/Rishi.txt 2025-10-11 15:24:59 +00:00
7e2dc0b7c9 Update final/main5.py 2025-10-10 21:44:03 +00:00
29bd9f0e23 Update final/main5.py 2025-10-10 21:27:24 +00:00
a3b04d3e00 Add final/main5.py 2025-10-10 21:25:32 +00:00
2d9eb496a3 Update final/main4.py 2025-10-10 21:03:57 +00:00
42090eae56 Update final/main4.py 2025-10-10 21:02:03 +00:00
f7072a6207 Update final/main4.py 2025-10-10 20:56:17 +00:00
95c3491b44 Update missions/M8_5.py 2025-10-04 00:53:13 +00:00
47c89cba0a Add missions/Lift2.py 2025-10-03 21:26:35 +00:00
b8620e37aa Update missions/Lift.py 2025-09-26 21:46:12 +00:00
3527ee5600 Add missions/Lift
Parthicc made this originally.
2025-09-26 21:45:42 +00:00
a20bf2255b Update missions/Send_Over.py 2025-09-20 22:52:04 +00:00
9cff4d8626 Update missions/Send_Over.py 2025-09-19 22:00:28 +00:00
25 changed files with 2159 additions and 275 deletions

View File

@@ -14,7 +14,7 @@
## Project Overview ## Project Overview
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. 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.
--- ---
@@ -26,8 +26,8 @@ Welcome to the official code repository for **Team 65266 Lego Dynamics**! This r
|-----------|--------------| |-----------|--------------|
| **Robot Name** | Optimus Prime III | | **Robot Name** | Optimus Prime III |
| **Firmware** | Pybricks | | **Firmware** | Pybricks |
| **Attachment Motors** | 2× Large Motors (Ports C & D) | | **Attachment Motors** | 2x Large Motors (Ports C & D) |
| **Drive Motors** | 2× Small Motors (Ports A & B) | | **Drive Motors** | 2x Small Motors (Ports A & B) |
| **Sensors** | Up-facing Color Sensor (Quick Start) | | **Sensors** | Up-facing Color Sensor (Quick Start) |
| **Attachments** | Multiple mission-specific tools | | **Attachments** | Multiple mission-specific tools |
@@ -46,10 +46,10 @@ Our codebase is organized for maximum efficiency and modularity:
``` ```
Repository Repository
┣ run_1.py # Individual mission runs ┣ run_1.py # Individual mission runs
┣ run_2.py # Each file = 1+ mission completions ┣ run_2.py
┣ run_3.py ┣ run_3.py
┣ ... ┣ ...
┗ master.py # 🎯 Combined master file with color-start logic ┗ 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 ### Workflow
@@ -61,34 +61,45 @@ Repository
## How to Use ## How to Use
### Installation & Deployment ### Installation & Deployment - from the server - everyday
1. **Load the Code** 1. Download the file codes_for_scrimmage/hazmat/mainhazmatUPD.py
```bash - You can do this through the repo, by using cURL, or by using git.
# Open the master.py file in Pybricks IDE - 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 -
2. **Connect to Robot** ```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```
- Pair your robot via Bluetooth in Pybricks - 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:
![alt text](https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/do-not-merge/import.png)
- Bluetooth button looks like this:
![alt text](https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/do-not-merge/bluetooth.png)
3. **Upload to Robot** - Click "Download and Run" or send the program to the robot
- Run button looks like this: ![alt text](https://codes.fll-65266.org/FLL_65266_LEGO_DYNAMICS/solutions_season_unearthed/raw/branch/do-not-merge/run.png)
3. **Upload to Robot**
- Click "Download and Run" or send the program to the robot
4. **Start Your Run** 4. **Start Your Run**
- Hold a colored LEGO brick up to the color sensor - If starting without Pybricks, press the center circular button on the SPIKE Prime Hub to start the program.
- Different colors trigger different mission runs! - Hold a colored LEGO brick up to the color sensor.
- Different colors trigger different mission runs - color mapping is below.
### Color Start System ### Color Start System
| Color | Mission | Celebration Sound | | Color | Mission |
|-------|-----------|------------------| |-------|-----------|
| Green 🟩 | Run 1 | Victory Fanfare | | Green 🟩 | Run 1 |
| White ⚪ | Run 2 | Rickroll Inspired | | Purple 🟪 | Run 2 |
| Yellow 🟨 | Run 3 | Success Chime | | Red 🟥| Run 3 |
| Orange 🟧 | Run 4 | Power Up | | Yellow 🟨| Run 4 |
| Blue 🟦 | Run 5 | Power Up | | Blue 🟦| Run 5 |
| Red 🟥 | Run 6 | Ta-Da! | | Orange 🟧| Run 6 |
> **Tip** Organize your colored bricks before the match for quick run selection!
--- ---
@@ -114,9 +125,7 @@ Team members can contribute by:
**GNU General Public License v3.0** **GNU General Public License v3.0**
```
You can take inspiration from our code, but you can't take our exact code. 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. This project is licensed under GPL-3.0 - see the [LICENSE](LICENSE) file for complete details.
@@ -130,14 +139,8 @@ This project is licensed under GPL-3.0 - see the [LICENSE](LICENSE) file for com
## Contact & Support ## Contact & Support
**Team 65266 Lego Dynamics** **Team 65266 - Lego Dynamics**
Questions about our approach? Interested in collaboration? Reach out! Questions about our approach? Interested in collaboration? Reach out!
--- ---
<div align="center">
Star this repo if you found it helpful!
</div>

42
RoshoDaGoat.py Normal file
View File

@@ -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())

View File

@@ -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())

View File

@@ -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())

View File

@@ -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())

View File

@@ -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())

View File

@@ -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())

View File

@@ -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())

View File

@@ -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())

View File

@@ -86,11 +86,19 @@ async def Run2():
await drive_base.straight(-600) await drive_base.straight(-600)
async def Run3(): async def Run3():
await drive_base.straight(920) await drive_base.straight(920)
<<<<<<< HEAD:final/4main.py
await drive_base.turn(-90) await drive_base.turn(-90)
await drive_base.straight(60) await drive_base.straight(60)
drive_base.turn(-10) drive_base.turn(-10)
await left_arm.run_angle(10000,-4000) await left_arm.run_angle(10000,-4000)
await drive_base.straight(-110) 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.turn(90)
await drive_base.straight(2000) await drive_base.straight(2000)
async def Run5(): async def Run5():

280
final/main5.py Normal file
View File

@@ -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())

2
members/Rishi.txt Normal file
View File

@@ -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.

27
missions/Boat_mission.py Normal file
View File

@@ -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())

View File

@@ -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())

37
missions/Heavy lifting.py Normal file
View File

@@ -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)

View File

@@ -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())

34
missions/Lift2.py Normal file
View File

@@ -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())

View File

@@ -20,10 +20,10 @@ drive_base.use_gyro(True)
async def main(): async def main():
await drive_base.straight(420) await drive_base.straight(500)
await right_arm.run_angle(300,-100) await right_arm.run_angle(300,100)
await drive_base.straight(-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) await drive_base.straight(-350)
run_task(main()) run_task(main())

29
missions/Sand_mission.py Normal file
View File

@@ -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())

View File

@@ -23,9 +23,9 @@ async def main():
await drive_base.straight(915) await drive_base.straight(915)
await drive_base.turn(-90) await drive_base.turn(-90)
await drive_base.straight(60) await drive_base.straight(60)
await left_arm.run_angle(10000,-15000) await left_arm.run_angle(10000,-4000)
await drive_base.straight(-60) await drive_base.straight(-90)
await drive_base.turn(85) await drive_base.turn(80)
await drive_base.straight(2000) await drive_base.straight(2000)
run_task(main()) run_task(main())

View File

@@ -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())

50
missions/Set2.py Normal file
View File

@@ -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())

View File

@@ -15,28 +15,34 @@ left_arm = Motor(Port.C, Direction.COUNTERCLOCKWISE)
right_arm = Motor(Port.D) right_arm = Motor(Port.D)
drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180) drive_base = DriveBase(left_motor, right_motor, wheel_diameter=68.8, axle_track=180)
drive_base.settings(300,1000,300,200) drive_base.settings(600,500,300,200)
#drive_base.use_gyro(True) drive_base.use_gyro(True)
async def main(): async def main():
left_arm.run_angle(500,200) left_arm.run_angle(600,200)
right_arm.run_angle(500,200) right_arm.run_angle(500,200)
await drive_base.straight(70) await drive_base.straight(70)
await drive_base.turn(-55) await drive_base.turn(-70)
await drive_base.straight(900) await drive_base.straight(900)
await drive_base.turn(92.5) await drive_base.turn(115)
await drive_base.straight(75) await drive_base.straight(75)
await drive_base.straight(21) await drive_base.straight(33)
await right_arm.run_angle(500,-250) await right_arm.run_angle(500,-250)
await right_arm.run_angle(500,250) await right_arm.run_angle(500,250)
await drive_base.turn(55) await drive_base.turn(66)
await drive_base.straight(7)
await left_arm.run_angle(300,-400) 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) await drive_base.turn(-46.5) #ma din din din dun
await drive_base.turn(-40) await drive_base.turn(-40)
await drive_base.straight(900) await drive_base.straight(900)
run_task(main()) run_task(main())

303
test_10_17_2025.py Normal file
View File

@@ -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())

View File

@@ -1,11 +1,9 @@
# Imports... because we kinda need them...
from pybricks.hubs import PrimeHub from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor from pybricks.pupdevices import Motor, ColorSensor
from pybricks.parameters import Port, Stop, Color, Direction from pybricks.parameters import Port, Stop, Color, Direction
from pybricks.robotics import DriveBase from pybricks.robotics import DriveBase
from pybricks.tools import wait, StopWatch, multitask, run_task from pybricks.tools import wait, StopWatch, multitask, run_task
# Sets all the default values for the runs
hub = PrimeHub() hub = PrimeHub()
left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE) left_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
right_motor = Motor(Port.B) right_motor = Motor(Port.B)
@@ -17,248 +15,105 @@ drive_base.use_gyro(True)
color_sensor = ColorSensor(Port.F) color_sensor = ColorSensor(Port.F)
Color.ORANGE = Color(37, 85, 95) Color.ORANGE = Color(37, 85, 95)
Color.BLUE = Color(230,100,100) Color.BLUE = Color(230,100,100)
Color.YELLOW = Color(53, 75, 84) Color.YELLOW = Color(37, 85, 95)
color_sensor.detectable_colors([Color.YELLOW, Color.BLUE, Color.GREEN, Color.WHITE, Color.RED, Color.ORANGE, Color.NONE]) color_sensor.detectable_colors([Color.ORANGE, Color.BLUE, Color.GREEN, Color.WHITE, Color.RED, Color.YELLOW])
hub.speaker.volume(50) # Set the volume of the speaker hub.speaker.volume(50) # Set the volume of the speaker
color_sensor.detectable_colors() color_sensor.detectable_colors()
# Notes to hertz for nice music
cn = {
"Cs3": 138.59,
"D3": 146.83,
"Ds3": 155.56,
"E3": 164.81,
"F3": 174.61,
"Fs3": 185.00,
"G3": 196.00,
"Gs3": 207.65,
"A3": 220.00,
"As3": 233.08,
"B3": 246.94,
"C4": 261.63,
"Cs4": 277.18,
"D4": 293.66,
"Ds4": 311.13,
"E4": 329.63,
"F4": 349.23,
"Fs4": 369.99,
"G4": 392.00,
"Gs4": 415.30,
"A4": 440.00,
"As4": 466.16,
"B4": 493.88,
"C5": 523.25,
"Cs5": 554.37
}
# RUNS - contains the mission code that will be executed on color sensor detection
async def Run1():
left_arm.run_angle(1000, 300)
right_arm.run_angle(1000,500)
await 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)
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, -100)
await left_arm.run_angle(300, 500)
await drive_base.straight(180)
await drive_base.turn(-37)
await drive_base.straight(50)
await right_arm.run_angle(300, -400)
await drive_base.straight(-150)
await drive_base.turn(125)
await drive_base.straight(50)
await right_arm.run_angle(300, 400)
await drive_base.straight(-75)
await right_arm.run_angle(300, 300)
await drive_base.turn(-40)
await drive_base.straight(250)
await right_arm.run_angle(100, -300)
await drive_base.straight(30)
await right_arm.run_angle(50,-250)
await drive_base.turn(30)
await drive_base.straight(-200)
await drive_base.turn(-50)
await drive_base.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():
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 # Celebration sound types
class CelebrationSound: class CelebrationSound:
VICTORY_FANFARE = 0 VICTORY_FANFARE = 0
WAITING_SOUND = 1 LEVEL_UP = 1
SUCCESS_CHIME = 2 SUCCESS_CHIME = 2
TA_DA = 3 TA_DA = 3
POWER_UP = 4 POWER_UP = 4
RICKROLL_INSPIRED = 5 RICKROLL_INSPIRED = 5
# Sounds functions
async def play_victory_fanfare(): async def play_victory_fanfare():
"""Classic victory fanfare""" """Classic victory fanfare"""
notes = [ notes = [
(cn["B3"], 200), (262, 200), # C4
(cn["B3"], 100), (262, 200), # C4
(cn["B3"], 100), (262, 200), # C4
(cn["E4"], 600) (349, 600), # F4
] ]
for freq, duration in notes: for freq, duration in notes:
await hub.speaker.beep(freq, duration) await hub.speaker.beep(freq, duration)
await wait(50) await wait(50)
async def play_waiting_sound(): async def play_level_up():
"""Upward scale for level completion"""
# T3rm1na1 V3l0c1ty arpeggio recreated in pybricks notesold = [
notes = [ (262, 100), # C4
(cn["Cs4"], 100), (294, 100), # D4
(cn["E4"], 100), (330, 100), # E4
(cn["Cs4"], 100), (349, 100), # F4
(cn["Cs5"], 100), (392, 100), # G4
(cn["Cs4"], 100), (440, 100), # A4
(cn["Gs4"], 100), (494, 100), # B4
(cn["E4"], 100), (523, 300), # C5
(cn["Cs4"], 100), ]
(cn["Gs4"], 100), notes = [
(cn["Cs4"], 100), (277, 100),
(cn["Cs5"], 100), (330, 100),
(cn["Gs4"], 100), (277, 100),
(cn["Cs4"], 100), (554, 100),
(cn["Gs4"], 100), (277, 100),
(cn["Cs5"], 100), (413, 100),
(cn["Gs4"], 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: for freq, duration in notes:
await hub.speaker.beep(freq, duration) await hub.speaker.beep(freq, duration)
#await wait(20)
async def play_success_chime(): async def play_success_chime():
"""Simple success notification""" """Simple success notification"""
notes = [ notes = [
(cn["E4"], 150), (523, 150), # C5
(cn["Gs4"], 150), (659, 150), # E5
(cn["B4"], 300), (784, 300), # G5
] ]
for freq, duration in notes: for freq, duration in notes:
await hub.speaker.beep(freq, duration) await hub.speaker.beep(freq, duration)
await wait(50) await wait(50)
async def play_ta_da(): async def play_ta_da():
"""Classic "ta-da!" sound""" """Classic "ta-da!" sound"""
notes = [ notes = [
(cn["Cs4"], 200), (392, 200), # G4
(cn["Ds4"], 200), (523, 400), # C5
(cn["E4"], 200),
(cn["Ds4"], 200),
(cn["E4"], 200),
(cn["Fs4"], 400),
(cn["Gs4"], 600),
(cn["Fs4"], 400),
(cn["Gs4"], 200),
(cn["A4"], 200),
(cn["B4"], 200),
(cn["C5"], 200),
(cn["Cs5"], 200)
] ]
for freq, duration in notes: for freq, duration in notes:
await hub.speaker.beep(freq, duration) await hub.speaker.beep(freq, duration)
#await wait(100) await wait(100)
async def play_power_up(): async def play_power_up():
"""Rising power-up sound""" """Rising power-up sound"""
frequencies = [ for freq in range(200, 800, 50):
164.81, 207.65, 246.94, 329.63, 415.30, 493.88
]
for freq in frequencies:
await hub.speaker.beep(freq, 50) await hub.speaker.beep(freq, 50)
await wait(10) await wait(10)
await hub.speaker.beep(1000, 200)
await hub.speaker.beep(659.24, 200)
async def play_rickroll_inspired(): async def play_rickroll_inspired():
"""Fun 80s-style dance beat inspired sound""" """Fun 80s-style dance beat inspired sound"""
# Upbeat bouncy rhythm # Upbeat bouncy rhythm
pattern = [ (cn["B3"], 100), (cn["Cs4"], 100), (cn["Ds4"], 100), (cn["E4"], 100), (cn["Cs4"], 100), (cn["B3"], 100), (cn["A3"], 100), (cn["B3"], 200), (cn["Cs4"], 100), (cn["B3"], 100), (cn["A3"], 100), (cn["Gs3"], 200), ] 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: for freq, duration in pattern:
await hub.speaker.beep(freq, duration) await hub.speaker.beep(freq, duration)
#await wait(50) await wait(50)
async def celebrate_mission_complete(sound_type=CelebrationSound.SUCCESS_CHIME):
# Basically a big if else statement that calls the functions above
async def celebrate_mission_complete(sound_type=CelebrationSound.RICKROLL_INSPIRED):
""" """
Main celebration function to call after completing a mission. Main celebration function to call after completing a mission.
Plays a sound and shows light animation. Plays a sound and shows light animation.
@@ -272,8 +127,8 @@ async def celebrate_mission_complete(sound_type=CelebrationSound.RICKROLL_INSPIR
# Play the selected celebration sound # Play the selected celebration sound
if sound_type == CelebrationSound.VICTORY_FANFARE: if sound_type == CelebrationSound.VICTORY_FANFARE:
await play_victory_fanfare() await play_victory_fanfare()
elif sound_type == CelebrationSound.WAITING_SOUND: elif sound_type == CelebrationSound.LEVEL_UP:
await play_waiting_sound() await play_level_up()
elif sound_type == CelebrationSound.SUCCESS_CHIME: elif sound_type == CelebrationSound.SUCCESS_CHIME:
await play_success_chime() await play_success_chime()
elif sound_type == CelebrationSound.TA_DA: elif sound_type == CelebrationSound.TA_DA:
@@ -294,48 +149,133 @@ async def celebrate_mission_complete(sound_type=CelebrationSound.RICKROLL_INSPIR
hub.light.off() hub.light.off()
# This where everything happens 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(): async def main():
# MAIN LOOP
while True: while True:
await celebrate_mission_complete(CelebrationSound.RICKROLL_INSPIRED)
#await celebrate_mission_complete(CelebrationSound.LEVEL_UP)
color_reflected_percent = await color_sensor.reflection() color_reflected_percent = await color_sensor.reflection()
print(f"Color reflection percentage: {color_reflected_percent}") print(color_reflected_percent)
color_detected = await color_sensor.color() color_detected = await color_sensor.color()
print(f'Detected color: {color_detected}') print(f'Detected color: {color_detected.h}, {color_detected.s}, {color_detected.v}')
hsv = await color_sensor.hsv() if color_reflected_percent > 1:
print(f"Measured HSV: {hsv}")
if color_reflected_percent > 0:
if color_detected == Color.GREEN: if color_detected == Color.GREEN:
print('Running Mission 1') print('Running Mission 1')
await Run1() await Run1()
await celebrate_mission_complete(CelebrationSound.VICTORY_FANFARE) #await celebrate_mission_complete(CelebrationSound.VICTORY_FANFARE)
elif color_detected == Color.WHITE: elif color_detected == Color.WHITE:
print('Running Mission 2') print('Running Mission 2')
await Run2() await Run2()
await celebrate_mission_complete(CelebrationSound.RICKROLL_INSPIRED) #await celebrate_mission_complete(CelebrationSound.RICKROLL_INSPIRED)
elif color_detected == Color.YELLOW: elif color_detected == Color.YELLOW:
print('Running Mission 3') print('Running Mission 3')
await Run3() await Run3()
await celebrate_mission_complete(CelebrationSound.SUCCESS_CHIME) #await celebrate_mission_complete(CelebrationSound.SUCCESS_CHIME )
elif color_detected == Color.ORANGE: elif color_detected == Color.BLUE:
print('Running Mission 4') print('Running Mission 4')
await Run4() await Run4()
await celebrate_mission_complete(CelebrationSound.POWER_UP) #await celebrate_mission_complete(CelebrationSound.POWER_UP)
elif color_detected == Color.BLUE: elif color_detected == Color.RED:
print('Running Mission 5') print('Running Mission 5')
await Run5() await Run5()
await celebrate_mission_complete(CelebrationSound.POWER_UP) #await celebrate_mission_complete(CelebrationSound.LEVEL_UP)
elif color_detected == Color.RED:
print('Running Mission 6')
await Run6()
await celebrate_mission_complete(CelebrationSound.TA_DA)
else: else:
hub.light.off() hub.light.off()
left_motor.stop() left_motor.stop()
right_motor.stop() right_motor.stop()
else: await wait(1000) #prevent loop from iterating fast
print("No color was detected.") # Main execution loop
await wait(100) # prevent loop from iterating fast
run_task(main()) run_task(main())