from machine import Pin, ADC, PWM
from time import sleep
# Joystick pins
x_axis = ADC(Pin(26)) # VRx (horizontal)
y_axis = ADC(Pin(27)) # VRy (vertical)
button = Pin(14, Pin.IN, Pin.PULL_UP) # SW (Select button)
# Servo setup
servo = PWM(Pin(15), freq=50)
# Convert angle (0-180) to PWM duty for servo
def set_servo_angle(angle):
min_duty = 1638 # ~0.5ms pulse
max_duty = 8192 # ~2.5ms pulse
duty = int(min_duty + (angle / 180) * (max_duty - min_duty))
servo.duty_u16(duty)
while True:
x_val = x_axis.read_u16() # 0–65535
y_val = y_axis.read_u16() # 0–65535
btn_state = button.value() # 0 = pressed, 1 = released
# Map x_val to servo angle (0–180)
angle = int((x_val / 65535) * 180)
set_servo_angle(angle)
# Print readings
print(f"X: {x_val}, Y: {y_val}, Button: {'Pressed' if btn_state == 0 else 'Released'}, Angle: {angle}")
sleep(0.1)