micro:bit可以用来显示时间,如:
但对于掌握了MicroPython基础知识的人来说,我们所看到的主要问题之一就是“如何让我的程序做更多的事情”。例如:一个程序可能希望在屏幕上显示一定的时间,但在这段时间内也会响应按钮按下。或者,也许还需要记住在将来的某个时候做点什么,但是到那时继续做它的主要功能。
问题?
这个限制出现了,因为大部分可用的方法都会暂停程序直到完成。一个简单的例子如下所示,程序首先滚动消息,然后开始响应按钮按下。
代码: 全选
from microbit import *
display.scroll('hello micro:bit')
while True:
if button_a.was_pressed():
display.show(Image.HEART)
代码: 全选
from microbit import *
n = 0
while True:
if button_a.was_pressed():
n += 1
display.scroll(str(n))
不再等待!
在某些情况下使用 wait=False,可以变为非阻塞模式。详细说明请参阅http://microbit-micropython.readthedocs ... splay.html。
代码: 全选
from microbit import *
n = 0
while True:
if button_a.was_pressed():
n += 1
display.scroll(str(n), wait=False)
而我们通常希望的是让显示器定期显示当前计数 - 可能每10秒钟一次。在后面我们将看到如何做到这一点。
用MicroPython做定时器
下面想要显示一段固定的时间(例如一个计时器),如果我们再次按下按钮,定时器应该重置。
代码: 全选
from microbit import *
while True:
if button_a.was_pressed():
display.show(Image.SQUARE)
s leep(5000)
display.clear()
代码: 全选
from microbit import *
while True:
if button_a.was_pressed():
display.show(Image.SQUARE)
s leep(5000)
display.clear()
if button_b.was_pressed():
display.clear()
代码: 全选
from microbit import *
while True:
if button_a.was_pressed():
display.show(Image.SQUARE, wait=False, clear=True, delay=5000)
if button_b.was_pressed():
display.clear()
代码: 全选
from microbit import *
while True:
if button_a.was_pressed():
pin0.write_digital(1)
s leep(5000)
pin0.write_digital(0)
if button_b.was_pressed():
pin0.write_digital(0)
使用running_time()
running_time()返回自启动micro:bit以来的毫秒数。请注意,micro:bit没有“实时时钟”,所以它没有“时间”的概念,只有运行的时间。时间是足够准确的,能够制作一个简单的时钟或手表,但是每次打开micro:bit时我们都必须重新设置它。
代码: 全选
from microbit import *
while True:
display.show(str(running_time() // 1000))
代码: 全选
from microbit import *
time_last_press = 0
while True:
if button_a.was_pressed():
time_now = running_time()
display.show(str(time_now - time_last_press))
time_last_press = time_now
代码: 全选
from microbit import *
while True:
if button_a.was_pressed():
pin0.write_digital(1)
start = running_time()
while running_time() - start < 5000:
pass
pin0.write_digital(0)
if button_b.was_pressed():
pin0.write_digital(0)
设置定时器
现在我们有办法修改这个代码来实现我们想要的功能。
代码: 全选
from microbit import *
LIGHT_MS = 5000
pin_off_time = 0
while True:
if running_time() > pin_off_time:
pin0.write_digital(0)
if button_a.was_pressed():
pin0.write_digital(1)
pin_off_time = running_time() + LIGHT_MS
if button_b.was_pressed():
pin_off_time = running_time()
周期计时器
回到我们一开始的例子。我们希望程序每10秒钟显示一次按键的次数,同时还能响应按键按下。这将结合两者wait=False和running_time()。
代码: 全选
from microbit import *
UPDATE_INTERVAL = 10000
next_update = 0
n = 0
while True:
if running_time() > next_update:
display.scroll(str(n), wait=False)
next_update = running_time() + UPDATE_INTERVAL
if button_a.was_pressed():
n += 1