from machine import Pin, PWM, ADC
import utime
# Pin Setup
ldr = ADC(28)                 # Pin AO dari LDR ke GP28
ldr_digital = Pin(0, Pin.IN)  # Pin DO dari LDR ke GP0 (tidak digunakan di logika saat ini)
led = Pin(6, Pin.OUT)         # LED Merah di GP6
buzzer = PWM(Pin(15))         # Buzzer di GP15 dengan PWM
# Konfigurasi awal PWM Buzzer
buzzer.freq(1000)             # Frekuensi buzzer 1kHz
buzzer.duty_u16(0)            # Buzzer mati di awal
# Fungsi konversi nilai ADC ke lux
def adc_to_lux(adc_value):
    return (adc_value / 65535) * 900 + 10  # Estimasi rentang 10 - 1000 lux
lux_normal = 0  # Variabel untuk menyimpan nilai referensi awal
# Loop utama
while True:
    analog_value = ldr.read_u16()
    lux = adc_to_lux(analog_value)
    if lux_normal == 0:
        lux_normal = lux
        print(f"Lux Normal (Referensi): {lux_normal:.2f}")
    print(f"LDR Value: {analog_value} | Lux: {lux:.2f}")
    # Jika lebih gelap dari normal sebesar 200 lux
    if lux < lux_normal - 200:
        print("Kondisi lebih gelap terdeteksi!")
        start_time = utime.ticks_ms()
        buzzer.duty_u16(int(65535 * 0.55))  # Duty Cycle 55%
        while utime.ticks_diff(utime.ticks_ms(), start_time) < 5000:  # Selama 5 detik
            led.toggle()            # LED berkedip
            utime.sleep(0.5)        # Kedip setiap 0.5 detik
        
        # Matikan LED dan buzzer setelah selesai
        led.off()
        buzzer.duty_u16(0)
    utime.sleep(0.1)  # Delay kecil antar pembacaan