树莓派实现绿色LED闪烁速度递增的代码问题求解
问题根源
你的代码中绿灯亮、灭状态的等待时间固定为0.5s,即每1秒完成1次闪烁,5次循环总时长刚好5秒,但全程延时没有变化,因此闪烁速度始终固定。
修改方案
核心逻辑是逐次缩短绿灯亮、灭状态的等待时间,同时保证蓝灯在5秒周期内全程常亮,总运行时长控制在5秒即可。
可直接使用的修改后代码如下:
import time def blink_green(): # 蓝灯在周期开始时开启,全程保持常亮 blue.on() TOTAL_TIME = 5 # 单周期总时长5秒 INIT_DELAY = 0.5 # 初始亮/灭等待时长,对应每秒1次闪烁 MIN_DELAY = 0.05 # 最快速度下的亮/灭等待时长,对应每秒10次闪烁 SMOOTH_STEPS = 15 # 速度渐变的阶段数,数值越大提速过渡越平滑 current_delay = INIT_DELAY delay_decrement = (INIT_DELAY - MIN_DELAY) / SMOOTH_STEPS time_passed = 0 while time_passed < TOTAL_TIME: # 切换绿灯状态 green.toggle() time.sleep(current_delay) green.toggle() time.sleep(current_delay) # 累计已运行时长 time_passed += current_delay * 2 # 逐轮缩短等待时间,直到达到最快闪烁速度 if current_delay > MIN_DELAY: current_delay -= delay_decrement while True: blink_green() # 可选:单周期结束后关闭绿灯,停顿1秒再开启下一轮 green.off() time.sleep(1)
可调说明
- 如果想要提速效果更明显,可以调小
MIN_DELAY的数值,让最快闪烁速度更高;如果想要过渡更自然,增大SMOOTH_STEPS的数值即可。 - 如果不需要5秒周期结束后的停顿效果,删掉最后两行可选代码即可,程序会自动重启下一个5秒的亮灯周期。
内容的提问来源于stack exchange,提问作者pnlqpp
相关产品推荐
相关产品推荐

