Day 17 ( 中级 ) 灯光绕圈圈 ( 数字函式 )

灯光绕圈圈 ( 数字函式 )

教学原文参考:灯光绕圈圈 ( 数字函式 )

这篇文章会介绍如何使用「函式」、「逻辑判断」、「重复无限次」、「变数」、「点亮」、「加减乘除」等积木,做出计算亮灯数量,并让灯光在 micro:bit LED 外围绕圈圈的光线效果。

相关文章参考:重复无限次函式变数点亮逻辑判断加减乘除

积木程序原理

有别於「灯光绕圈圈 ( 座标 )」是使用座标的方式绕圈,这边要建立一个「灯数」的函式来进行绕圈,开始前先定义每个灯的数字,最外圈总共有 16 个灯,从左上开始顺时针绕一圈,定义 1~16 的数字

micro:bit - 灯光绕圈圈 ( 数字函式 )

因为 micro:bit 是以每个 LED 的「座标」来亮灯,所以如果要使用「灯数」,最後仍然必须转换为座标的方式,转换公式如下 ( 灯数以 num 表示 ):

灯数 x y
1~5 num - 1 0
6~8 4 num - 5
9~13 13 - num 4
13~16 0 17-num

micro:bit - 灯光绕圈圈 ( 数字函式 )

了解原理後,开始实作程序积木,首先建立一个函式,函式名称命名为「灯数」,并在函式里加入一个 num 的变数

micro:bit - 灯光绕圈圈 ( 数字函式 )

函式建立後,按照之前灯数和 xy 座标的定义,使用逻辑判断、变数、加减乘除积木,组合成下图的程序。

micro:bit - 灯光绕圈圈 ( 数字函式 )

最後要进行执行函式点亮 LED 灯的程序:

  • 当启动时,建立一个变数 a,并将 a 设定为 0。
  • 在重复无限次积木里,每次重复时将变数 a 的数值增加 1,并呼叫函式
  • 函式根据变数 a 的数值,点亮指定的灯。
  • 每次重复暂停 100 毫秒。

micro:bit - 灯光绕圈圈 ( 数字函式 )

完成後,重新启动 micro:bit,就会看见灯光绕着外圈依序亮起。

micro:bit - 灯光绕圈圈 ( 数字函式 )

如果只要让单一颗灯亮起,不要所有灯都亮,可以透过修改函式着手,将滑鼠移到函式积木上方,按下右键,点选「编辑函式」。

micro:bit - 灯光绕圈圈 ( 数字函式 )

点选上方「布林值」按钮,替函式增加布林值的参数,并将名称命名为「亮灯」。

教学参考:函式参数

micro:bit - 灯光绕圈圈 ( 数字函式 )

修改函式积木,在最下方新增逻辑判断,判断「如果亮灯等於 true,就点亮这个座标的灯」,「如果亮灯等於 false,就熄灭这个座标的灯」。

micro:bit - 灯光绕圈圈 ( 数字函式 )

最後修改重复无限次积木,加入「呼叫灯数」函式,灯数设定为 a - 1,并将亮灯设为 flase,就能将前一颗灯熄灭,接着放入一个逻辑判断,判断如果 a 大於 16,就让 a 从 1 开始

micro:bit - 灯光绕圈圈 ( 数字函式 )

完成後,重新启动 micro:bit,就会看到一颗灯不断绕着画面转圈。

micro:bit - 灯光绕圈圈 ( 数字函式 )

范例解答

范例解答:灯光绕圈圈 ( 数字函式 )

延伸练习

如果已经熟悉了灯光绕圈圈 ( 数字函式 ) 的原理,还可以尝试更多好玩的作法:

  • 尝试让 LED 从另外一个方向 ( 逆时针 ) 绕圈圈 ( 解答 )。

关於我

大家好,我是 OXXO,是个即将迈入中年的斜杠青年,如果对我有点兴趣(笑,可以与我联系,一起来做点有玩又有创意的东西吧!


<<:  [Day03]程序菜鸟自学C++资料结构演算法 – 常见的线性串列其一:阵列Array List

>>:  Day 17 移除照片中的人物

各种无用的Guide与设计模式

(「哪些Guide与设计模式是无用的?」「全部!」) 「设计模式 Design Patten」 这东...

Leetcode: 114. Flatten Binary Tree to Linked List | 含C++笔记

把二元树展开成linked list,而且顺序要跟preorder traversal一样,三种tr...

Day27 - 轻前端 Component - jQuery UI DatePicker

这篇要做的:把订单日期改用 jQuery UI DatePicker + vue component...

Day24:今天我们来聊一下SQL Injection

SQL Injection是攻击者控制资料驱动的Web Application和Web最常见和最具破...

{CMoney战斗营} 的第十五周 # NoSql

目前最常被开发者使用的资料库系统为关联式资料 NoSQL: 全名为「Not only SQL」,也就...