查看: 1164|回复: 6
打印 上一主题 下一主题

MicroPython 4 点灯

[复制链接] qrcode

34

主题

38

帖子

115

积分

注册会员

Rank: 2

积分
115
楼主
跳转到指定楼层
发表于 2016-6-13 09:22 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      pyboard 上最容易实现的就是控制板子上的LED的亮灭。电脑和pyboard 连接,按照第一章描述的登陆开发板。我们就可以在解释器中空LED 的亮灭,通过以下的指令:
  1. <font size="4" face="微软雅黑">>>> myled = pyb.LED(1)
  2. >>> myled.on()
  3. >>> myled.off()</font>
复制代码

上面的指令,控制LED 亮 和灭。

      
这一切都很好,但我们希望这个过程是自动的。用你最喜欢的文本编辑器打开该文件pyboard中的main。py文件。将下列行写入文件中。如果你是第一次接触Python,请保证下面程序中的缩进是正确的。

  1. <font face="微软雅黑">led = pyb.LED(2)
  2. while True:
  3.     led.toggle()
  4.     pyb.delay(1000)</font>
复制代码
      保存之后,重新启动,在pyboard红灯应该打开约一秒钟。运行脚本,做软复位。pyboard将重新启动,你会看到一个绿色的光,不断闪烁。成功,第一步,在你的道路上建设一个邪恶的机器人军队!当你厌倦了恼人的闪烁的光然后按在你的终端Ctrl-C停止运行。
     那么这个代码是怎么做的呢?首先我们需要一些术语。Python是一种面向对象的语言,Python中的几乎所有的一切都是一个类,当你创建一个类,你会得到一个对象的一个实例。类有关联的方法。一种方法(也称为成员函数)是用来与或控制对象进行交互的。
      代码的第一行创建了一个被称为led的对象。当我们创建对象时,它需要一个单一的参数传入,它必须在1和4之间,对应于板上的4个发光二极管。有三个重要的pyb.led类的成员函数,我们将使用:on(),off()和toggle()。我们用的是PYB其他函数。delay()这只是等待一个特定的时间在毫秒。一旦我们创建对象,而真正的语句:创建一个无限循环的LED之间切换和关闭等待1秒。

      
练习:尝试改变之间切换LED转向一个不同的LED的时间。
练习:连接到pyboard直接创建一个pyb.led对象并把它运用on()方法。

4.1 pyboard

到目前为止,我们只使用了一个单LED但pyboard有4。让我们从创建一个对象的每个led,以便我们可以控制每个。我们这样做是通过创建一个列表中的发光二极管列表的理解。
  1. <font face="微软雅黑">leds = [pyb.LED(i) for i in range(1,5)]</font>
复制代码
如果调用pyb.LED() 传入的参数不是 1,2,3,4,你将得到一个错误信息。接下来,我们将建立一个无限循环,通过每一个发光二极管,把他们开。
  1. <font face="微软雅黑">n = 0
  2. while True:
  3.   n = (n + 1) % 4
  4.   leds[n].toggle()
  5.   pyb.delay(50)</font>
复制代码
这里,n跟踪当前LED和每一次的循环执行我们到下一个周期的n(%符号是一个模运算符使N 0和3之间)然后我们访问n LED和切换。如果你运行这个,你应该看到每一个发光二极管的转动,然后再次在序列。
      
     一个问题,你会发现如果你停止脚本,然后重新启动它,LED被困在从以前的运行,破坏了我们精心设计的迪斯科。我们可以把所有的灯关闭时,我们初始化脚本,然后使用try/finally块修复。当你按Ctrl-C,micropython产生vcpinterrupt例外。异常通常意味着一些错误,你可以使用一个尝试:命令“捕捉”一个例外。在这种情况下,它只是用户中断的剧本,所以我们不需要捕获错误,只是告诉micropython做什么当我们退出。最后的块是这样,我们用它来确保所有的发光二极管是关闭。完整的代码是:
  1. <font face="微软雅黑">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()</font>
复制代码

4.2 特殊的LED
       蓝色发光二极管是特别的。以及把它和关闭,您可以使用intensity()强度控制方法。这需要一个数字在0和255之间,确定它是多么明亮。下面的脚本使蓝色发光二极管逐渐亮,然后把它关掉。


  1. <font face="微软雅黑">led = pyb.LED(4)
  2. intensity = 0
  3. while True:
  4.     intensity = (intensity + 1) % 255
  5.     led.intensity(intensity)
  6.     pyb.delay(20)
  7. </font>
复制代码
你可以调用intensity()在其他的LEDs,但他们只能关闭,0将它们关闭,任何其他数字最多为255,可以把它打开。






回复

使用道具 举报

0

主题

78

帖子

10

积分

新手上路

Rank: 1

积分
10
沙发
发表于 2016-6-13 09:34 PM | 只看该作者
一看就是机器翻译的。
回复 支持 反对

使用道具 举报

0

主题

65

帖子

4

积分

新手上路

Rank: 1

积分
4
板凳
发表于 2016-6-13 11:12 PM | 只看该作者
shaoziyang 发表于 2016-6-13 21:34
一看就是机器翻译的。

对,放到百度翻译里,,,不过我做了修改的,,,
回复 支持 反对

使用道具 举报

0

主题

78

帖子

6

积分

新手上路

Rank: 1

积分
6
地板
发表于 2016-6-14 09:16 AM | 只看该作者
加分鼓励鼓励
回复 支持 反对

使用道具 举报

0

主题

95

帖子

10

积分

新手上路

Rank: 1

积分
10
5#
发表于 2016-6-14 09:29 AM | 只看该作者
灵澈 发表于 2016-6-14 09:16
加分鼓励鼓励

已经给你点赞了。。。。
回复 支持 反对

使用道具 举报

0

主题

74

帖子

16

积分

新手上路

Rank: 1

积分
16
6#
发表于 2016-6-14 01:03 PM | 只看该作者
这是什么板子,没用过呢
回复 支持 反对

使用道具 举报

274

主题

4305

帖子

8770

积分

论坛元老

Rank: 8Rank: 8

积分
8770
7#
发表于 2016-6-14 02:20 PM | 只看该作者
jiuzhou 发表于 2016-6-14 13:03
这是什么板子,没用过呢

MicroPython
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表