# Primary Rookie — Block Code
*Extracted from: Primary Rookie.llsp3*

## Main Script
```
▶ When program starts
⚙  Set drive motors [CD]
⚙  Set drive speed 50%
⏱  Wait 5s
📝 Set [ReflectedLightIntensity] = 58
📢 Broadcast [Cables]

🧭 Reset yaw
⏱  Wait 0.25s

```

## Custom Blocks (Procedures)
```
🔧 Define  Single Turn Gyro %s %s %s
⚙  Set drive motors [CD]
⚙  Drive stop method [brake]
❓ If (<L/R> = 0):
  🚗 Start dual speed  L=0%  R=<Speed>%
  ❓ If (<Speed> < 0):
    ⏳ Wait until (HubOrientation[yaw] > <Angle>)
     Else:
    ⏳ Wait until (HubOrientation[yaw] < <Angle>)
   Else:
  🚗 Start dual speed  L=<Speed>%  R=0%
  ❓ If (<Speed> < 0):
    ⏳ Wait until (HubOrientation[yaw] < <Angle>)
     Else:
    ⏳ Wait until (HubOrientation[yaw] > <Angle>)
🛑 Stop drive

🔧 Define  Turn %s Speed %s Degree
🛑 Stop motor [CD]
⚙  Motor [CD] set degrees-counted = 0
🔁 Repeat until (((abs(MotorPosition(C)) + abs(MotorPosition(D))) ÷ 2) > <Degrees>):
  📝 Set [Correction2] = ((MotorPosition(C) - MotorPosition(D)) × 1)
  ▶  Start motor [C] power <Power>%
  ▶  Start motor [D] power (<Power> + Correction2)%
🛑 Stop motor [CD]
⏱  Wait 0.15s

🔧 Define  Turn Gyro (0=L, 1=R) %s %s
⚙  Set drive motors [CD]
⚙  Drive stop method [hold]
❓ If (<LR> = 0):
  🚗 Start dual speed  L=(45 × -1)%  R=45%
  ⏳ Wait until (HubOrientation[yaw] < <GyroDegree>)
   Else:
  🚗 Start dual speed  L=45%  R=(45 × -1)%
  ⏳ Wait until (HubOrientation[yaw] > <GyroDegree>)
🛑 Stop drive
⚙  Drive stop method [brake]

🔧 Define  ScanBlackStop %s %s
⚙  Set drive motors [AC]
🚗 Start dual speed  L=<Left>%  R=<Right>%
⏳ Wait until (RawColour(E)[0] < 200)
🛑 Stop drive
🔊 Beep 96 for 0.2s

🔧 Define  GyroStraight… Speed,Angle,Degree, Mode, Stop %s %s %s %s %s Colour Stop %s
📝 Set [Error] = 0
📝 Set [Last_Error] = 0
📝 Set [Correction] = 0
📝 Set [Derivative] = 0
⚙  Motor [CD] set degrees-counted = 0
⚙  Motor [CD] stop method [brake]
❓ If (<Mode> = 1):
  🔁 Repeat until (((abs(MotorPosition(C)) + abs(MotorPosition(D))) ÷ 2) > <Degree>):
    📝 Set [Error] = (HubOrientation[yaw] - <Angle>)
    📝 Set [Derivative] = (Error - Last_Error)
    📝 Set [Correction] = ((3 × Error) + (10 × Derivative))
    📝 Set [Last_Error] = Error
    ▶  Start motor [C] power ((<Speed> - Correction) × -1)%
    ▶  Start motor [D] power (<Speed> + Correction)%
  🛑 Stop motor [CD]
  🔊 Beep 100 for 0.1s
   Else:
  ❓ If (<Mode> = 2):
    🔁 Repeat until (RawColour(E)[0] < 250):
      📝 Set [Error] = (HubOrientation[yaw] - <Angle>)
      📝 Set [Derivative] = (Error - Last_Error)
      📝 Set [Correction] = ((3 × Error) + (10 × Derivative))
      📝 Set [Last_Error] = Error
      ▶  Start motor [C] power ((<Speed> - Correction) × -1)%
      ▶  Start motor [D] power (<Speed> + Correction)%
    🛑 Stop motor [CD]
    🔊 Beep 100 for 0.1s
     Else:
    ❓ If (<Mode> = 3):
      🔁 Repeat until (RawColour(E)[0] > <ColourStop>):
        📝 Set [Error] = (HubOrientation[yaw] - <Angle>)
        📝 Set [Derivative] = (Error - Last_Error)
        📝 Set [Correction] = ((3 × Error) + (10 × Derivative))
        📝 Set [Last_Error] = Error
        ▶  Start motor [C] power ((<Speed> - Correction) × -1)%
        ▶  Start motor [D] power (<Speed> + Correction)%
       Else:
      🔁 Repeat until (Colour(E) = <ColourStop>):
        📝 Set [Error] = (HubOrientation[yaw] - <Angle>)
        📝 Set [Derivative] = (Error - Last_Error)
        📝 Set [Correction] = ((3 × Error) + (10 × Derivative))
        📝 Set [Last_Error] = Error
        ▶  Start motor [C] power ((<Speed> - Correction) × -1)%
        ▶  Start motor [D] power (<Speed> + Correction)%
❓ If (<Stop> = 1):
  🛑 Stop motor [CD]

🔧 Define  FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position %s %s %s %s %s %s %s
📝 Set [Error] = 0
📝 Set [Last_Error] = 0
📝 Set [Correction] = 0
📝 Set [Derivative] = 0
⚙  Motor [CD] set degrees-counted = 0
🔁 Repeat until (((abs(MotorPosition(C)) + abs(MotorPosition(D))) ÷ 2) > <Distance>):
  📝 Set [Error] = (ReflectedLightIntensity - Reflectivity(E))
  📝 Set [Derivative] = (Error - Last_Error)
  ❓ If (<Position> = 1):
    📝 Set [Correction] = ((<Kp> × Error) + (<Kd> × Derivative))
     Else:
    📝 Set [Correction] = (((<Kp> × Error) + (<Kd> × Derivative)) × -1)
  📝 Set [Last_Error] = Error
  ▶  Start motor [C] power ((<Speed> - Correction) × -1)%
  ▶  Start motor [D] power (<Speed> + Correction)%
❓ If (<StopAtLine> = 1):
  🔁 Repeat until (Reflectivity(<Port>) < 25):
    📝 Set [Error] = (ReflectedLightIntensity - Reflectivity(E))
    📝 Set [Derivative] = (Error - Last_Error)
    ❓ If (<Position> = 1):
      📝 Set [Correction] = ((<Kp> × Error) + (<Kd> × Derivative))
       Else:
      📝 Set [Correction] = (((<Kp> × Error) + (<Kd> × Derivative)) × -1)
    📝 Set [Last_Error] = Error
    ▶  Start motor [C] power ((<Speed> - Correction) × -1)%
    ▶  Start motor [D] power (<Speed> + Correction)%
🛑 Stop motor [CD]
🔊 Beep 100 for 0.1s

🔧 Define  Move Degree... L Motor %s R Motor %s Degree %s Mode %s
❓ If (<1//2> = 1):
  ⚙  Set drive motors [CD]
  ⚙  Motor [C] set degrees-counted = 0
  ⚙  Motor [D] set degrees-counted = 0
  🔁 Repeat until (((abs(MotorPosition(C)) + abs(MotorPosition(D))) ÷ 2) > <Degrees>):
    🚗 Start dual speed  L=<LMotor>%  R=<RMotor>%
  🛑 Stop drive
   Else:
  ⚙  Set drive motors [CD]
  ⚙  Motor [C] set degrees-counted = 0
  ⚙  Motor [D] set degrees-counted = 0
  🚗 Start dual speed  L=<LMotor>%  R=<RMotor>%
  ⏳ Wait until (RawColour(E)[0] > 250)
  🛑 Stop drive

```

## Event Handlers (Broadcasts)
```
📡 When I receive [Microphone]
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 75 0.4 3 250 1 E 1
📢 Broadcast [Open Arm Both]
⏱  Wait 0.5s
🧭 Reset yaw
⏱  Wait 0.25s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 50 0 200 1 1 Colour Stop 
🔧 Single Turn Gyro 0 75 -75
🔧 Move Degree... L Motor 50 R Motor 50 Degree 500 Mode 1
🔧 Move Degree... L Motor 25 R Motor 25 Degree 250 Mode 1
📢 Broadcast [Close Arm Both 2]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -85 1500 1 1 Colour Stop 
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -85  3 1 Colour Stop 250
🔧 Turn Gyro (0=L, 1=R) 0 -178
⚙  Set drive speed 35%
🚗 Move back  1 seconds
🧭 Reset yaw
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0 750 1 0 Colour Stop 
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 50 0 500 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -90
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 35 -90 50 1 1 Colour Stop 
📢 Broadcast [Open Arm Both]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -50 -90  3 1 Colour Stop 450
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -50 -90 25 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -178
📢 Broadcast [Instruments]

📡 When I receive [Notes 3]
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0 400 1 0 Colour Stop 
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0  4 0 Colour Stop 
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0 50 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -90
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 75 0.4 3 600 1 E 2
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 75 0.4 3 180 0 E 2
🔧 Turn Gyro (0=L, 1=R) 1 0
📢 Broadcast [Open Arm Both]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 35 0 250 1 0 Colour Stop 
📢 Broadcast [Close Arm Both 4]
⏱  Wait 0.75s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -50 0 215 1 0 Colour Stop 
🔧 Turn -50 Speed 250 Degree
🔧 Turn Gyro (0=L, 1=R) 1 90
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 50 87.5 850 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 0
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 0 375 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -90
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 75 1 1 Colour Stop 
📢 Broadcast [Open Arm Left]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -35 -90 200 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -135
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -35 -135 200 1 0 Colour Stop 
📢 Broadcast [Open Arm Right]
⏱  Wait 0.75s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -35 -135 300 1 0 Colour Stop 

📡 When I receive [Notes 1]
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 -90  3 0 Colour Stop 250
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 -90 50 1 1 Colour Stop 
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 325 1 0 Colour Stop 
📢 Broadcast [Close & Hold Arm Both]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 1000 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 1 0
⚙  Set drive speed 25%
🚗 Move back  1 seconds
🧭 Reset yaw
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0 1400 1 0 Colour Stop 
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0  4 0 Colour Stop 0
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0 75 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 1 90
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 50 0.4 3 250 1 E 1
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 75 0.4 3 750 1 E 1
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 50 0.4 3 175 0 E 1
🔧 Turn Gyro (0=L, 1=R) 0 0
📢 Broadcast [Open Arm Both]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 35 0 225 1 0 Colour Stop 
📢 Broadcast [Close Arm Both 2]
⏱  Wait 0.75s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 0 500 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 1 90
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 90 1550 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 1
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 0 360 1 1 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -90
🛑 Stop drive
⏱  Wait 0.25s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 100 1 1 Colour Stop 
📢 Broadcast [Open Arm Right]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 275 1 1 Colour Stop 
📢 Broadcast [Open Arm Left]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 250 1 1 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 1 0
📢 Broadcast [Notes 2]

📡 When I receive [Cables]
⚙  Set drive motors [CD]
⚙  Set drive speed 25%
⏱  Wait 0.5s
🚗 Move back  1 seconds
⏱  Wait 0.5s
🧭 Reset yaw
🔧 Move Degree... L Motor 50 R Motor 50 Degree 250 Mode 1
🔧 Turn 50 Speed 75 Degree
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 100 -7.5 1300 1 0 Colour Stop 
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0  3 0 Colour Stop 450
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0  4 0 Colour Stop 0
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 50 0 100 1 1 Colour Stop 0
🔧 Turn Gyro (0=L, 1=R) 1 88
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 75 0.4 3 250 1 E 1
📢 Broadcast [Open Arm Both] and wait
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 50 88 350 1 1 Colour Stop 
📢 Broadcast [Close Arm Both]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 88  4 0 Colour Stop 0
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 88 135 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 20
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 20 1000 1 1 Colour Stop 
📢 Broadcast [Open & Hold Arm Both]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 20  3 0 Colour Stop 450
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 20 10 1 1 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -88
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 75 0.4 3 200 1 E 1
📢 Broadcast [Open Arm Both]
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 50 -90 350 1 1 Colour Stop 
📢 Broadcast [Close Arm Both]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 1050 1 1 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 1 -15
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 -15 1000 1 1 Colour Stop 
📢 Broadcast [Open & Hold Arm Both]
⏱  Wait 0.5s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -15  3 1 Colour Stop 450
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 20 10 1 1 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -90
📢 Broadcast [Microphone]

📡 When I receive [Notes 2]
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0 500 1 0 Colour Stop 
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0  4 0 Colour Stop 
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0 50 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 1 90
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 50 0.4 3 150 1 E 1
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -50 90 15 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 0
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 35 0 275 1 0 Colour Stop 
📢 Broadcast [Close Arm Both 3]
⏱  Wait 0.75s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 0 550 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -90
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 -90 250 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 1 0
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 0 280 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -90
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 110 1 0 Colour Stop 
📢 Broadcast [Open Arm Left]
⏱  Wait 0.25s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 250 1 0 Colour Stop 
📢 Broadcast [Open Arm Right]
⏱  Wait 0.25s
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop -75 -90 225 1 0 Colour Stop 
📢 Broadcast [Close & Hold Arm Both]
🔧 Turn Gyro (0=L, 1=R) 1 0
📢 Broadcast [Notes 3]

📡 When I receive [Test]

📡 When I receive [Instruments]
🔧 FollowLine... Speed,Kp,Kd,Degrees,StopAtLine Port,Position 75 0.4 3 500 1 E 1
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 178 50 1 1 Colour Stop 
🔧 Turn 75 Speed 200 Degree
🔧 Turn Gyro (0=L, 1=R) 0 90
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 100 94 2250 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 0
🔧 Move Degree... L Motor -75 R Motor -75 Degree 525 Mode 1
⚙  Set drive speed 25%
🚗 Move back  1 seconds
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 0 125 1 0 Colour Stop 
🔧 Turn Gyro (0=L, 1=R) 0 -90
🔧 GyroStraight… Speed,Angle,Degree, Mode, Stop 75 -90 2750 1 0 Colour Stop 
📢 Broadcast [Notes 1] and wait

📡 When I receive [Open Arm Left]
⚙  Motor [B] speed 25%
🔄 Motor [B] → position 0 (shortest)

📡 When I receive [Open Arm Right]
⚙  Motor [F] speed 25%
🔄 Motor [F] → position 0 (shortest)

📡 When I receive [Open Arm Both]
⚙  Motor [B] speed 25%
🔄 Motor [B] → position 0 (shortest)

📡 When I receive [Open Arm Both]
⚙  Motor [F] speed 25%
🔄 Motor [F] → position 0 (shortest)

📡 When I receive [Open & Hold Arm Both]
⚙  Motor [B] stop method [hold]
⚙  Motor [B] speed 25%
🔄 Motor [B] → position 335 (clockwise)

📡 When I receive [Open & Hold Arm Both]
⚙  Motor [F] stop method [hold]
⚙  Motor [F] speed 25%
🔄 Motor [F] → position 25 (counterclockwise)

📡 When I receive [Close Arm Both]
⚙  Motor [F] stop method [hold]
⚙  Motor [F] speed 50%
🔄 Motor [F] → position 60 (clockwise)

📡 When I receive [Close Arm Both]
⚙  Motor [B] stop method [hold]
⚙  Motor [B] speed 50%
🔄 Motor [B] → position 300 (counterclockwise)

📡 When I receive [Close Arm Both 2]
⚙  Motor [F] stop method [hold]
⚙  Motor [F] speed 50%
🔄 Motor [F] → position 120 (clockwise)

📡 When I receive [Close Arm Both 2]
⚙  Motor [B] stop method [hold]
⚙  Motor [B] speed 50%
🔄 Motor [B] → position 240 (counterclockwise)

📡 When I receive [Close Arm Both 3]
⚙  Motor [B] stop method [hold]
⚙  Motor [B] speed 25%
🔄 Motor [B] → position 300 (counterclockwise)

📡 When I receive [Close Arm Both 3]
⚙  Motor [F] stop method [hold]
⚙  Motor [F] speed 25%
🔄 Motor [F] → position 65 (clockwise)

📡 When I receive [Close Arm Both 4]
⚙  Motor [B] stop method [hold]
⚙  Motor [B] speed 35%
🔄 Motor [B] → position 240 (counterclockwise)

📡 When I receive [Close Arm Both 4]
⚙  Motor [F] stop method [hold]
⚙  Motor [F] speed 15%
🔄 Motor [F] → position 100 (clockwise)

📡 When I receive [Close & Hold Arm Both]
⚙  Motor [B] stop method [hold]
⚙  Motor [B] speed 50%
🔄 Motor [B] → position 270 (counterclockwise)
🛑 Stop motor [B]

📡 When I receive [Close & Hold Arm Both]
⚙  Motor [F] stop method [hold]
⚙  Motor [F] speed 50%
🔄 Motor [F] → position 95 (clockwise)
🛑 Stop motor [F]

```
