velxio/test/test_100_days/Joystick_Controlled_Servo/source/main.py

34 lines
1.4 KiB
Python

import machine
import time
# ── Hardware setup ────────────────────────────────────────────
vrx = machine.ADC(machine.Pin(26)) # Joystick X axis
servo = machine.PWM(machine.Pin(0))
servo.freq(50) # SG90 = 50Hz
# ── Servo helper ──────────────────────────────────────────────
def set_angle(angle):
# 0° = 1000us, 90° = 1500us, 180° = 2000us
us = int(1000 + (angle / 180) * 1000)
duty = int(us * 65535 / 20000)
servo.duty_u16(duty)
# ── Map helper ────────────────────────────────────────────────
def map_val(x, in_min, in_max, out_min, out_max):
return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# ── Main loop ─────────────────────────────────────────────────
print("Joystick Servo Control ready!")
while True:
# Average 5 samples for smooth reading
x_raw = sum(vrx.read_u16() for _ in range(5)) // 5
# Map joystick (0-65535) to angle (0-180)
angle = map_val(x_raw, 0, 65535, 0, 180)
set_angle(angle)
print(f"Raw: {x_raw} Angle: {angle}°")
time.sleep(0.05)