如何在micro:bit MakeCode中为0-3以外引脚实现on pin pressed功能及GPIO作按钮
在micro:bit MakeCode中为非0-3引脚实现「on pin pressed」功能的方法
核心逻辑
「on pin pressed」的本质是引脚电平变化检测+消抖,非0-3引脚无法直接使用官方封装块,但可以通过手动配置引脚拉取模式+软件消抖来复刻相同效果。
具体实现步骤
1. 配置引脚拉取模式
根据按钮接线方式,用set pull pin块设置对应引脚的拉取模式:
- 按钮一端接引脚、另一端接地:选择上拉(引脚默认输出高电平,按下按钮后电平变低)
- 按钮一端接引脚、另一端接3V:选择下拉(引脚默认输出低电平,按下按钮后电平变高)
2. 实现带消抖的电平检测
通过forever循环持续检测引脚电平,配合计时器实现消抖(避免按钮机械抖动导致多次触发):
图形块示例
- 初始化变量
last_trigger_time并设为0 - 在
forever块内:- 用
if块判断引脚电平(比如上拉模式下判断pin P4 is low,代表按钮按下) - 嵌套
if块判断running time() - last_trigger_time > 200(200ms为消抖阈值,可按需调整) - 满足条件时执行响应逻辑(如显示图标),同时更新
last_trigger_time为当前运行时间
- 用
JavaScript示例
let lastTriggerTime = 0 // 配置P4引脚为上拉模式(适配按钮接GND的场景) pins.setPull(DigitalPin.P4, PinPullMode.PullUp) basic.forever(() => { // 检测按钮按下(电平变低) if (pins.digitalReadPin(DigitalPin.P4) === 0) { // 消抖判断:距离上次触发超过200ms才执行逻辑 if (input.runningTime() - lastTriggerTime > 200) { // 自定义响应逻辑:比如显示心形图标 basic.showIcon(IconNames.Heart) lastTriggerTime = input.runningTime() } } else { // 按钮松开时的逻辑:比如清空屏幕 basic.clearScreen() } })
注意事项
- 消抖阈值可根据按钮质量调整,通常100-300ms即可有效过滤抖动
- 务必避免引脚悬空,否则会出现随机误触发
- 所有GPIO引脚(包括非0-3)的输入能力一致,配置正确后可稳定用作按钮输入
内容的提问来源于stack exchange,提问作者Library Seph
相关产品推荐
相关产品推荐

