from machine import Pin
import time
# Khai báo chân theo đúng bảng trong đề
led_red = Pin(15, Pin.OUT)
led_yellow = Pin(14, Pin.OUT)
led_green = Pin(13, Pin.OUT)
buzzer = Pin(17, Pin.OUT)
button = Pin(28, Pin.IN, Pin.PULL_UP)
# Biến ghi nhận có người yêu cầu sang đường hay chưa
pedestrian_request = False
def set_lights(red, yellow, green):
# Hàm này giúp đặt trạng thái 3 đèn cho gọn hơn
led_red.value(red)
led_yellow.value(yellow)
led_green.value(green)
def beep_fast(duration_ms):
# Active buzzer không cần PWM
# Chỉ cần bật tắt nhanh để tạo chuỗi bíp liên tục
start = time.ticks_ms()
while time.ticks_diff(time.ticks_ms(), start) < duration_ms:
buzzer.value(1)
time.sleep_ms(100)
buzzer.value(0)
time.sleep_ms(100)
# Ban đầu cho xe đi bằng đèn xanh
set_lights(0, 0, 1)
buzzer.value(0)
while True:
# Nếu nhấn nút thì ghi nhận yêu cầu
if button.value() == 0:
pedestrian_request = True
# Chờ nhả nút để tránh bị ghi nhận lặp
while button.value() == 0:
time.sleep_ms(10)
if pedestrian_request:
# Không chuyển đỏ ngay lập tức, giữ xanh thêm một lúc
set_lights(0, 0, 1)
time.sleep(2)
# Chuyển sang vàng để báo chuẩn bị dừng
set_lights(0, 1, 0)
time.sleep(2)
# Chuyển sang đỏ để người đi bộ qua đường
set_lights(1, 0, 0)
# Buzzer kêu nhanh trong thời gian an toàn sang đường
beep_fast(5000)
# Hết lượt thì quay về xanh
set_lights(0, 0, 1)
pedestrian_request = False
time.sleep_ms(20)