Cardputer Adv

支持以下产品:

Cardputer Adv

Cardputer Adv 提供内置 I2C 键盘控制器。在 UiFlow2 MicroPython 中,使用 MatrixKeyboard 作为高级键盘接口。它会自动为 Cardputer 和 Cardputer Adv 选择正确的键盘后端。

MicroPython 示例

轮询键盘输入

该示例每次读取一个按键事件。get_key() 和 get_string() 都会消耗一个待处理按键事件,因此每次读取时二者选择其一即可。

import time
from hardware import MatrixKeyboard

kb = MatrixKeyboard()

while True:
    if kb.is_pressed():
        text = kb.get_string()
        print(text)
    time.sleep_ms(20)

回调键盘输入

该示例注册一个回调函数,然后从 MatrixKeyboard 实例读取待处理的按键码。

import time
from hardware import MatrixKeyboard

kb = MatrixKeyboard()

def key_event(_):
    key = kb.get_key()
    if key is not None:
        print(key, chr(key))

kb.set_callback(key_event)

while True:
    time.sleep_ms(20)

API

MatrixKeyboard

class hardware.matrix_keyboard.MatrixKeyboard

创建当前主机的内置键盘接口。在 Cardputer Adv 上,键盘通过内部 I2C 键盘控制器连接。

MatrixKeyboard.get_key() → int | None

返回下一个按下按键的按键码;没有待处理按键事件时返回 None。

可打印按键返回 ASCII 按键码。对于不可打印按键和导航按键,请使用此方法。

MatrixKeyboard.get_string() → str | None

将下一个按下的按键作为单字符字符串返回;没有待处理按键事件时返回 None。

此方法会用 chr() 转换 get_key() 返回的值。当按键码比字符串更有用时,请改用 get_key()。

MatrixKeyboard.is_pressed() → bool

当至少有一个按键事件等待读取时返回 True。

MatrixKeyboard.is_key_pressed(keycode: int) → bool

当指定按键码当前处于按下状态时返回 True。

在 Cardputer Adv 上,FN + ` 会报告 ESC,可使用 0x1B 检测。

MatrixKeyboard.set_callback(handler) → None

注册按键按下事件的回调函数。

回调函数会接收当前活动键盘对象作为唯一参数。为了让代码在 Cardputer 和 Cardputer Adv 上保持兼容,请在回调函数中从你的 MatrixKeyboard 实例读取待处理事件。

MatrixKeyboard.tick() → None

更新扫描式键盘状态。

Cardputer Adv 从 I2C 键盘控制器接收按键事件,因此在 Cardputer Adv 上轮询时不需要调用此方法。它可以保留在 Cardputer/Cardputer Adv 共用的循环中。

MatrixKeyboard.deinit() → None

释放键盘资源并清除待处理按键事件。