from machine import Pin, PWM, ADC
from time import sleep
import utime
# Inisialisasi komponen
potensiometer = ADC(Pin(26)) # GP26 sebagai input ADC
servo = PWM(Pin(16)) # GP16 untuk kontrol servo
buzzer = PWM(Pin(14)) # GP14 untuk kontrol buzzer
# Pengaturan awal PWM
servo.freq(50) # Frekuensi standar untuk servo (50Hz)
buzzer.freq(1000) # Frekuensi awal buzzer (1kHz)
def konversi_nilai(nilai, dari_min, dari_max, ke_min, ke_max):
"""Mengubah nilai dari range awal ke range baru"""
return int((nilai - dari_min) * (ke_max - ke_min) / (dari_max - dari_min) + ke_min)
while True:
# Baca nilai potensiometer (16-bit: 0-65535)
nilai_pot = potensiometer.read_u16()
# Konversi ke sudut servo (180°-0° untuk putaran berlawanan jarum jam)
sudut_servo = konversi_nilai(nilai_pot, 0, 65535, 180, 0)
# Konversi sudut ke duty cycle servo
duty_servo = konversi_nilai(sudut_servo, 0, 180, 1500, 7500)
servo.duty_u16(duty_servo)
# Tampilkan nilai untuk debugging
print(f"Nilai Pot: {nilai_pot}, Sudut: {sudut_servo}, Duty: {duty_servo}")
# Kontrol Buzzer
if 0 < sudut_servo < 180: # Jika servo tidak di posisi ekstrim
# Atur frekuensi buzzer berdasarkan nilai potensiometer
frekuensi_buzzer = konversi_nilai(nilai_pot, 0, 65535, 200, 2000)
buzzer.freq(frekuensi_buzzer)
buzzer.duty_u16(30000) # Nyalakan buzzer (50% duty cycle)
else:
buzzer.duty_u16(0) # Matikan buzzer
sleep(0.05) # Jeda singkat antara pembacaan