4. 打开 LED 和 Python 的基本概念

在 pyboard 上做的最简单的事情是打开连接到板上的 LED。连接电路板,并按照教程 1 中的说明登录。我们将首先打开解释器中的 LED,然后键入以下内容

>>> myled = pyb.LED(1)
>>> myled.on()
>>> myled.off()

这些命令打开和关闭 LED。

这一切都很好,但我们希望这个过程是自动化的。在您喜欢的文本编辑器中打开 pyboard 上的文件 MAIN.PY。将以下行写入或粘贴到文件中。如果您是 Python 新手,请确保缩进正确,因为这很重要!

led = pyb.LED(2)
while True:
    led.toggle()
    pyb.delay(1000)

保存时,pyboard 上的红灯应亮起约一秒钟。要运行脚本,请执行软重置 (CTRL-D)。然后 pyboard 将重新启动,您应该会看到绿灯持续闪烁。成功,迈出建立邪恶机器人大军之路的第一步!当您厌倦了烦人的闪光灯时,请在终端上按 CTRL-C 以停止运行。

那么这段代码有什么作用呢?首先我们需要一些术语。Python 是一种面向对象的语言,python 中几乎所有东西都是一个类,当你创建一个类的实例时,你会得到一个对象。类具有与之关联的方法。方法(也称为成员函数)用于与对象交互或控制对象。

第一行代码创建了一个 LED 对象,我们将其命名为 led。当我们创建对象时,它需要一个必须在 1 到 4 之间的参数,对应于板上的 4 个 LED。pyb.LED 类具有我们将使用的三个重要成员函数:on()、off() 和 toggle()。我们使用的另一个函数是 pyb.delay() 它只是等待给定的时间(以毫秒为单位)。一旦我们创建了 LED 对象,语句 while True: 创建一个无限循环,在打开和关闭之间切换 LED 并等待 1 秒。

练习:尝试更改切换 LED 和打开不同 LED 之间的时间。

练习:直接连接到pyboard,创建一个pyb.LED对象并使用on()方法打开它。

4.1. pyboard 上的 Disco

到目前为止,我们只使用了一个 LED,但 pyboard 有 4 个可用。让我们首先为每个 LED 创建一个对象,以便我们可以控制它们中的每一个。我们通过创建具有列表理解的 LED 列表来做到这一点。

leds = [pyb.LED(i) for i in range(1,5)]

如果您使用不是 1,2,3,4 的数字调用 pyb.LED() ,您将收到一条错误消息。接下来,我们将设置一个无限循环,循环打开和关闭每个 LED。

n = 0
while True:
  n = (n + 1) % 4
  leds[n].toggle()
  pyb.delay(50)

这里,n 跟踪当前 LED,每次执行循环时,我们都会循环到下一个 n(% 符号是一个模数运算符,它将 n 保持在 0 和 3 之间。)然后我们访问第 n 个 LED 并切换它。如果您运行此程序,您应该看到每个 LED 依次亮起,然后全部再次熄灭。

您可能会发现的一个问题是,如果您停止脚本然后再次启动它,LED 会在上次运行时一直亮着,这会破坏我们精心编排的迪斯科舞厅。我们可以通过在初始化脚本时关闭所有 LED 然后使用 try/finally 块来解决此问题。当您按下 CTRL-C 时,MicroPython 会生成一个 VCPInterrupt 异常。异常通常意味着出现问题,您可以使用 try: 命令来“捕获”异常。在这种情况下,只是用户中断了脚本,因此我们不需要捕获错误,只需告诉 MicroPython 在退出时要做什么。finally 块执行此操作,我们使用它来确保所有 LED 都关闭。完整代码是:

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()

4.2. 特殊 LED

黄色和蓝色 LED 很特别。除了打开和关闭它们,您还可以使用 Intensity() 方法控制它们的强度。这需要一个 0 到 255 之间的数字来确定它的亮度。以下脚本使蓝色 LED 逐渐变亮,然后再次将其关闭。

led = pyb.LED(4)
intensity = 0
while True:
    intensity = (intensity + 1) % 255
    led.intensity(intensity)
    pyb.delay(20)

您可以在 LED 1 和 2 上调用强度(),但它们只能关闭或打开。0 将它们关闭,任何其他高达 255 的数字将它们打开。