micro:bit 实验05 - 用 P0 引脚读一个自己接的按钮

« 返回 micro:bit 平台  IoT 专题

实验05:用 P0 引脚读一个自己接的按钮

这个实验做完你会得到什么

在面包板上接一个按钮到 micro:bit 的 P0 引脚,按一下,手机上的小蜜蜂就换个随机位置

前面几篇用的都是板载的东西。从这一篇开始接自己的元件 —— 引脚一旦会用,接什么传感器 都是同一套流程:配置引脚 → 订阅 → 收数据

项目 说明
难度 ★★★☆☆
用时 约 50 分钟
前置 实验01实验02

改编自 MIT 官方教程 read button status with Micro:bit I/O pins,扩展改用本站本地文件。


一、器材清单

器材 数量 说明
BBC micro:bit 1  
面包板 1  
杜邦线 3 公对公
按钮(轻触开关) 1 四脚的那种最常见
鳄鱼夹或排针转接板 micro:bit 金手指不好插面包板,建议用转接板;临时用可以把杜邦线弯成 U 形勾住大孔(0、1、2、3V、GND 那五个大孔)

二、接线

micro:bit 按钮
GND 一侧引脚
P0 另一侧引脚

按钮接 P0 的接线

四脚轻触开关的坑:四个脚里两两是内部连通的。如果按下去没反应,把其中一根线 挪到相邻的脚上再试 —— 大概率是接到了同一侧的两个脚上(那两个脚一直是导通的)。

固件:MakeCode 里加 Bluetooth 扩展 + 蓝牙IO引脚服务,打开 No Pairing Required


三、界面组件

组件 命名 关键属性
画布 画布1 宽度充满、高度 250
图像精灵 图像精灵_蜜蜂 30×30
标签 标签_引脚值 文本「引脚值:–」
Microbit_Io_Pin_Simple Microbit_Io_Pin_Simple1 不可见,BluetoothDevice = BluetoothLE1

Microbit_Io_Pin_Simple,不要用 Microbit_Io_Pin。后者要自己拼配置字节, 前者把引脚号、模拟/数字、输入/输出拆成了三个参数,好懂得多。


四、分步搭代码块

第 1 步:连上后配置 P0 为数字输入

when BluetoothLE1.Connected() {
  Microbit_Io_Pin_Simple1.ConfigurePin(0, false, true)
  Microbit_Io_Pin_Simple1.RequestPinDataUpdates()
  标签_状态.Text = "P0 已配置为数字输入"
}

中途验证:状态标签变成「P0 已配置为数字输入」。此时按按钮还没反应,正常。

ConfigurePin(引脚号, 是否模拟, 是否输入)

  • 第 1 个参数 0 就是 P0;
  • 第 2 个 false = 数字量(只有 0/1),按钮用数字;读电位器那种连续值才用 true
  • 第 3 个 true = 输入(读取)。接 LED 那种要输出的就填 false

配置必须在连接成功之后做。写在 Screen1.Initialize 里是无效的 —— 那时候还没连上。

官方教程也特意强调:必须先把引脚配成数字输入,才能正确读到它的数据

第 2 步:收到引脚数据,蜜蜂换位置

when Microbit_Io_Pin_Simple1.InputPinDataReceived(IO_Pin_Data) {
  标签_引脚值.Text = join("引脚值:", IO_Pin_Data)
  if IO_Pin_Data = 0 {
    图像精灵_蜜蜂.MoveTo(random(0, 画布1.Width - 30), random(0, 画布1.Height - 30))
  }
}

中途验证:按一下按钮,蜜蜂跳到画布上的随机位置,引脚值标签在 0 和 1 之间变化。

为什么判断 = 0 而不是 = 1:micro:bit 的引脚默认带上拉,没按下时是高电平 1, 按下接通 GND 才是 0。这跟直觉相反,是数字电路里常见的「低电平有效」。 如果你的接法是按下接 3V,那就反过来判断 = 1

第 3 步:收尾

when 按钮_断开.Click() {
  Microbit_Io_Pin_Simple1.StopPinDataUpdates()
  BluetoothLE1.Disconnect()
}

五、排错表

现象 原因与处理
引脚值一直不变 ① 没调 ConfigurePin;② 配置写在了 Initialize 里(那时还没连上),必须写在 Connected 里;③ 固件没加「蓝牙IO引脚服务」
按下去毫无反应 四脚按钮接到了内部连通的两个脚上,把一根线挪到相邻脚;或杜邦线没勾牢 micro:bit 的大孔
值一直是 0,松开也不变 按钮卡住了,或两根线短接了
一按就连续触发好几次 机械按钮抖动。在事件里加个时间间隔判断(用计时器记上次触发时刻,两次间隔小于 200 毫秒就忽略)
判断反了(松开才动) 见第 2 步说明,默认上拉是「按下为 0」
蜜蜂跑出画布 random 的上界要减去精灵宽高,写成 画布1.Width - 30

六、下一步

  • 实验06:电位器调光 —— 同一个引脚组件,改成模拟输入读连续值
  • 实验07:RGB LED —— 引脚当输出用,控制三色灯

相关文档

文档反馈