from machine import Pin, ADC, PWM
import time

# Khởi tạo các phần cứng
ldr = ADC(Pin(34))
led = Pin(12, Pin.OUT)
servo_pin = Pin(14)
servo = PWM(servo_pin, freq=50)

# Xác định ngưỡng giá trị LDR. Nếu giá trị LDR thấp hơn ngưỡng này, cửa sẽ được mở.
threshold = 1000

# Hàm này chuyển đổi góc độ (0-180 độ) thành giá trị duty cycle thích hợp cho servo.
def set_angle(angle):
    duty = int((angle / 180 * 102) + 26)
    servo.duty(duty)

# Hàm này sử dụng set_angle để mở cửa (90 độ) trong 2 giây, sau đó đóng cửa (0 độ).
def open_door():
    set_angle(90)
    time.sleep(2)
    set_angle(0)

while True:
    # Đọc giá trị từ cảm biến LDR.
    ldr_value = ldr.read()
    print('LDR:', ldr_value)
    
    # Nếu giá trị LDR nhỏ hơn ngưỡng thì bật LED và gọi hàm open_door() để mở cửa
    if ldr_value < threshold:
        led.on()
        open_door()
    # Ngược lại thì tắt đèn    
    else:
        led.off()
    
    time.sleep(1) # Delay trong 1 giây