from machine import Pin, PWM, ADC #Mengimpor modul kontrol hardware: Pin digital, PWM, dan ADC (analog)
from time import sleep #Mengimpor fungsi sleep untuk delay
# Inisialisasi
pot = ADC(26) # Inisialisasi input analog (potensiometer) pada pin GP26 (ADC0)
servo = PWM(Pin(16)) #Inisialisasi output PWM ke servo pada pin GP16
buzzer = PWM(Pin(14)) # Inisialisasi output PWM ke buzzer pada pin GP14
# Konfigurasi PWM
servo.freq(50) # Mengatur frekuensi PWM servo ke 50 Hz (frekuensi standar servo motor)
buzzer.freq(1000) # Mengatur frekuensi buzzer ke 1000 Hz (standar suara buzzer aktif)
python
Salin kode
def map_value(value, in_min, in_max, out_min, out_max): # Fungsi untuk memetakan nilai dari satu rentang ke rentang lain
return int((value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)
while True: # Loop utama (berjalan terus menerus)
pot_value = pot.read_u16() # Membaca nilai ADC dari potensiometer (range: 0 - 65535)
# Konversi ke sudut servo (0° - 180°)
angle = map_value(pot_value, 0, 65535, -1, 181) # Konversi nilai potensiometer ke sudut (range: -1 hingga 181)
# Validasi sudut dan kontrol buzzer
if angle < 0 or angle > 180: # Jika sudut di luar batas normal
buzzer.duty_u16(30000) # Aktifkan buzzer (nilai PWM menengah)
else:
buzzer.duty_u16(0) # Jika sudut valid, matikan buzzer
# Konversi sudut ke duty cycle servo
duty = map_value(angle, 0, 180, 1500, 7500) # Mengubah sudut menjadi nilai duty cycle untuk servo
servo.duty_u16(duty)
# Debug output
print(f"Pot Value: {pot_value}, Angle: {angle}, Duty: {duty}") # Menampilkan nilai potensiometer, sudut, dan PWM di terminal
sleep(0.05) # Delay 50ms agar tidak terlalu cepat berubah