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
# Fungsi mapping nilai
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)
# Variabel untuk menyimpan nilai pot sebelumnya
prev_pot_value = pot.read_u16()
while True:
pot_value = pot.read_u16() # Baca nilai ADC
angle = map_value(pot_value, 0, 65535, 180, 0) # Konversi ke sudut servo
duty = map_value(angle, 0, 180, 1500, 7500) # Konversi ke duty cycle
servo.duty_u16(duty) # Set posisi servo
# Debugging
print(f"Pot Value: {pot_value}, Angle: {angle}, Duty: {duty}")
# Deteksi apakah potensiometer diperkecil → nilai menurun
if pot_value < prev_pot_value:
# Servo diarahkan searah jarum jam
# (sudah terjadi dengan duty yang diubah berdasarkan nilai potensiometer)
pass
# Kondisi buzzer berbunyi jika sudut antara 0 dan 180 derajat
if 0 < angle < 180:
freq = int(200 + (pot_value / 65535) * (2000 - 200))
buzzer.freq(freq)
buzzer.duty_u16(30000)
else:
buzzer.duty_u16(0) # Matikan buzzer di luar rentang
prev_pot_value = pot_value # Simpan nilai potensiometer untuk pembacaan berikutnya
sleep(0.05)