keypad
– Support for scanning keys and key matrices¶
该 keypad
模块提供对扫描键或按钮组的本地支持,独立连接到单个引脚,连接到移位寄存器,或连接在行列矩阵中。
在这些板上可用
-
class
keypad.
Event
(key_number: int = 0, pressed: bool = True, timestamp: Optional[int] = None)¶ 一个关键的过渡事件。
创建一个按键转换事件,它报告按键按下或按键释放的转换。
- 参数
key_number (int) – t键号
pressed (bool) –
True
如果按键被按下;False
如果它被释放了。timestamp (int) –
supervisor.ticks_ms
时间系统中按键发生的时间(以毫秒为单位)。如果指定为 None,supervisor.ticks_ms
则使用的当前值。
-
key_number
:int¶ 钥匙号码。
-
timestamp
:int¶ 时间戳
-
class
keypad.
EventQueue
¶ Event
对象队列,由keypad
扫描器填充,例如Keys
或KeyMatrix
.您不能
EventQueue
直接创建 的实例。每个扫描器在创建时都会创建一个实例。-
get
(self) → Optional[Event]¶ 返回下一个键转换事件。
None
如果没有待处理的事件,则返回。注意队列大小是有限的;请参阅
max_events
扫描仪的构造函数,例如Keys
或KeyMatrix
。如果队列已满时有新事件到达,则该事件将被丢弃,并overflowed
设置为True
。
-
get_into
(self, event: Event) → bool¶ 如果可用,将下一个键转换事件存储在提供的事件中,然后返回
True
。如果没有排队的事件,请不要触摸event
并返回False
。这种方法的优势
get()
在于它不分配存储。相反,您可以重用现有Event
对象。注意队列大小是有限的;请参阅
max_events
扫描仪的构造函数,例如Keys
或KeyMatrix
。- 返回
True
如果事件可用并存储,False
如果没有。- 返回类型
-
clear
(self) → None¶ 清除任何排队的键转换事件。也设置
overflowed
为False
。
-
-
class
keypad.
KeyMatrix
(row_pins: Sequence[microcontroller.Pin], column_pins: Sequence[microcontroller.Pin], columns_to_anodes: bool = True, interval: float = 0.02, max_events: int = 64)¶ 使用行和列引脚管理二维键矩阵。
创建一个
Keys
对象,该对象将扫描附加到给定行和列引脚的键矩阵。矩阵上不应有任何外部上拉或下拉:KeyMatrix
根据需要在引脚上启用内部上拉或下拉。键从零开始按顺序编号。可以通过 计算出一个键号。
row * len(column_pins) + column
.An
EventQueue
在创建此对象时创建,并且在events
属性中可用。- 参数
row_pins (Sequence[microcontroller.Pin]) – 连接到行的引脚。
column_pins (Sequence[microcontroller.Pin]) – 连接到列的引脚。
columns_to_anodes (bool) – 默认值
True
。如果矩阵使用二极管,二极管阳极通常连接到列引脚,阴极应连接到行引脚。如果您的二极管反向,请设置columns_to_anodes
为False
.interval (float) – 扫描键的频率不超过
interval
允许去抖动。interval
在浮点秒。默认值为 0.020(20 毫秒)。max_events (int) – 最大大小:保存的键转换事件的最大数量。必须 >= 1。如果队列已满时新事件到达,则丢弃最旧的事件。
events
EventQueue
-
key_count
:int¶ 正在扫描的密钥数。(只读)
-
events
:EventQueue¶ 在
EventQueue
与此相关的Keys
对象。(只读)
-
__exit__
(self) → None¶ 退出上下文时自动取消初始化。有关更多信息,请参阅 Lifetime 和 ContextManagers 。
-
class
keypad.
Keys
(pins: Sequence[microcontroller.Pin], *, value_when_pressed: bool, pull: bool = True, interval: float = 0.02, max_events: int = 64)¶ 管理一组独立的密钥。
创建一个
Keys
对象,该对象将扫描连接到给定引脚序列的键。每个键都是独立的,并连接到自己的引脚上。An
EventQueue
在创建此对象时创建,并且在events
属性中可用。- 参数
pins (Sequence[microcontroller.Pin]) – 连接到键的引脚。键号对应于该序列的索引。
value_when_pressed (bool) –
True
如果按下键时引脚读为高电平。False
如果按下键时引脚读数为低(接地)。所有引脚必须以相同方式连接。pull (bool) –
True
如果应在每个引脚上启用内部上拉或下拉。如果value_when_pressed
是False
,将使用上拉;如果是,将使用下拉True
pull 为False
。但是,在外部拉动已经存在时启用内部拉动不是问题;它只是使用更多的电流。interval (float) – 扫描键的频率不超过
interval
允许去抖动。interval
在浮点秒。默认值为 0.020(20 毫秒)。max_events (int) – 最大大小:保存的键转换事件的最大数量。必须 >= 1。如果队列已满时新事件到达,则丢弃最旧的事件。
events
EventQueue
。
-
key_count
:int¶ 正在扫描的密钥数。(只读)
-
events
:EventQueue¶ 在
EventQueue
与此相关的Keys
对象。(只读)
-
__exit__
(self) → None¶ 退出上下文时自动取消初始化。有关更多信息,请参阅 Lifetime 和 ContextManagers 。
-
class
keypad.
ShiftRegisterKeys
(*, clock: microcontroller.Pin, data: microcontroller.Pin, latch: microcontroller.Pin, value_to_latch: bool = True, key_count: int, value_when_pressed: bool, interval: float = 0.02, max_events: int = 64)¶ 管理一组附加到传入移位寄存器的密钥。
创建一个
Keys
对象,该对象将扫描连接到并行输入串行输出移位寄存器(如 74HC165 或 CD4021)的键。请注意,您可以链接移位寄存器以根据需要加载尽可能多的值。键号 0 是读取的第一个(或更准确地说,第零个)位。在 74HC165 中,该位标记为
Q7
。键号 1 将是 等的值Q6
。An
EventQueue
在创建此对象时创建,并且在events
属性中可用。- 参数
clock (microcontroller.Pin) – 移位寄存器时钟引脚。移位寄存器应在低电平到高电平转换时计时。
data (microcontroller.Pin) –输入的移位寄存器数据引脚
latch (microcontroller.Pin) – 用于锁存进入移位寄存器的并行数据的引脚。
value_to_latch (bool) – 锁定正在读取的数据的引脚状态。
True
如果数据在latch
变高 时被锁存False
如果数据在 时被锁存,这就是 74HC165 的操作方式。CD4021 锁存器则相反。一旦数据被锁存,它将通过切换时钟引脚将其移出。latch goes low. The default is ``True
。key_count (int) – 要输入的数据线数
value_when_pressed (bool) –
True
如果按下键时引脚读为高电平。False
如果按下键时引脚读数为低(接地)。interval (float) – 扫描键的频率不超过
interval
允许去抖动。interval
在浮点秒。默认值为 0.020(20 毫秒)。max_events (int) – 最大大小:保存的键转换事件的最大数量。必须 >= 1。如果队列已满时新事件到达,则丢弃最旧的事件。
events
EventQueue
。
-
key_count
:int¶ 正在扫描的密钥数。(只读)
-
events
:EventQueue¶ 在
EventQueue
与此相关的Keys
对象。(只读)
-
__exit__
(self) → None¶ 退出上下文时自动取消初始化。有关更多信息,请参阅 Lifetime 和 ContextManagers。