BBC MicroPython中是否有事件回调?

时间:2017-09-02 18:19:34

标签: micropython bbc-microbit

我正在尝试将以下内容从Javascript转换为MicroPython for micro:bit。这是从块发送到Javascript的发明人工具包中的代码示例3.

let light_state = 0
# how do you do this bit?
input.onPinPressed(TouchPin.P0, () => {
    if (light_state == 0) {
        light_state = 1
    } else {
        light_state = 0
    }
})
basic.forever(() => {
    if (light_state == 1) {
        pins.analogWritePin(AnalogPin.P2, pins.analogReadPin(AnalogPin.P1))
    } else {
        pins.digitalWritePin(DigitalPin.P2, 0)
    }
})

我无法弄清楚如何将 input.onPinPressed 作为回调事件甚至是lambda。我能想到的最好的方法是反复查询pin0。

from microbit import *

light_on = False
while True:
    if pin0.is_touched():
        light_on = not light_on        
        if light_on:
            aval = pin1.read_analog()
            pin2.write_analog(aval)
        else:
            pin2.write_digital(0)

我在MicroPython文档中看到了对开关的回调,但是我还没有遇到针对micro:bit引脚的任何事件回调。是否有此功能的示例代码,即使它没有文档?

编辑:我对代码进行了更正 - 之前的MicroPython转换导致LED不断闪烁。

1 个答案:

答案 0 :(得分:2)

The reply from the micro:bit forum

  

MicroPython micro:bit API主要是为学龄儿童的教学和使用而设计的,并且决定不在API中包含回调,因为它们可能导致复杂的错误。相反,您需要轮询引脚。