按钮

microbit的LED左右两侧各有一枚按键,标记为A和B。我们可以通过一些方法让microbit在按钮被按下时做出反应。

属性

类和方法

注意:用户不可创建新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秒后将次数滚动显示出来。

虽然这是一个没什么用的程序,但是它引入了一些新的点:

  1. sleep():设置microbit睡眠的时间,以毫秒为单位,sleep(10000)则是睡眠10秒。
  2. 有一个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结果)。