from machine import Pin, PWM
from time import sleep
# Initialize PWM for Servo
servo = PWM(Pin(26))
servo.freq(50)
# Initialize Push Buttons
btn_up = Pin(21, Pin.IN, Pin.PULL_DOWN)
btn_down = Pin(28, Pin.IN, Pin.PULL_DOWN)
# Start at 45 degrees
angle = 0
def set_angle(angle):
# Convert angle (0–180) to duty for 0.5ms–2.5ms pulse width
min_duty = 1638 # ~0.5ms pulse width
max_duty = 8192 # ~2.5ms pulse width
duty = int((angle / 180) * (max_duty - min_duty) + min_duty)
servo.duty_u16(duty)
set_angle(angle)
while True:
if btn_up.value():
angle += 5
if angle > 180:
angle = 180
set_angle(angle)
print("Angle:", angle)
while btn_up.value():
sleep(0.05) # Wait for button release
if btn_down.value():
angle -= 5
if angle < 0:
angle = 0
set_angle(angle)
print("Angle:", angle)
while btn_down.value():
sleep(0.05) # Wait for button release
sleep(0.05)