图片

如果您仅有一个 5x5 网格的红色 LED(发光二极管 - 在设备正面发光的东西),那么 MicroPython 与您一样擅长艺术。MicroPython 为您提供了对显示的大量控制,因此您可以创建各种有趣的效果。

MicroPython 带有许多内置图片,可在显示屏上显示。例如,要使设备看起来很开心,请键入:

from microbit import *
display.show(Image.HAPPY)

我怀疑你能记住第一行是做什么的。第二行将 display 对象用于 show内置图像。我们要显示的快乐图像是Image对象的一部分,称为HAPPY。我们 show 通过将它放在括号 (())之间来告诉 使用它。

../_images/happy.png

这是内置图像的列表:

  • Image.HEART
  • Image.HEART_SMALL
  • Image.HAPPY
  • Image.SMILE
  • Image.SAD
  • Image.CONFUSED
  • Image.ANGRY
  • Image.ASLEEP
  • Image.SURPRISED
  • Image.SILLY
  • Image.FABULOUS
  • Image.MEH
  • Image.YES
  • Image.NO
  • Image.CLOCK12, Image.CLOCK11, Image.CLOCK10, Image.CLOCK9, Image.CLOCK8, Image.CLOCK7, Image.CLOCK6, Image.CLOCK5, Image.CLOCK4, Image.CLOCK3, Image.CLOCK2, Image.CLOCK1
  • Image.ARROW_N, Image.ARROW_NE, Image.ARROW_E, Image.ARROW_SE, Image.ARROW_S, Image.ARROW_SW, Image.ARROW_W, Image.ARROW_NW
  • Image.TRIANGLE
  • Image.TRIANGLE_LEFT
  • Image.CHESSBOARD
  • Image.DIAMOND
  • Image.DIAMOND_SMALL
  • Image.SQUARE
  • Image.SQUARE_SMALL
  • Image.RABBIT
  • Image.COW
  • Image.MUSIC_CROTCHET
  • Image.MUSIC_QUAVER
  • Image.MUSIC_QUAVERS
  • Image.PITCHFORK
  • Image.XMAS
  • Image.PACMAN
  • Image.TARGET
  • Image.TSHIRT
  • Image.ROLLERSKATE
  • Image.DUCK
  • Image.HOUSE
  • Image.TORTOISE
  • Image.BUTTERFLY
  • Image.STICKFIGURE
  • Image.GHOST
  • Image.SWORD
  • Image.GIRAFFE
  • Image.SKULL
  • Image.UMBRELLA
  • Image.SNAKE
  • Image.SCISSORS

有相当多!为什么不修改使 micro:bit 看起来很高兴看到其他一些内置图像的代码呢?(只需替换 Image.HAPPY 上面列出的内置图像之一。)

DIY图像

当然,您想制作自己的图像显示在micro:bit上,对吗?

这很容易。

物理显示器上的每个 LED 像素都可以设置为十个值之一。如果像素设置为0(零),则它关闭。它实际上具有零亮度。但是,如果设置为 ,9则它处于最亮的水平。的值 1 ,以 8代表关(之间的亮度水平0上)和全(9)。

有了这些信息,就可以创建像这样的新图像:

from microbit import *

boat = Image("05050:"
             "05050:"
             "05050:"
             "99999:"
             "09990")

display.show(boat)

(运行时,设备应该显示一艘老式的“蓝彼得”帆船,其桅杆比船体更暗。)

你知道怎么画画了吗?您是否注意到物理显示的每一行都由一行以双引号结尾: 和括起来的数字表示"?每个数字指定一个亮度。有五行五个数字,因此可以为物理显示器上五行中每行的五个像素中的每一个指定单独的亮度。这就是创建新图像的方法。

简单的!

事实上,你不需要把它写成几行。如果你认为你可以跟踪每一行,你可以像这样重写它:

boat = Image("05050:05050:05050:99999:09990")

动画片

静态图像很有趣,但让它们移动更有趣。使用 MicroPython 也非常简单~只需使用图像列表即可!

这是一个购物清单:

Eggs
Bacon
Tomatoes

以下是您在 Python 中表示此列表的方式:

shopping = ["Eggs", "Bacon", "Tomatoes" ]

我只是创建了一个名为的列表shopping ,它包含三个项目。Python 知道它是一个列表,因为它包含在方括号 ([]) 中。列表中的项目由逗号 (,)分隔,在本例中,项目是三个字符串:"Eggs", "Bacon""Tomatoes"。我们知道它们是字符串,因为它们用引号括起来 "

您可以使用 Python 将任何内容存储在列表中。这是一个数字列表:

primes = [2, 3, 5, 7, 11, 13, 17, 19]

笔记

数字不需要被引用,因为它们代表一个值(而不是字符串)。它是2(数值 2)和"2"(代表数字 2 的字符/数字)之间的差异。如果这现在没有意义,请不要担心。你很快就会习惯的。

甚至可以在同一个列表中存储不同种类的东西:

mixed_up_list = ["hello!", 1.234, Image.HAPPY]

注意到最后一项了吗?这是一个图像!

我们可以告诉 MicroPython 为图像列表设置动画。幸运的是,我们已经内置了几个图像列表。它们被称为 Image.ALL_CLOCKSImage.ALL_ARROWS:

from microbit import *

display.show(Image.ALL_CLOCKS, loop=True, delay=100)

与单个图像一样,我们使用display.show它在设备的显示屏上显示。然而,我们告诉 MicroPython 使用Image.ALL_CLOCKS 它,它明白它需要一个接一个地显示列表中的每个图像。我们还告诉 MicroPython 通过说loop=True. 此外,我们告诉它我们希望每个图像之间的延迟仅为 100 毫秒(十分之一秒),参数为 delay=100

你能弄清楚如何在Image.ALL_ARROWS列表上设置动画吗?你如何避免循环永远(提示:相反TrueFalse虽然默认值loopFalse)?你能改变动画的速度吗?

最后,这里是如何创建自己的动画。在我的示例中,我将让我的船沉入显示器的底部:

from microbit import *

boat1 = Image("05050:"
              "05050:"
              "05050:"
              "99999:"
              "09990")

boat2 = Image("00000:"
              "05050:"
              "05050:"
              "05050:"
              "99999")

boat3 = Image("00000:"
              "00000:"
              "05050:"
              "05050:"
              "05050")

boat4 = Image("00000:"
              "00000:"
              "00000:"
              "05050:"
              "05050")

boat5 = Image("00000:"
              "00000:"
              "00000:"
              "00000:"
              "05050")

boat6 = Image("00000:"
              "00000:"
              "00000:"
              "00000:"
              "00000")

all_boats = [boat1, boat2, boat3, boat4, boat5, boat6]
display.show(all_boats, delay=200)

下面是代码的工作原理:

  • boat 以与上述完全相同的方式创建了六个图像。
  • 然后,我将它们全部放入我称为 的列表中all_boats.
  • 最后,我要求display.show 以 200 毫秒的延迟对列表进行动画处理。
  • 因为我没有设置 loop=True船只会下沉一次(从而使我的动画科学准确)。:-)

你会动画什么?你能动画特效吗?您如何使图像淡出然后再次淡入?