from machine import Pin, PWM, ADC
import utime
# === Inisialisasi Pin ===
servo = PWM(Pin(16)) # Servo motor pada pin GP16
pot = ADC(Pin(28)) # Potensiometer pada pin GP28
led_red = Pin(1, Pin.OUT) # LED Merah pada pin GP1
led_green = Pin(2, Pin.OUT) # LED Hijau pada pin GP2
led_blue = Pin(3, Pin.OUT) # LED Biru pada pin GP3
# === Konfigurasi PWM untuk servo ===
servo.freq(50)
# === Fungsi pemetaan 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 kontrol kedipan LED ===
last_blink = utime.ticks_ms()
led_state = True
# === Loop utama ===
while True:
now = utime.ticks_ms()
# Baca nilai potensiometer
pot_value = pot.read_u16()
# Pemetaan potensiometer ke sudut
angle = map_value(pot_value, 0, 65535, 0, 180)
# Pemetaan ke PWM duty_u16() antara 0.5ms - 2.5ms (untuk 0°–180°)
duty = map_value(angle, 0, 180, 3276, 16384)
servo.duty_u16(duty)
print(f"Pot Value: {pot_value}, Angle: {angle}, Duty: {duty}")
# Toggle LED setiap 2 detik
if utime.ticks_diff(now, last_blink) >= 2000:
led_state = not led_state
last_blink = now
# Atur kondisi LED berdasarkan sudut
if 0 <= angle <= 60:
led_red.value(led_state)
led_green.value(0)
led_blue.value(led_state)
elif 60 < angle <= 90:
led_red.value(led_state)
led_green.value(0)
led_blue.value(0)
elif 90 < angle <= 120:
led_red.value(0)
led_green.value(0)
led_blue.value(0)
elif 120 < angle <= 180:
led_red.value(0)
led_green.value(0)
led_blue.value(led_state)
utime.sleep_ms(50)