login

AIGC

from unihiker_k10 import pin, rgb, button, screen
import time
import asr

# 语音初始化
asr.init_asr()
asr.start_asr()
asr.start_tts()
screen.init(dir=2)
# 引脚定义
p0 = pin(0)  # 震动
p1 = pin(1)  # 人体红外

trigger_mode = False
p0.write_digital(0)

def button_a_pressed():
    global trigger_mode
    trigger_mode = True

bt_a = button(button.a)
bt_a.event_pressed = button_a_pressed

# 时间参数
GREEN_NORMAL = 30
YELLOW_NORMAL = 5
RED_NORMAL = 25
EMERGENCY_GREEN = 10

light_state = 0  # 0绿 1黄 2红
countdown = GREEN_NORMAL

# 灯光控制
def set_light(r, g, b):
    rgb.write(num=0, R=0, G=0, B=0)
    rgb.write(num=2, R=r, G=g, B=b)

# 屏幕显示
def show_text(msg):
    screen.clear()
    screen.draw_text(text=msg, line=1, font_size=24, color=0x00FFFF)
    screen.show_draw()

# 主循环
while True:
    human_detected = p1.read_digital() == 0

    # 触发:人体 或 按钮
    if human_detected or trigger_mode:
        trigger_mode = False

        # 语音+震动
        asr.add_tts_data("请通行")
        p0.write_digital(1)
        time.sleep(0.5)
        p0.write_digital(0)

        # 紧急绿灯10秒
        set_light(0, 255, 0)
        for i in range(EMERGENCY_GREEN, 0, -1):
            show_text(f"绿灯倒计时:{i}秒")
            time.sleep(1)

        show_text("恢复正常红绿灯")
        time.sleep(1)
        light_state = 0
        countdown = GREEN_NORMAL
        continue

    # 正常红绿灯
    if light_state == 0:
        show_text(f"绿灯:{countdown}秒")
        set_light(0, 255, 0)
    elif light_state == 1:
        show_text(f"黄灯:{countdown}秒")
        set_light(255, 255, 0)
    else:
        show_text(f"红灯:{countdown}秒")
        set_light(255, 0, 0)

    time.sleep(1)
    countdown -= 1

    if countdown < 0:
        if light_state == 0:
            light_state = 1
            countdown = YELLOW_NORMAL
        elif light_state == 1:
            light_state = 2
            countdown = RED_NORMAL
        else:
            light_state = 0
            countdown = GREEN_NORMAL
login