编写日期:2026-10-21。
适用场景
学习或远程开会时,可以在桌边放一块小状态牌:点阵显示对勾代表可以打扰,叉号代表正在忙碌。直接触摸就切换容易误操作,因此本教程要求持续触摸约一点二秒才改变状态,而且一直按住只切换一次。
项目只使用 micro:bit V2 自带的触摸标志和点阵屏,不需要外接传感器、蜂鸣器或继电器。最终成果是一份可直接烧录的 MicroPython 程序,也是一份理解“检测条件”和“只执行一次”区别的入门练习。
原理:把一次动作拆成三个阶段
V2 正面的金色标志可以进行电容式触摸检测。程序读取的是当前是否被触摸,不是自动生成的长按事件,所以需要自己记录触摸开始时间,再用当前运行时间减去它。
整个过程分为等待触摸、累计持续时间、等待松手三个阶段。触摸时间不足就松手,开始时间立即清空;达到门槛后切换状态,并关闭触发资格;连续松手一百五十毫秒后,重新允许下一次长按。最后一步可以防止手指接触边缘时短暂抖动造成过早重新使能。
注意,程序里的“忙碌状态”和“触发资格”是两个不同变量。前者决定屏幕内容,后者控制能否接受下一次操作。把它们混成一个变量,往往会导致显示正确而交互行为混乱。
准备工作
准备 micro:bit V2、一根支持数据传输的 USB 线,以及可以向实体板写入 MicroPython 程序的编辑器。确认电路板版本,V1 没有这个可触摸标志,不能照搬本程序。开始前把原有程序保存到电脑,因为重新烧录会替换板上的程序。
用干燥的手指操作,把板子放在绝缘支架上,不要把背面焊点直接压在金属桌面。整个项目采用 USB 提供的安全低压供电。若以后增加任何外接线路,必须先拔下 USB 和电池,断电接线,并为外接负载单独核算限流;本教程不需要这些扩展。
分步骤操作
第一步:输入完整程序
下面代码中的 HOLD_MS 是长按门槛,RELEASE_MS 是松手确认时间,单位都是毫秒。其他变量由程序管理,不需要替换为设备名称或任何个人信息。
from microbit import display, Image, pin_logo, running_time, sleep
HOLD_MS = 1200
RELEASE_MS = 150
busy = False
armed = True
started = None
released = None
def show_status():
if busy:
display.show(Image.NO)
else:
display.show(Image.YES)
show_status()
while True:
now = running_time()
touched = pin_logo.is_touched()
if touched:
released = None
if armed:
if started is None:
started = now
elif now - started >= HOLD_MS:
busy = not busy
show_status()
armed = False
started = None
else:
started = None
if released is None:
released = now
elif now - released >= RELEASE_MS:
armed = True
sleep(30)
第二步:检查缩进并写入实体板
Python 用缩进表达代码属于哪个条件或循环。复制后重点检查主循环中的两个分支是否对齐,显示函数是否保持独立。不要把整段代码缩进到函数内部,否则主循环可能根本没有执行。
通过编辑器提供的设备写入功能烧录程序,等待写入结束。若采用下载程序文件再复制到设备磁盘的方式,应使用编辑器生成的文件,而不是把普通文本文件直接改后缀。烧录结束后,点阵应显示对勾。
第三步:观察一次长按
用手指轻触金色标志,保持超过一点二秒,显示应变成叉号。继续按住三秒,图案应保持不变。松手至少半秒,再次长按,应该回到对勾。
主循环每次暂停三十毫秒,因此实际识别时刻存在几十毫秒的采样误差。这个误差适合桌面交互,但不适合作为精密计时结果。程序没有插入长动画,所以读取触摸状态不会被滚动文字长时间阻塞。
第四步:按需调整交互
确认基础行为正确后,可以把长按门槛改成一千五百毫秒,适应更容易碰到标志的摆放位置。每次只修改一个参数,并重复短触碰、持续触摸和松手重按三项检查。松手确认时间不宜随意降到零,否则失去了过滤短暂断触的作用。
验证方法
进行四组可重复检查:短触碰约半秒,状态不变;持续触摸约两秒,切换一次;继续按住,状态保持;充分松手再长按,允许第二次切换。还可以分两次各触摸约半秒,中间明确松手,确认两段时间不会累加。
最后按复位键,屏幕应回到对勾。这是因为状态只保存在运行内存,没有写入持久存储。把这一点告诉使用者,可以避免断电后误以为设备仍保留上次的忙碌状态。
常见错误
如果提示找不到触摸标志对象,先检查板子是否为 V2,以及编辑器使用的固件是否支持 V2。若完全不响应,先排除只供电的 USB 线,再确认程序已写入实体板。触摸表现不稳定时,保持手指干燥并移开导电支架,不要通过反复提高灵敏度掩盖环境问题。
如果长按时持续翻转图案,检查切换后是否关闭了 armed;如果下一次怎么按都不触发,检查松手分支是否重新打开它。
安全与回退
状态牌仅用于日常提示,不承担门禁、告警或其他安全控制任务。需要恢复原项目时,重新烧录此前保存的程序即可。设备发热、进水或接口松动时先断开供电,检查硬件后再继续使用。
参考资料与转载说明
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?