micro:bit 按键节拍测量器:记录四段间隔并查看平均每分钟次数

2026-10-29 / 0 评论 / 2 阅读

micro:bit 按键节拍测量器:记录四段间隔并查看平均每分钟次数 教程示意图

发布日期:2026-10-29。

适用场景

想估计一段音乐或手工操作的节奏,却不想安装额外应用,可以用 micro:bit 做一个小型按键节拍测量器。按 A 记录节拍,积累最多四段间隔;按 B 查看平均每分钟次数。查看结果后,再按 A 就开始新一轮。

它适合学习事件、时间戳、列表和平均值,只使用板载按键与灯阵,不需要外接电路。结果包含人工按键误差,不能用于医疗测量、正式计时或设备安全控制。

原理:五次按压才有四段间隔

一次按压只能提供一个时间点。第二次按压到来后,两个时间点相减,才得到第一段间隔。因此,想得到四段间隔,需要依次按五次 A。

如果四段间隔之和为 S 毫秒,每分钟次数等于 60000×4÷S。程序允许不足四段时查看结果,此时按实际段数计算。这里先平均间隔再换算节拍,不是先分别换算四个节拍值再求平均,两种算法在间隔不一致时会产生不同结果。

程序通过运行时间函数记录自启动以来的毫秒数,其定义见 micro:bit MicroPython 模块文档。

准备工作

准备一块 micro:bit V2、一条支持数据传输的 USB 线和电脑。在 micro:bit Python 编辑器中保存原有项目副本,然后建立新项目。使用与 micro:bit V2 匹配的 MicroPython 固件,不要把其他开发板的 Python 程序直接复制过来。

板子放在干燥、平整的位置,按压时扶住边缘,避免用金属物接触底部焊点。初次练习保持 USB 供电即可,不同时连接电池盒或外部电源。

分步骤操作

第一步:明确操作约定

A 是打拍键,B 是查看键。第一次按 A 时显示 0,表示已经取得起点,但还没有有效间隔。后续每次有效按压使屏幕显示的段数增加,最多显示 4。

记录超过四段时,程序只保留最近四段。按 B 后循环滚动结果;此时按 A 会清空上一轮记录,并把这次按压作为新起点。这样无需断电,也能连续做多轮比较。

第二步:输入完整程序

from microbit import button_a, button_b, display, running_time, sleep

last_tap = None
intervals = []
reviewing = False

display.show('-')

while True:
    a_pressed = button_a.was_pressed()
    b_pressed = button_b.was_pressed()
    now = running_time()

    if b_pressed:
        if intervals:
            total_ms = sum(intervals)
            bpm = (60000 * len(intervals) + total_ms // 2) // total_ms
            display.scroll(str(bpm), delay=100, wait=False, loop=True)
            reviewing = True
        else:
            display.show('?')

    elif a_pressed:
        if reviewing:
            intervals = []
            last_tap = None
            reviewing = False

        if last_tap is None:
            last_tap = now
            display.show('0')
        else:
            gap = now - last_tap
            last_tap = now
            if 250 <= gap <= 6000:
                intervals.append(gap)
                intervals = intervals[-4:]
                display.show(str(len(intervals)))
            else:
                intervals = []
                display.show('0')

    sleep(10)

代码可以直接作为新项目正文使用,没有需要填入的设备地址或账户信息。last_tap 保存上一次按压时间,intervals 保存有效间隔,reviewing 表示当前是否正在查看结果。

第三步:理解按键与显示的配合

程序使用按下事件读取方法,而不是持续按住状态。根据 官方按键文档,读取按下事件后会清除已记录状态,需要再次按压才会再次报告。因此,持续按住 A 不应该不断增加段数。

结果显示设置为后台运行。wait=False 让主循环继续检查按键,loop=True 让数字反复滚动。相关参数由 官方显示文档定义。下一次显示段数时会替换正在滚动的结果。

A、B 在同一次循环中都被读到时,代码优先处理 B。这是明确的操作规则,练习时仍建议分开按两个按键。

第四步:下载并完成第一轮测量

保存项目,使用编辑器的下载功能,将生成的程序文件写入 micro:bit 对应磁盘。等待板子完成写入并重新运行,看到短横线后再开始操作。

按稳定节奏连续按五次 A,观察数字依次从 0 增加到 4,然后按 B。屏幕滚动的整数就是这一轮平均每分钟次数。程序用整数运算进行四舍五入,不显示小数位,避免给人工测量制造过高精度的印象。

验证方法

用独立秒表或节拍器辅助,尝试每秒按一次 A。五次按压跨越约四秒,查看结果应接近每分钟 60 次;改成每半秒按一次,则应接近 120 次。人工操作存在误差,应观察多轮结果是否围绕目标变化,不要求每轮完全一致。

继续检查三个边界:长按 A 不应连续累加;刚开机就按 B 应显示问号;查看结果后按 A 应显示 0,并开始新一轮。这些现象分别验证事件读取、空数据处理和重新开始逻辑。

常见错误

只按四次就认为收集了四段,实际上只有三段。连续快速拍打时,短于 250 毫秒的间隔会让本轮重新计数;停顿超过六秒也一样。代码把这两种情况视为异常操作,并将当前按压作为下一段的起点。

允许的单段范围对应约每分钟 10 至 240 次。若要测更快的节奏,需要重新评估按键操作和采样方式,而不是只扩大数字范围。循环中的短暂休眠也意味着时间记录存在有限的轮询误差。

安全与回退

本项目不接外部导线,不需要测量电流,也不要把板载按键换接到不明电压信号。若另做外接按键实验,必须先断电接线,并另行确认接口电压和限流措施。

按板子背面的复位键可以清空当前轮次。要恢复原用途,重新写入此前保存的项目。程序只在内存中保存间隔,断电后记录会消失,适合短时练习,不适合作为长期记录器。

参考资料与转载说明

本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。

评论一下?

OωO
取消