pyboard 上最容易实现的就是控制板子上的LED的亮灭。电脑和pyboard 连接,按照第一章描述的登陆开发板。我们就可以在解释器中空LED 的亮灭,通过以下的指令:
- <font size="4" face="微软雅黑">>>> myled = pyb.LED(1)
- >>> myled.on()
- >>> myled.off()</font>
复制代码
上面的指令,控制LED 亮 和灭。
这一切都很好,但我们希望这个过程是自动的。用你最喜欢的文本编辑器打开该文件pyboard中的main。py文件。将下列行写入文件中。如果你是第一次接触Python,请保证下面程序中的缩进是正确的。
- <font face="微软雅黑">led = pyb.LED(2)
- while True:
- led.toggle()
- 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,以便我们可以控制每个。我们这样做是通过创建一个列表中的发光二极管列表的理解。 - <font face="微软雅黑">leds = [pyb.LED(i) for i in range(1,5)]</font>
复制代码 如果调用pyb.LED() 传入的参数不是 1,2,3,4,你将得到一个错误信息。接下来,我们将建立一个无限循环,通过每一个发光二极管,把他们开。
- <font face="微软雅黑">n = 0
- while True:
- n = (n + 1) % 4
- leds[n].toggle()
- pyb.delay(50)</font>
复制代码 这里,n跟踪当前LED和每一次的循环执行我们到下一个周期的n(%符号是一个模运算符使N 0和3之间)然后我们访问n LED和切换。如果你运行这个,你应该看到每一个发光二极管的转动,然后再次在序列。
一个问题,你会发现如果你停止脚本,然后重新启动它,LED被困在从以前的运行,破坏了我们精心设计的迪斯科。我们可以把所有的灯关闭时,我们初始化脚本,然后使用try/finally块修复。当你按Ctrl-C,micropython产生vcpinterrupt例外。异常通常意味着一些错误,你可以使用一个尝试:命令“捕捉”一个例外。在这种情况下,它只是用户中断的剧本,所以我们不需要捕获错误,只是告诉micropython做什么当我们退出。最后的块是这样,我们用它来确保所有的发光二极管是关闭。完整的代码是: - <font face="微软雅黑">leds = [pyb.LED(i) for i in range(1,5)]
- for l in leds:
- l.off()
- n = 0
- try:
- while True:
- n = (n + 1) % 4
- leds[n].toggle()
- pyb.delay(50)
- finally:
- for l in leds:
- l.off()</font>
复制代码
4.2 特殊的LED
蓝色发光二极管是特别的。以及把它和关闭,您可以使用intensity()强度控制方法。这需要一个数字在0和255之间,确定它是多么明亮。下面的脚本使蓝色发光二极管逐渐亮,然后把它关掉。
- <font face="微软雅黑">led = pyb.LED(4)
- intensity = 0
- while True:
- intensity = (intensity + 1) % 255
- led.intensity(intensity)
- pyb.delay(20)
- </font>
复制代码 你可以调用intensity()在其他的LEDs,但他们只能关闭,0将它们关闭,任何其他数字最多为255,可以把它打开。
|