from machine import Pin, PWM
import time

# Define pins
led_pins = [Pin(i, Pin.OUT) for i in range(3)]  # GP0, GP1, GP2
rgb_pins = [Pin(i, Pin.OUT) for i in range(3, 6)]  # GP3, GP4, GP5

# Setup servos using PWM
servo1 = PWM(Pin(6))  # GP6
servo2 = PWM(Pin(7))  # GP7
servo1.freq(50)
servo2.freq(50)

# Initialize variables
current_led = 0
current_color = 0
servo_pos = 0
sweep_direction = -1

def set_servo_angle(servo, angle):
    # Convert angle (0-180) to duty cycle for 50Hz PWM
    # Typically 0 degrees = 1ms pulse, 180 degrees = 2ms pulse
    # For 16-bit PWM resolution (0-65535), this maps to approximately:
    duty = int(1640 + (angle / 180) * 6550)  # ~1640 (1ms) to ~8190 (2ms)
    servo.duty_u16(duty)

def set_color(color):
    for i in range(3):
        rgb_pins[i].value(0)
    rgb_pins[color].value(1)

def sweep_servos():
    global servo_pos, sweep_direction
    
    if servo_pos == 0 or servo_pos == 180:
        sweep_direction *= -1
        time.sleep(2)
    
    if sweep_direction == 1:
        while servo_pos < 180:
            servo_pos += sweep_direction * 10
            # Ensure we don't exceed 180
            if servo_pos > 180:
                servo_pos = 180
            set_servo_angle(servo1, servo_pos)
            set_servo_angle(servo2, servo_pos)
            time.sleep(0.1)
    
    if sweep_direction == -1:
        while servo_pos > 0:
            servo_pos += sweep_direction * 10
            # Ensure we don't go below 0
            if servo_pos < 0:
                servo_pos = 0
            set_servo_angle(servo1, servo_pos)
            set_servo_angle(servo2, servo_pos)
            time.sleep(0.1)

# Set initial positions
set_servo_angle(servo1, 0)
set_servo_angle(servo2, 0)
set_color(0)

# Main loop
while True:
    led_pins[current_led].value(1)
    set_color(current_color)
    sweep_servos()
    time.sleep(0.2)
    led_pins[current_led].value(0)
    current_led = (current_led + 1) % 3
    current_color = (current_color + 1) % 3
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT