4872|3

424

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【翻译】Micropy 官方教程 04 点亮LEDS及python 简要概念 [复制链接]

 
本帖最后由 我的学号 于 2016-4-23 13:14 编辑

4.点亮LEDS及python 简要概念
pyboard 板上最容易实现的事情莫过于点亮板上附带的小灯。连接开发板,按照上篇教程中提到的登录方法,就可与在解释器中开始点亮 LED 灯了,代码如下:
  1. >>> myled = pyb.LED(1)
  2. >>> myled.on()
  3. >>> myled.off()
复制代码

这些命令将控制 LED 的亮和灭。
这种方式不错,不过我们将尝试让其更智能化。在你擅长的文本编辑器里打开 pyboard 里边的 MAIN.PY 文件,写入或粘贴如下的代码。如果你是 python 新手,那么希望从此开始你能对 python 有正确的认识印象。
  1. led = pyb.LED(2)
  2. while True:
  3.     led.toggle()
  4.     pyb.delay(1000)
复制代码

当你保存了文件后,pyboard 上的红色 LED 将在约一秒后亮起。为运行脚本程序,先以 CTRL -D 进行软件复位。pyboard 将被重启且能够看到绿色的 LED 持续闪烁。至此先恭喜你在“the army of evil robot”的路途上迈出了重要的一步!当需要关闭烦人的闪灯时,直接在终端界面按下 CLRT -C 即可。

到目前为止代码做了什么事情呢?首先我们需要引用一些术语。Python 是一门面向对象语言(object-oriented),pyhon 中一切几乎都是类(class)和通过声明得到的类的对象(object)。通过方法(methods,也称为成员函数)我们连接类,并和对象相交互或者控制它。
程序的第一行我们通过实例化了LED对象并命名为led。当这个对象被创建时,它唯一的参数必须在1和4之间,与开发板上四颗LED相呼应。pyb.LED这个类有三个我们使用的重要成员函数:on( ), off( ) 以及 toggle( )。另一个使用到的函数pyb.delay( ) 仅是一个简单的毫秒级别的延时。一旦我们创建了 LED 对象,while True 这个 声明将创建一个无限循环等待一秒时间的 led亮灭翻转

练习: 尝试改变 LED 的翻转亮灭时间或者翻转其他 LED 灯
练习:直接连接 pyboar d开发板,创建一个 pby.LED 对象并使用 on( )的方法点亮灯

4.1 在 pyboard 板上跳迪斯科(disco)
到目前我们使用了板上的单颗 LED 灯而实际上总共有四颗可供使用。我们可以为每颗 LED 灯创建一个对象并分别控制它们。我们将声明一个便于理解的列表(list)形式:
  1. leds = [pyb.LED(i) for i in range(1,5)]
复制代码

如果没有用 1,2,3,4 的数字作为 pyb.LED( ) 的形参,我们将会得到错误的信息。接下来我们将添加每个 LED 亮灭的无限循环:
  1. n = 0
  2. while True:
  3.   n = (n + 1) % 4
  4.   leds[n].toggle()
  5.   pyb.delay(50)
复制代码

在这里,n 代表了当前的 LED 且每次循环执行后我们可以得到下一个 n 的值(求余符号%保证了 n 的值在0和3之间)。然后我们就可以控制第 n 颗 led 灯的翻转亮灭了。执行该程序将可见一排的 led 同时亮和灭。

你可能会发现一旦停下当前脚本的运行并重新启动,开发板上的 LED 灯将从之前运行的状态突然进入到我们精心设计的迪斯科。可以通过在脚本初始化时关闭所有的 LED 灯并使用  try/finally 块的方式解决这个问题。当打入 CTRL-C,MicroPython 将产生一个 VCP 中断异常。异常通常意味着某些不对劲的东西,所以你可以通过 try:command 指令“抓取”一个异常。这种情况属于用户打断了脚本的运行,所以我们不需要抓取错误而是简单告诉 MicroPython 当我们退出时要做些什么。最终的程序块如下所示,且我们确保了所有的 LED灯 熄灭。完整的代码如下所示:
  1. leds = [pyb.LED(i) for i in range(1,5)]
  2. for l in leds:
  3.     l.off()

  4. n = 0try:
  5.    while True:
  6.       n = (n + 1) % 4
  7.       leds[n].toggle()
  8.       pyb.delay(50)
  9. finally:
  10.     for l in leds:
  11.         l.off()
复制代码


4.2 特殊的第四颗灯
蓝色的LED 灯比较特别。可以在让其亮灭的同时通过 iniensity( ) 的方法控制其亮度。其亮度值在 0 到 255 的值间决定。以下的脚本实现了蓝色的LED循环渐亮然后熄灭的功能。
  1. led = pyb.LED(4)
  2. intensity = 0
  3. while True:
  4.     intensity = (intensity + 1) % 255
  5.     led.intensity(intensity)
  6.     pyb.delay(20)
复制代码

你可以对其他LED灯调用 instensity( ) 的方法不过其只能被熄灭或被点亮。0 值将使之熄灭而最多到达255的其他值只能点亮该LED。

最新回复

4.1第三段代码 05行应该是n=0 06行是try:  详情 回复 发表于 2018-4-21 15:12
点赞 关注
个人签名君应有语,渺万里层云,千山暮雪,知向谁边?
 
 

回复
举报

2721

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
最后一个代码感觉for循环比较好
 
 
 

回复

831

帖子

5

TA的资源

一粒金砂(高级)

板凳
 
4.1第三段代码 05行应该是n=0 06行是try:

点评

感谢提醒,断行有问题,再重新编辑一下:  详情 回复 发表于 2018-6-13 13:19
 
 
 

回复

424

帖子

1

TA的资源

一粒金砂(高级)

4
 
残雪 发表于 2018-4-21 15:12
4.1第三段代码 05行应该是n=0 06行是try:

感谢提醒,断行有问题,再重新编辑一下:
  1. leds = [pyb.LED(i) for i in range(1,5)]
  2. for l in leds:
  3.     l.off()

  4. n = 0
  5. try:
  6.    while True:
  7.       n = (n + 1) % 4
  8.       leds[n].toggle()
  9.       pyb.delay(50)
  10. finally:
  11.     for l in leds:
  12.         l.off()
复制代码
个人签名君应有语,渺万里层云,千山暮雪,知向谁边?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表