from machine import Pin, PWM, ADC
from time import sleep
import utime
# 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) # Awal frekuensi buzzer
# Variabel untuk menyimpan nilai potensiometer sebelumnya
prev_pot_value = pot.read_u16()
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)
while True:
# Membaca nilai potensiometer (0 - 65535)
pot_value = pot.read_u16()
# === Servo Motor ===
# Konversi ke sudut servo (0° - 180°)
angle = map_value(pot_value, 0, 65535, 0, 180)
# Konversi sudut ke duty cycle (1500 - 7500) → sesuai servo PWM
duty = map_value(angle, 0, 180, 1500, 7500)
servo.duty_u16(duty)
# === Logika untuk buzzer ===
# Buzzer menyala jika sudut >0° dan <180°
if angle > 0 and angle < 180:
buzzer.duty_u16(30000) # Buzzer ON
# Frekuensi buzzer tergantung sudut
freq = map_value(angle, 0, 180, 200, 2000)
buzzer.freq(freq)
else:
buzzer.duty_u16(0) # Buzzer OFF
# === Deteksi perubahan potensiometer ===
if pot_value < prev_pot_value:
# Jika nilai potensiometer diperkecil, servo bergerak searah jarum jam
# (Sudut berkurang, sudah dihandle oleh mapping di atas)
pass
# Update nilai potensiometer sebelumnya
prev_pot_value = pot_value
# Print untuk debugging
print(f"Pot Value: {pot_value}, Angle: {angle}, Duty: {duty}")
sleep(0.05)