移动

BBC micro:bit上有一个加速计。它测量沿以下三个轴的运动:

  • X轴-左右倾斜;
  • Y轴-前后倾斜;
  • Z轴-上下移动。

每个轴有一个算法返回一个正数或负数,表示以千分之一g(重力)【milli-g】为单位的测量值。 当读数为0时,该轴为 “level” (水平)状态。

比如,下面有个非常简单的水平仪运用 get_x 来测量该设备沿X轴的水平程度:

from microbit import *

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

把设备放平,它应显示 - ; 而向左或向右旋转它将分别显示 LR

我们希望设备不断地对变化做出反应,因此用了永久 while 循环。 在循环体内 第一件事是对沿X轴的一个测量,称为 reading。由于加速度计非常敏感,所以我设置了水平方向 +/-20 的范围。据此, ifelif 条件检查条件为 > 20< -20else 语句的意思是如果 reading 的值在-20和20之间,我们视之为水平。对于这些条件下的每个情况,显示屏上都会显示相应的字符。

同样的,Y轴有方法 get_y ;Z轴也有方法 get_z

如果您曾想知道手机是怎么知道如何正确显示图像的,这是由于它使用的加速度计与上述程序完全相同。游戏控制器同样包含可以帮助你操纵或移动的加速计。

“乐器”

MicroPython在BBC micro:bit的运用中最棒的一点是它可以让人很容易地将设备的不同功能联系在一起。 例如,我们可以把它变成一种乐器(多种多样)。

正如你在教程中音乐部分所做的那样,连接一个扬声器,把鳄鱼夹分别将引脚0和GND连接到扬声器的正负极-连接扬声器的方式没有要求。

../_images/pin0-gnd.png

如果我们从加速度计读取数据并将其作为音调播放,会发生什么?我们一起来看下:

from microbit import *
import music

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

最后一行很关键也很简单。我们将Y轴的返回值做了 嵌套 ,和 music.pitch 方法的频率用法相同。我们只让它播放10毫秒,是因为希望音调随着设备倾斜而快速变化。由于设置了永久 while 循环,随着Y轴测量值的变化,该设备会不断做出反应。

就是这样!

使设备前后倾斜,如果沿着Y轴的读数是正值,它将改变由micro:bit播放的音调高低。

想象一下由这些设备组成一个交响乐团的情况。你会调音吗? 你将如何改进这个程序,使得micro:bit生成的音乐更加优美呢?