You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CircuitPython实现光线传感器持续遮挡3秒后触发LED与音效的功能咨询

CircuitPython实现光线传感器持续遮挡3秒后触发LED与音效的功能咨询

嗨,我来帮你搞定这个问题~你现在的代码思路有点小问题,用time.sleep(3)的话,程序会直接暂停3秒,这期间哪怕你把遮挡物移开了,它还是会继续执行后面的LED点亮和音效播放,这显然不是你想要的「持续遮挡3秒及以上才触发」的效果对吧?

要实现真正的“持续遮挡3秒后触发”,我们不能让程序中途“休眠”,而是要实时监测光线传感器的状态,同时统计持续遮挡的时长。这里可以用CircuitPython内置的time.monotonic()函数,它能返回一个不断递增的时间数值,用来计算时间差非常合适。

下面是调整后的代码,我给你加了详细的注释:

import time
# 假设你的cp模块已经正确导入了

# 初始化变量:记录遮挡开始的时间,初始为None表示未遮挡
block_start_time = None
# 标记是否已经触发过动作,避免重复执行
triggered = False

while True:
    current_light = cp.light
    print("Light:", current_light)
    
    if current_light < 10:
        # 第一次检测到遮挡,记录开始时间
        if block_start_time is None:
            block_start_time = time.monotonic()
            triggered = False  # 重置触发标记
        
        # 计算已经遮挡的时长
        elapsed_time = time.monotonic() - block_start_time
        
        # 持续遮挡满3秒,且还没触发过动作
        if elapsed_time >= 3 and not triggered:
            cp.red_led = True
            cp.play_tone(262, 1)
            cp.play_tone(294, 1)
            triggered = True  # 标记为已触发,避免重复播放音效
    else:
        # 没有遮挡,重置所有状态
        block_start_time = None
        triggered = False
        cp.red_led = False
    
    # 短暂休眠,避免循环太频繁占用资源
    time.sleep(0.2)

这样修改后,程序会一直监测光线状态:只有当光线持续低于10 lux满3秒时,才会触发LED点亮和音效;如果中途遮挡物被移开,计时会立刻重置,不会误触发。

备注:内容来源于stack exchange,提问作者Jimmy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 12:24:35