使用BlueFi的LCD显示器¶
BlueFi配置有一个240x240点阵的1.3英寸彩色LCD显示器,这个小显示屏的点阵密度几乎接近视网膜屏,即使采用很小的字体的情况下仍保持 字符和图案的清晰度。BlueFi处于Bootloader模式时,显示屏自动关闭。进入Python模式时,执行code.py或main.py程序时,BlueFi的 LCD显示器由用户程序掌控,停止Python代码执行或进入REPL模式,这个显示屏与串口控制台几乎完全同步。
BlueFi的LCD显示器主要有以下几种用法:
1. 作为用户程序的一种输出设备¶
这个模式下,只要code.py或main.py程序启动时,屏幕会显示一行提示:“code.py output:”(或 “main.py output:”),提醒我们 屏幕的内容都是由code.py或main.py执行结果。譬如,我们编写一个最简单的程序:
1 2 | print("hello world") print("i'am BlueFi") |
将这个输出两行文本到控制台的脚本程序保存到/CIRCUITPY/code.py文件,如果BlueFi已经与宿主计算机上MU编辑器链接好,点击“串口”按钮, 你在串口控制台的窗口中将会看到以下提示信息:
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
hello world
I’m BlueFi
Press any key to enter the REPL. Use CTRL-D to reload.
“Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.”这一行信息提示我们,BlueFi开始自动 加载用户程序(code.py),禁用REPL; “code.py output:”这一行信息表示,开始执行code.py程序,启动code.py程序时,BlueFi的Python解释器自动给出的提示信息; “hello world”和“I’m BlueFi”是我们编写的code.py程序中的两个语句所输出的结果; “Press any key to enter the REPL. Use CTRL-D to reload.”这一行信息表示,code.py程序已经执行完毕,按任意键进入REPL模式, 按“Ctrl+D”键重新执行code.py程序。
你在BlueFi的LCD屏幕上也能看到这些信息,而且完全相同。通过这个示例我们看到,BlueFi的LCD显示器相当于一个小型控制台,用户程序“print(“xxx”)” 的输出都被作为一整行显示出来,如果文本内容超过一行,并自动换行继续显示。当开始启动用户程序或执行完毕后,系统的提示信息也被显示在LCD上。
我们再来看另外一个示例,Python脚本程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 从adafruit_turtle中导入turtle画笔模块和颜色模块 from adafruit_turtle import Color, turtle # 从hiibot_bluefi的screen子模块中导入Screen模块 from hiibot_bluefi.screen import Screen # 实例化Screen模块类为screen screen = Screen() colors = [Color.ORANGE, Color.PURPLE] # 实例化turtle画笔为turtle, 并使用screen作为显示器 turtle = turtle(screen) # 落笔 turtle.pendown() # 循环200次 for x in range(200): turtle.pencolor(colors[x % 2]) turtle.forward(x) turtle.left(91) while True: pass |
看起来这个示例程序蛮长,其实并不复杂,尤其你如果使用过Scratch的画笔模块、Python的turtle模块,这里所用的turtle模块用法几乎与他们完全相同。 当然这个时候我们并不关心程序的具体细节。将程序代码复制到MU编辑器中,并保存到/CIRCUITPY/code.py文件中,等待几秒看BlueFi的LCD屏幕输出就可以。
在这个示例中,我们看不到系统的提示信息,只是看到code.py程序的执行结果:在LCD屏幕上绘制了一个彩色图案。这是因为本示例的第6行程序将BlueFi的 LCD显示器当作turtle画笔的输出设备使用,画笔程序绘制的几何图案被显示在LCD屏幕上,但系统提示等文本信息就不会显示在这里。
如果你将程序的最后两行(第18行和第19行)删除了,包保存到/CIRCUITPY/code.py文件,再观察执行结果的屏幕显示是什么内容?你认为这是什么原因?
2. 输出脚本程序的错误信息¶
脚本程序的执行过程是“逐行执行并输出结果”的串行模式。如果我们编写的一个10行的脚本程序,前5行程序没有任何错误,第6行程序有一个拼写错误。执行 这个脚本程序的效果是,执行到第6行包含拼写错误的语句时,脚本解释器无法执行,于是直接终止程序执行,并输出错误信息的提示,无论第7~10行程序是否 正确都不会被执行。
以下面程序为例,复制下面代码到MU编辑器中,并保存到/CIRCUITPY/code.py文件:
1 2 3 4 5 6 7 8 9 10 | from adafruit_turtle import Color, turtle from hiibot_bluefi.screen import Screen screen = Screen() colors = [Color.ORANGE, Color.PURPLE] turtle = turtle(screen) turtle.pen() for x in range(200): turtle.pencolor(colors[x % 2]) turtle.forward(x) turtle.left(91) |
第6行程序的正确拼写为“turtle.pendown()”,但是上面程序中被我们错误拼写为“turtle.pen()”。BlueFi在执行这个包含错误拼写的程序时,会出现以下 提示:
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
Traceback (most recent call last):
File “code.py”, line 6, in <module>
AttributeError: ‘turtle’ object has no attribute ‘pen’
Press any key to enter the REPL. Use CTRL-D to reload.
显然,第4和第5行提示信息中已经明确地告诉我们错误的语句是第几行,错误的原因是turtle对象没有pen这个属性。
BlueFi的LCD显示器虽然很小,但是作用很大!尤其执行Python脚本程序的过程中,动态地加载和执行一些存在错误的模块,终止脚本程序的执行,并提示 发声错误的位置和错误原因,很容易帮助我们排查错误。如果没有这样的显示和提示机制,程序被终止后编程者就很难定位问题。任何时候,只要用代码编写 程序,各种各样的错误是难免的,如果能快速地定位问题,编写代码、调试程序的效率将大大地提升。