按钮
microbit的LED左右两侧各有一枚按键,标记为A和B。我们可以通过一些方法让microbit在按钮被按下时做出反应。
属性
- button_a:A按钮,按钮左下角有A字符
- button_b:B按钮,按钮右上角有B字符
类和方法
注意:用户不可创建新button,两个button都是已经内置,且只能使用这两个button。
is_pressed()
如果指定的按钮被按下返回True
,否则返回False
。
was_pressed()
如果指定的按钮在开机或复位之后被按下过,则返回True
,否则返回False
。
get_presses()
返回开机或复位后,button被按下的次数,并且调用此方法后,会将计数置0。
示例
from microbit import *
sleep(10000)
display.scroll(str(button_a.get_presses()))
这个程序的功能:记录10秒内,A按键被按下的次数,并在10秒后将次数滚动显示出来。
虽然这是一个没什么用的程序,但是它引入了一些新的点:
sleep()
:设置microbit睡眠的时间,以毫秒为单位,sleep(10000)
则是睡眠10秒。- 有一个
button_a
对象被调用,通过它的get_presses()
方法得到它被按下的次数。
由于get_presses()
返回的是一个整数,但是display.scroll()
只接收字符,所以我们需要将整数转换为字符串。我们用这个str()
函数(“string”的缩写)可以将整数转换为字符串。
第三行有点像洋葱。如果圆括号是洋葱皮,那么你会注意到display.scroll()
包含str()
包含button_a.get_presses()
。Python会在这层方法开始之前首先算出最内层的结果。
比如:按了10下button_a
。
原代码: display.scroll(str(button_a.get_presses()))
python则会理解为: display.scroll(str(10))
最后翻译为: display.scroll("10")
虽然这看起来分为很多步,但MicroPython运行的很快。
事件循环
通常你需要你的程序挂起来等待某事发生或者一直运行。为此,您可以循环一段代码。
该代码定义了如何对某些预期事件(如按下按钮)做出反应。
from microbit import *
while running_time() < 10000:
display.show("1")
display.show("2")
running_time()
返回自设备启动以来的毫秒数。
这段程序检测microbit的启动时间,如果小于10秒,显示"1",大于10秒,显示"0"。
处理事件
如果我们希望MicroPython对按钮按钮事件做出反应,我们应该将其放入无限循环中并检查按钮被按下is_pressed()
。
无限循环很简单,只需要:
while True:
让我们做一个非常简单的网络宠物。它很伤心,当你按下按钮A,它会笑。但是如果按下按钮B,它会死亡。
from microbit import *
while True:
if button_a.is_pressed():
display.show(Image.HAPPY)
elif button_b.is_pressed():
break
else:
display.show(Image.SAD)
display.clear()
你能看看我们如何检查按下什么按钮吗?我们使用if(如果), elif(以下简称“否则,如果”)和else(否则)。
这些被称为条件 并且这样工作:
如果事件是真实的:
#做事情1
否则,如果另一个事件是真实的:
#做事情2
否则:
#做事情3。
is_pressed()
方法只产生两个结果:True(正确)或False(错误)。
如果你按下按钮返回True
,否则返回 False
。上面的代码用语言表述,“永远执行下面的循环代码,如果按下按钮A,就显示一个笑脸,否则如果按钮B被按下就跳出循环,否则显示一个悲伤的脸”,我们跳出了循环(停止程序循环阶段)用break声明。最后,当网络宠物死亡时,我们用clear()清除屏幕。
你有办法检查 两个按钮是否被按下吗?(提示:Python有and
(与),or
(或)和not
(非)逻辑运算符来判断多个事实的正确或错误(产生任何事情True或False结果)。