1. 文档中心
  2. 比卜创造 Micro:bit
  3. Python
  4. 运动

运动

你的 micro:bit 带有加速度计,可测量三个方向上的运动:

  • X — 左右倾斜
  • Y — 前后倾斜
  • Z — 上下移动

每个轴都有对应方法,返回正数或负数,单位是 milli-g(毫 g)。读数为 0 表示该轴方向「水平」。

简易水平仪

例如用 get_x 测量 X 轴是否水平:

from bibo import *

while True:
    reading = accelerometer.get_x()
    if reading > 20:
        display.show("R")
    elif reading < -20:
        display.show("L")
    else:
        display.show("-")

平放 micro:bit 时应显示 -;向左或向右倾斜则分别显示 L 和 R。

程序需要持续响应变化,所以用无限 while 循环。循环里先把 X 轴读数存进 reading。加速度计很灵敏,这里把「水平」定在 ±20 以内,因此用 > 20 和 < -20 判断左右;否则显示 -。

Y 轴有 get_y,Z 轴有 get_z。

手机能根据方向旋转屏幕,靠的也是加速度计——和游戏手柄里用来控制方向的传感器是同一类原理。

音乐大乱斗

BiBoPython 在 micro:bit 上的一大乐趣,是把不同能力串联起来。例如把它变成(某种)乐器。

若使用外接扬声器,可像 音乐 教程那样,用鳄鱼夹把 pin 0 和 GND 接到扬声器正负极(接扬声器时不分正负)。也可以直接用 micro:bit 内置扬声器。

外接扬声器接线示意
外接扬声器接线示意

若把加速度计的读数当作音高会怎样?试试看:

from bibo import *
import music

while True:
    music.pitch(accelerometer.get_y(), 10)

关键就在最后一行:把 Y 轴读数嵌套进 music.pitch 作为频率,每个音只持续 10 毫秒,这样倾斜时音高变化很快。无限循环让程序一直跟着 Y 轴变化走。

前后倾斜 micro:bit,Y 轴读数为正时,音高会随之改变。

想象一整排 micro:bit 组成「管弦乐队」——能「演奏」出曲调吗?你会怎样改进程序,让声音更「像音乐」?

你已学完本批基础教程。加速度计还能识别摇晃、自由落体等手势——那是另一套很有意思的玩法。