如何修复Python time函数数值取整导致的反应时间显示不准确问题
解决PicoZero反应时间测试代码的精准计时问题
问题根源
你的代码使用time.time()计时,但在树莓派Pico的MicroPython环境中,time.time()返回的是开机以来的整数秒数,并非带小数的高精度时间,所以计算出的反应时间只能是整数,导致显示0、1、2秒这类不精准的结果。
解决方案
改用MicroPython提供的高精度计时函数:
time.ticks_ms():返回当前时间的毫秒数(整数,范围0~2^30-1)time.ticks_us():返回当前时间的微秒数(整数,范围0~2^30-1)- 必须用
time.ticks_diff(new_ticks, old_ticks)计算时间差,避免计时溢出导致的错误结果
修改后的完整代码
from picozero import RGBLED, Button import time import random rgb = RGBLED(red=18, green=17, blue=16) button = Button(15) times = [] index = 0 print("Press the button to start") while not button.is_pressed: time.sleep(0.01) while index != 5: rand_num = random.randrange(2, 4) index += 1 rgb.color = (255, 0, 0) print("Wait for the green light") time.sleep(rand_num) rgb.color = (0, 255, 0) # 改用毫秒级计时 start_ticks = time.ticks_ms() while not button.is_pressed: time.sleep(0.001) # 缩小轮询间隔,提升按钮检测灵敏度 # 计算时间差并转换为秒 reaction_ms = time.ticks_diff(time.ticks_ms(), start_ticks) reaction_time = reaction_ms / 1000 # 转换为带小数的秒数 times.append(reaction_time) rgb.color = (255, 0, 0) print(times) print(f"Reaction Time: {reaction_time:.3f} seconds") # 格式化显示3位小数
关键修改点
- 用
time.ticks_ms()替换time.time(),获取毫秒级起始时间 - 用
time.ticks_diff()计算时间差,规避溢出问题 - 将毫秒差值转换为秒,通过格式化字符串输出精准到千分位的结果
- 可选优化:把按钮轮询的
time.sleep(0.01)改为0.001,提升按钮按下的响应速度
内容的提问来源于stack exchange,提问作者123131312s
相关产品推荐
相关产品推荐

