如何在micro:bit MicroPython中重置数据记录时间戳
问题描述
希望按下BBC micro:bit的Button A时开始数据记录,让第一条记录的时间戳为0.00(对应外部时钟的指定时刻,如12:10),但当前日志的时间戳零点从设备开机/重置时开始,导致第一条记录时间戳不为0.00。使用带大型开关的Robotbit扩展板时,开机同步的精度不足,需要类似reset_time()的方法来重置时间基准。
解决方案
通过手动维护时间基准的方式,替代log模块自带的timestamp机制:在Button A按下时记录当前设备的运行时间,之后每次记录数据时计算相对该基准的时间差,作为自定义时间戳。
修改后的代码示例
from microbit import * import log # 配置日志标签,不使用log模块自带的timestamp log.set_labels('altitude', 'azimuth', 'measure', 'timestamp') # 等待Button A按下,记录时间基准 while not button_a.was_pressed(): pass base_time = running_time() # 记录按下时刻的设备运行毫秒数 # 测量循环(替换为实际的遍历逻辑) for altitude in range(0, 90, 10): for azimuth in range(0, 360, 45): measure = take_reading() # 调用实际的读数函数 # 计算相对时间(转换为秒,保留两位小数) relative_timestamp = round((running_time() - base_time) / 1000, 2) log.add({ 'altitude': altitude, 'azimuth': azimuth, 'measure': measure, 'timestamp': relative_timestamp }) sleep(100) # 根据实际需求调整间隔
关键说明
running_time():返回micro:bit开机后的累计毫秒数,精度可靠- 自定义timestamp:每次记录时计算当前时间与基准时间的差值,转换为秒后作为时间戳,确保第一条记录的时间戳接近0.00(误差仅来自按键反应和代码执行延迟,远小于开机同步误差)
- 移除log模块自带的
timestamp=log.SECONDS配置,避免与自定义timestamp冲突
内容的提问来源于stack exchange,提问作者Luis López
相关产品推荐
相关产品推荐

