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)