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
led = Pin(6, Pin.OUT)     # LED di GP6
buzzer = PWM(Pin(15))     # Buzzer di GP15 dengan PWM
# Konfigurasi PWM Buzzer
buzzer.freq(1000)         # Frekuensi awal buzzer (1kHz)
buzzer.duty_u16(0)        # Mulai dengan buzzer mati
# Fungsi untuk mengonversi nilai ADC ke lux
def adc_to_lux(adc_value):
    return (adc_value / 65535) * 900 + 10  # Rentang 10 - 1000 lux
# Variabel untuk menyimpan kondisi normal awal
lux_normal = 0
# Loop utama
while True: #program jalan terus menerus
    analog_value = ldr.read_u16()
    lux = adc_to_lux(analog_value)
    if lux_normal == 0:
        lux_normal = lux  # Ambil nilai lux awal sebagai referensi
        print(f"Lux Normal: {lux_normal}")
    print(f"LDR Value: {analog_value} | Lux: {lux}") # setiap loop, print nilai ADC dan lux
    if lux > lux_normal + 100:  # Jika lebih terang 100 lux dari normal
        # LED berkedip dan buzzer nyala dengan duty 25% selama 2 detik
        start_time = utime.ticks_ms()
        buzzer.duty_u16(int(65535 * 0.25))  # Duty Cycle 25%
        while utime.ticks_diff(utime.ticks_ms(), start_time) < 2000:
            led.toggle()        # LED berkedip
            utime.sleep(0.5)     # Kedip setiap 0.5 detik (nyala-mati)
        # Setelah 2 detik, matikan LED dan buzzer
        led.off()
        buzzer.duty_u16(0)
    utime.sleep(0.1)  # Delay kecil supaya pembacaan tidak terlalu cepat