Skip to main content

流水灯

前言

通过上一节点亮LED灯的学习,我们已经对micropython的编程有了初步的了解,这一节来做一个功能稍微复杂一点的实验,流水灯。流水灯也叫跑马灯,也就是让几个LED来回亮灭,达到好像流水的效果。也是单片机开发学习的典型例子。

实验目的

micropython编程实现流水灯。

实验平台

pyBoard 或 pyBoard + pyBase 开发套件。

led

led

实验讲解

pyboard上总共有4个LED,分别是LED1(红色)、LED2(绿色)、LED3(黄色)、LED4(蓝色);

上一章节我们已经学习过LED点亮,这里要实现固定时间来亮灭,需要用到延时的函数。具体如下:

LED对象

构造函数

pyb.LED(id)

LED对象位于pyb模块下:

  • id :LED编号。1-4。

使用方法

LED.off()

关闭LED


LED.on()

打开LED


LED.toggle()

翻转LED状态。


更多用法请阅读官方文档:
https://docs.01studio.cc/library/pyb.LED.html#class-led-led-object

time对象

使用time对象实现延时。

构造函数

import time

直接import使用。

使用方法

time.sleep(seconds)

秒级延时;

time.sleep_ms(ms)

毫秒级延时;

time.sleep(us)

微秒级延时;

更多用法请阅读官方文档:
https://docs.01studio.cc/library/time.html#module-time

知道了函数的使用方法后,我们可以简单的梳理一下流程,首先导入LED和time模块,程序开始先让LED2-LED4灭掉,开启循环,依次点亮每个LED,延时1秒,然后关闭。流程如下:

代码编写流程如下:

参考代码

基础写法

'''
实验名称:流水灯
版本:v1.0
作者:01Studio
'''

from pyb import LED #从pyb导入LED模块
import time

#关闭全部LED
LED(2).off()
LED(3).off()
LED(4).off()

#while True表示一直循环
while True:

#LED2亮1秒
LED(2).on()
time.sleep(1)
LED(2).off()

#LED3亮1秒
LED(3).on()
time.sleep(1)
LED(3).off()

#LED4亮1秒
LED(4).on()
time.sleep(1)
LED(4).off()

使用for循环实现

上述代码有点冗余,这里可以使用for循环来实现相关功能。

'''
实验名称:流水灯
版本:v2.0
作者:01Studio
'''

from pyb import LED #从pyb导入LED模块
import time

# 相当于for i in [2, 3, 4],LED(i).off()执行3次,分别是LED 2,3,4
for i in range(2,5):
LED(i).off()

while True:
#使用for循环
for i in range(2,5):
LED(i).on()
time.sleep(1) #延时1秒
LED(i).off()

修改后的代码一下子变得简约美观。Python作为高级语言,使用起来非常灵活,常常能通过几行代码就可以表达复杂的逻辑。我们在编程的过程中应该多思考如何优化代码,才能让自己的编程水平得到较快的提升。

实验结果

在Thonny IDE中运行上述代码:

led1

可以看到LED2、LED3、LED4循环点亮,实现流水效果。

led1

led1

led1

本节实验相对于第一节相比增加了延时函数的应用,可见MicroPython编程功能增加就是各类函数的叠加,当开发复杂功能时候,因为底层函数已经封装好,所以面向应用的开发使用起来非常方便。除此之外我们也体验了Python代码的简洁和高效,使得程序更好的阅读。