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)
# Inisialisasi
previous_pot_value = pot.read_u16()
angle = 90 # Awal servo di tengah
while True:
pot_value = pot.read_u16()
# Cek perubahan potensiometer
if pot_value < previous_pot_value:
angle -= 1 # Diperkecil → berlawanan jarum jam
elif pot_value > previous_pot_value:
angle += 1 # Diperbesar → searah jarum jam
# === Buzzer ===
if angle < 0 or angle > 180:
buzzer.duty_u16(30000) # Buzzer ON
else:
buzzer.duty_u16(0) # Buzzer OFF
# Batas sudut supaya servo tetap bergerak normal
if angle < 0:
angle = 0
elif angle > 180:
angle = 180
# Konversi sudut ke duty cycle (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}")
previous_pot_value = pot_value # Simpan nilai potensiometer sebelumnya
sleep(1)