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 dalam kode)
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 ((65535- adc_value) / 65535) * 900 + 10 # Rentang 10 - 910 lux
# Variabel untuk menyimpan kondisi normal awal
lux_normal = 0
# Variabel untuk kedip LED
last_blink_time = utime.ticks_ms()
led_state = False
led_should_blink = False # hanya True saat mendeteksi perubahan cahaya signifikan
# 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: {lux_normal}")
print(f"LDR Value: {analog_value} | Lux: {lux}")
if lux > lux_normal - 490.2289:
led_should_blink = True # Aktifkan mode kedip
buzzer.duty_u16(29490) # Nyalakan buzzer
for i in range(500, 500): # Variasi frekuensi buzzer
buzzer.freq(i)
utime.sleep(0.1)
else:
led_should_blink = False
led.off()
buzzer.duty_u16(0)
# Kedip LED jika perlu
# if led_should_blink:
# current_time = utime.ticks_ms()
# if utime.ticks_diff(current_time, last_blink_time) >= 1000:
# led_state = not led_state
# led.value(led_state)
# last_blink_time = current_time
# Kedip LED jika perlu
if led_should_blink:
t = utime.time() % 8 # Ulangi setiap 8 detik
if t < 4:
led.toggle()
utime.sleep(0.5)
else:
led.off()
utime.sleep(0.1) # Delay supaya tidak terlalu cepat membaca LDR