from machine import Pin, PWM, ADC
from time import sleep
# Inisialisasi
pot = ADC(26)  # GP26 = ADC0
servo = PWM(Pin(16))
buzzer = PWM(Pin(14))
# Konfigurasi PWM
servo.freq(50)    # 50 Hz untuk servo
buzzer.freq(1000) # Frekuensi buzzer
# Fungsi mapping
def map_value(value, in_min, in_max, out_min, out_max):
    return int((value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
# Loop utama
while True:
    # Baca nilai potensiometer
    pot_value = pot.read_u16()
    # Konversi nilai potensiometer ke sudut servo (0-180 derajat)
    angle = map_value(pot_value, 0, 65535, 180, 0)
    # Konversi sudut ke duty cycle (rentang 1638 - 8192)
    duty = map_value(angle, 0, 180, 1638, 8192)
    servo.duty_u16(duty)
    # Debugging
    print(f"Pot Value: {pot_value}, Angle: {angle}, Duty: {duty}")
    # === Buzzer ===
    if angle <= 0 or angle >= 180:
        # Jika sudut keluar batas, buzzer berbunyi
        buzzer.duty_u16(30000)  # Suara ON
    else:
        buzzer.duty_u16(0)  # Suara OFF
    # Delay untuk pembaruan
    sleep(0.05)