内容简介:在可以看出
在 上一节 的教程里,我们学习了如何使用 Micro:bit 在线编程网站提供的选择、循环、按钮事件和游戏精灵模块实现一个简单的模拟传球小程序,这回我们来学习一下如何使用 Micro:bit 的重力模块,用它实现一个重力控制上下左右滑动的 LED,相当于一个水平仪。这节教程将会有 3 种水平仪的实现,分别是敏捷版、智障版和优化版,从简单到复杂,我们可以从中体会不同的实现带来的不同效果。
敏捷版
智障版
优化版
可以看出
-
敏捷版最灵敏,基本上是跟随鼠标移动的方向(实际上是板子的倾斜方向)进行移动
-
智障版就很智障了,只能动一下挪一下,感觉特别懒
-
优化版介于敏捷版和智障版之间,能跟随重力方向自动移动,并且加上了一定延迟,使得 led 的变化更加自然
3 轴传感器
Micro:bit 板子上集成了一个 3 轴传感器,水平方向 (按钮 A 到 按钮 B) 的方向为 X 轴,垂直方向 ( 徽标(徽标就是那个椭圆形中间两个小点点像个娃娃头一样的) 到 引脚孔 2) 为 Y 轴,垂直穿过板子为 Z 轴,每个轴的加速度范围都是 -1024 到 1024,具体方向见下图
今天的这篇教程不涉及 Z 轴,只关心 X 轴和 Y 轴。水平放置板子,徽标朝上时,两个方向的加速度分别是 X = 0, Y = 0,在模拟器中,默认状态就相当于水平放置板子,即徽标朝向屏幕外,正对你。
基本原理
-
当板子水平倾斜时,会有一个 X 方向的加速度,当从按钮 A 向 按钮 B 倾斜,X 方向加速度为 正值,即大于零的值,0~1024,当从按钮 B 向 按钮 A倾斜,X 方向加速度为负值,即小于零的值,-1024~0,为了便于计算,我们给 X 方向的加速度值加上 1024,使范围变为 0~2048,这样就不用考虑负值的情况了
-
当板子垂直倾斜时,会有一个 Y 方向的加速度,当从 徽标 向 引脚孔 2 倾斜,Y 方向加速度为 正,0~1024,当从 引脚孔 2 向 徽标 倾斜,Y 方向加速度为负值,-1024~0,同样的,我们给 Y 方向的加速度值加上 1024,使范围变为 0~2048。
-
当板子同时向 水平方向 和 垂直方向 倾斜时,既有 X 方向 也有 Y 方向的加速度
-
当板子倾斜时,加速度会一直存在,直到板子被水平放置
敏捷版
敏捷版的思路比较简单,我们会用到 输入 分类下的 加速度值 模块,它提供了读取 3 轴方向上的加速度值的能力,我们可以把 X 轴的加速度和 Y 轴的加速度换算成 LED 灯阵的坐标,这样就可以控制 LED 灯来回跑啦。
解释如下:
-
给 X 和 Y 方向的加速度 加 1024,换算成正值,范围变成 0 ~ 2048
-
由于 X 和 Y 方向只有 5 个 LED,需要换算坐标,用 2048 / 5 约等于 410,所以用 2048 / 410 向下取整(10/3=3.3333 向下取整为 3,向上取整为 4)后得到 0、1、2、3、4 这 5 个整数
实现如下:
-
当开机时,在 (2,2) 处创建一个精灵
-
无限循环读取 X 方向的加速度,加 1024 后除以 410,得到的结果用来改变精灵的 X 坐标
-
无限循环读取 Y 方向的加速度,加 1024 后除以 410,得到的结果用来改变精灵的 Y 坐标
是不是很简单呀
智障版
实现智障版需要用到 4 个事件,位于 输入 分类下的 当振动 事件,我们会用到的是 当徽标朝上 当徽标朝下 当向左倾斜 和 当向右倾斜 这 4 个事件
解释如下:
-
当徽标朝上即水平放置板子后,向上倾斜板子,也就是徽标一端翘起,此时 Y 方向加速度为正
-
当徽标朝上即水平放置板子后,向下倾斜板子,也就是有引脚孔的一端翘起,此时 Y 方向加速度为负
-
当向左倾斜即水平放置板子后,向左倾斜板子,也就是按钮 B 所在的一端翘起,此时 X 方向加速度为负
-
当向右倾斜即水平放置板子后,向右倾斜板子,也就是按钮 A 所在的一端翘起,此时 X 方向加速度为正
实现如下:
-
当开机时,在 (2,2) 处创建一个精灵
-
当徽标朝上精灵的 Y 坐标 加 1
-
当徽标朝下精灵的 Y 坐标 减 1 (加 -1)
-
当向左倾斜精灵的 X 坐标 减 1 (加 -1)
-
当向右倾斜精灵的 X 坐标 加 1
但是这个有个缺点,就是每次都要移动一次板子才能触发事件,也就是向左移动一次板子,精灵向左移动 1 步,其他方向同理,下面我们看看优化版。
优化版
为了达到精灵自动移动的效果,我们需要用到循环,时刻检测板子在 X Y 方向上的加速度,并控制精灵向该方向自动移动,为了精灵不至于移动太快,我加上了一个 500 毫秒的延迟,同时为了降低灵敏度,使得板子倾斜一定程度精灵才移动,因此我加上了阈值,300 (反方向移动为 -300)。
实现如下:
-
当开机时,在 (2,2) 处创建一个精灵
-
创建1个循环,判断 X 方向的加速度值,如果大于 300,则让精灵的 X 坐标 加 1,暂停 500 毫秒
-
创建1个循环,判断 X 方向的加速度值,如果小于 -300,则让精灵的 X 坐标 减 1 (加 -1),暂停 500 毫秒
-
创建1个循环,判断 Y 方向的加速度值,如果大于 300,则让精灵的 Y 坐标 加 1,暂停 500 毫秒
-
创建1个循环,判断 Y 方向的加速度值,如果小于 -300,则让精灵的 Y 坐标 减 1 (加 -1),暂停 500 毫秒
这样就可以让 精灵 自动向倾斜方向移动啦
博主为你专属推荐
-
BBC micro:bit 编程入门开发板 microbit 图形化Phython编程
Price: ¥ 128.00
-
适用于bbc micro:bit(excl micro:bit)MOVE 迷你车铃套件
Price: ¥ 287.11
-
爱上micro:bit互动入门套件 microbit编程入门开发板 Python 编程器
Price: ¥ 380.00
练习题
改变优化版中 阈值 300 和 延迟 500 毫秒的数值,体会这两个值不同数值下的效果。
有问题可以在微信公众号中给我发消息呦。
始发于微信公众号: 暴王不暴燥
以上所述就是小编给大家介绍的《Micro:bit 重力控制水平仪》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。