1.2. 呼吸灯

前一节中我们已经掌握从hiibot_iots.py模块中导入IoTs2类,并实例化为iots2,然后对blueLED_bright属性赋不同的值以设置IoTs2蓝色LED亮度, 或者调用函数:blueLED_toggle()控制IoTs2蓝色LED的状态切换,也能达到指示灯闪烁的目的。

这一节我们将通过编程改变LED亮度实现呼吸效果。首先看下面的示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import time
from hiibot_iots2 import IoTs2
iots2 = IoTs2()
b=1.0
while True:
    iots2.blueLED_bright = b
    b -= 0.05
    if b<0.0:
        b = 1.0
    time.sleep(0.1)

打开MU编辑器,点击“新建”按钮,并将本示例代码复制-粘贴的MU编辑器中,然后点击“保存”按钮,并在弹出的窗口中输入文件名为“code.py”, 保存文件的磁盘为“CIRCUITPY”,路径为该磁盘的根目录。一旦将code.py文件保存到IoTs2的CIRCUITPY磁盘上,IoTs2立即开始执行这个脚本程序。

仔细观察本示例程序的执行效果,感觉到IoTs2在打盹儿吗?蓝色LED灯的亮度逐渐减弱(像人的眼睛慢慢闭上),然后立即变为最亮(像突然睁开眼睛), 再逐渐变暗,如此往复。为什么有这种效果?下面我们逐行来分析每行脚本程序的效果。

示例代码分析:

  • 第1行,导入一个Python内建的模块“time”

  • 第2行,从“/CIRCUITPY/lib/hiibot_iots2.py”模块中导入“IoTs2”类

  • 第3行,将导入的“IoTs2”类实例化为一个实体对象,名叫“iots2”

  • 第4行,声明一个变量“b”,并赋值1.0

  • 第5行,开始一个无穷循环的程序块

  • 第6行(无穷循环程序块的第1行),将iots2对象的blueLED_bright属性值设置为变量b的值

  • 第7行(无穷循环程序块的第2行),将变量b的值减小0.05

  • 第8行(无穷循环程序块的第3行),判断变量b的值是否小于0.0

  • 第9行(无穷循环程序块的第4行),如果b<0.0,则b=1.0

  • 第10行(无穷循环程序块的第5行),执行time的sleep方法,参数为0.1秒(即100ms)

这个示例中,我们在无穷循环的程序块中不停地将变量b减小0.05,一直减到到b<0.0之后再把b重新赋值为1.0,如此重复, 而且每重复一次都会把b的值赋给iots2对象的blueLED_bright属性。

变量,允许在程序中改变的量!在本示例中,变量b的值顺序地取{1.0, 0.95, 0.90, .., 0.0}数据集中的一个值, 并把这个数值当作蓝色LED的亮度赋值给“iots2.blueLED_bright”属性。蓝色LED亮度的变化规律正好与数据集中的数值变化规律一致。

下面的示例程序执行结果具有特殊的医学效果:催眠。运行本示例程序时,切勿直视IoTs2的蓝色LED,直视蓝色LED太久,我们可能会被催眠!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import time
from hiibot_iots2 import IoTs2
iots2 = IoTs2()
b = 1.0
dir = 0
while True:
    iots2.blueLED_bright = b
    b += 0.05 if dir==1 else -0.05
    if b>1.0:
        b = 1.0
        dir = 0
    if b<0.0:
        b = 0.0
        dir = 1
    time.sleep(0.05)

你被催眠了吗?这个示例程序的执行效果俗称“呼吸灯”。蓝色LED的亮度从灭逐渐变为最亮,然后又逐渐灭掉,如此重复。 这样的周期如果正好与你的呼气-吸气的周期一致,据说很容易把人催眠。

这段程序能够让蓝色LED亮度随着我们呼吸节奏改变亮度,其中的关键之处是变量b的变化规律。第8~14行程序都是在增加或减少b变量的值。 你能列举出变量b取值的完全数据集?{}

你能用一句既贴切又合适的话来概括变量b的变化规律?


总结:

  • 实体对象的属性赋值

  • 变量

  • 变量赋值

  • 变量自增/自减

  • 本节中,你总计完成了15行代码的编写工作

Important

IoTs2类的blueLED属性和接口

  • blueLED_bright (属性, 可读可写, 有效值:0.0~1.0), IoTs2蓝色LED的亮度

  • blueLED_toggle (函数,无参数), 切换IoTs2蓝色LED的状态