keypad – Support for scanning keys and key matrices

keypad 模块提供对扫描键或按钮组的本地支持,独立连接到单个引脚,连接到移位寄存器,或连接在行列矩阵中。

在这些板上可用
  • 8086 Commander
  • ARAMCON Badge 2019
  • ARAMCON2 Badge
  • ATMegaZero ESP32-S2
  • Adafruit CLUE nRF52840 Express
  • Adafruit Circuit Playground Bluefruit
  • Adafruit EdgeBadge
  • Adafruit Feather Bluefruit Sense
  • Adafruit Feather M4 CAN
  • Adafruit Feather M4 Express
  • Adafruit Feather MIMXRT1011
  • Adafruit Feather RP2040
  • Adafruit Feather STM32F405 Express
  • Adafruit Feather nRF52840 Express
  • Adafruit FunHouse
  • Adafruit Grand Central M4 Express
  • Adafruit Hallowing M4 Express
  • Adafruit ItsyBitsy M4 Express
  • Adafruit ItsyBitsy RP2040
  • Adafruit ItsyBitsy nRF52840 Express
  • Adafruit LED Glasses Driver nRF52840
  • Adafruit Macropad RP2040
  • Adafruit MagTag
  • Adafruit Matrix Portal M4
  • Adafruit Metro ESP32S2
  • Adafruit Metro M4 Airlift Lite
  • Adafruit Metro M4 Express
  • Adafruit Metro nRF52840 Express
  • Adafruit Monster M4SK
  • Adafruit PyGamer
  • Adafruit PyPortal
  • Adafruit PyPortal Pynt
  • Adafruit PyPortal Titano
  • Adafruit Pybadge
  • Adafruit QT Py RP2040
  • Adafruit QT2040 Trinkey
  • Adafruit Trellis M4 Express
  • AloriumTech Evo M51
  • Arduino Nano 33 BLE
  • Arduino Nano RP2040 Connect
  • Artisense Reference Design RD00
  • AtelierDuMaker nRF52840 Breakout
  • BDMICRO VINA-D51
  • BLE-SS dev board Multi Sensor
  • BastBLE
  • BastWiFi
  • BlueMicro840
  • CP32-M4
  • Capable Robot Programmable USB Hub
  • Challenger RP2040 WiFi
  • CircuitBrains Deluxe
  • CrumpS2
  • Cytron Maker Pi RP2040
  • DynOSSAT-EDU-OBC
  • ESP 12k NodeMCU
  • Electronut Labs Blip
  • Electronut Labs Papyr
  • EncoderPad RP2040
  • Espruino Wifi
  • Feather ESP32S2 without PSRAM
  • Feather MIMXRT1011
  • Feather MIMXRT1062
  • FeatherS2
  • FeatherS2 Neo
  • FeatherS2 PreRelease
  • Fomu
  • Franzininho WIFI w/Wroom
  • Franzininho WIFI w/Wrover
  • Gravitech Cucumber M
  • Gravitech Cucumber MS
  • Gravitech Cucumber R
  • Gravitech Cucumber RS
  • HMI-DevKit-1.1
  • HiiBot BlueFi
  • IMXRT1010-EVK
  • IkigaiSense Vita nRF52840
  • Kaluga 1
  • LILYGO TTGO T8 ESP32-S2 w/Display
  • MDBT50Q-DB-40
  • MDBT50Q-RX Dongle
  • MEOWBIT
  • MORPHEANS MorphESP-240
  • MakerDiary nRF52840 MDK
  • MakerDiary nRF52840 MDK USB Dongle
  • Makerdiary M60 Keyboard
  • Makerdiary Pitaya Go
  • Makerdiary nRF52840 M.2 Developer Kit
  • Melopero Shake RP2040
  • Metro MIMXRT1011
  • Mini SAM M4
  • NUCLEO STM32F746
  • NUCLEO STM32F767
  • NUCLEO STM32H743
  • OPENMV-H7 R1
  • Oak Dev Tech BREAD2040
  • Oak Dev Tech PixelWing ESP32S2
  • Open Hardware Summit 2020 Badge
  • PCA10056 nRF52840-DK
  • PCA10059 nRF52840 Dongle
  • Particle Argon
  • Particle Boron
  • Particle Xenon
  • PewPew M4
  • Pimoroni Interstate 75
  • Pimoroni Keybow 2040
  • Pimoroni PGA2040
  • Pimoroni Pico LiPo (16MB)
  • Pimoroni Pico LiPo (4MB)
  • Pimoroni PicoSystem
  • Pimoroni Plasma 2040
  • Pimoroni Tiny 2040
  • PyKey60
  • PyboardV1_1
  • Raspberry Pi Pico
  • Robo HAT MM1 M4
  • S2Mini
  • SAM E54 Xplained Pro
  • SAM32v26
  • ST STM32F746G Discovery
  • STM32F412G_DISCO
  • STM32F4_DISCO
  • Saola 1 w/Wroom
  • Saola 1 w/Wrover
  • Seeeduino Wio Terminal
  • Silicognition LLC M4-Shim
  • SparkFun MicroMod RP2040 Processor
  • SparkFun MicroMod SAMD51 Processor
  • SparkFun MicroMod nRF52840 Processor
  • SparkFun Pro Micro RP2040
  • SparkFun Pro nRF52840 Mini
  • SparkFun STM32 MicroMod Processor
  • SparkFun Thing Plus - RP2040
  • SparkFun Thing Plus - SAMD51
  • TG-Boards' Datalore IP M4
  • TG-Watch
  • THUNDERPACK_v11
  • THUNDERPACK_v12
  • Targett Module Clip w/Wroom
  • Targett Module Clip w/Wrover
  • Teensy 4.0
  • Teensy 4.1
  • Teknikio Bluebird
  • The Open Book Feather
  • TinkeringTech ScoutMakes Azul
  • TinyS2
  • UARTLogger II
  • WarmBit BluePixel nRF52840
  • iMX RT 1020 EVK
  • iMX RT 1060 EVK
  • microS2
  • nanoESP32-S2 w/Wrover
  • nanoESP32-S2 w/Wroom
  • nice!nano
  • stm32f411ce-blackpill
  • stm32f411ce-blackpill-with-flash

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

钥匙号码。

pressed :bool

True如果事件代表按下(按下)键的转换。的相反released

released :bool

True如果事件代表按键向上(释放)转换。的相反 pressed

timestamp :int

时间戳

__eq__(self, other: object)bool

Event 如果两个对象的 key_numberpressed/released 值相等,则它们相等。请注意,这不会比较事件时间戳。

__hash__(self)int

返回 的哈希值Event,因此它可以用于字典等。

请注意,由于具有不同时间戳的事件比较相等,因此它们也会散列到相同的值。

class keypad.EventQueue

Event 对象队列,由keypad 扫描器填充,例如KeysKeyMatrix.

您不能 EventQueue直接创建 的实例。每个扫描器在创建时都会创建一个实例。

overflowed :bool

True如果事件因已满而无法添加到事件队列中。(只读)设置为False 通过 clear().

get(self)Optional[Event]

返回下一个键转换事件。 None如果没有待处理的事件,则返回。

注意队列大小是有限的;请参阅max_events 扫描仪的构造函数,例如KeysKeyMatrix。如果队列已满时有新事件到达,则该事件将被丢弃,并 overflowed 设置为 True

返回

下一个排队的键转换 Event

返回类型

可选[[Event]

get_into(self, event: Event)bool

如果可用,将下一个键转换事件存储在提供的事件中,然后返回True。如果没有排队的事件,请不要触摸event并返回 False

这种方法的优势get()在于它不分配存储。相反,您可以重用现有Event对象。

注意队列大小是有限的;请参阅 max_events 扫描仪的构造函数,例如KeysKeyMatrix

返回

True如果事件可用并存储,False 如果没有。

返回类型

bool

clear(self)None

清除任何排队的键转换事件。也设置overflowedFalse

__bool__(self)bool

True 如果len()大于零。这是检查队列是否为空的简单方法。

__len__(self)int

返回当前队列中的事件数。用于实现len().

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_anodesFalse.

  • interval (float) – 扫描键的频率不超过 interval 允许去抖动。 interval在浮点秒。默认值为 0.020(20 毫秒)。

  • max_events (int) – 最大大小:保存的键转换事件的最大数量。必须 >= 1。如果队列已满时新事件到达,则丢弃最旧的事件。events EventQueue

key_count :int

正在扫描的密钥数。(只读)

events :EventQueue

EventQueue与此相关的 Keys 对象。(只读)

deinit(self)None

停止扫描并释放引脚。

__enter__(self)KeyMatrix

上下文管理器使用的无操作。

__exit__(self)None

退出上下文时自动取消初始化。有关更多信息,请参阅 Lifetime 和 ContextManagers

reset(self)None

重置扫描仪的内部状态以假设所有键现在都已释放。因此,在此调用时已按下的任何键将立即导致新的按键事件发生。

key_number_to_row_column(self, row: int, column: int)Tuple[int]

返回给定键号的行和列。该行是。列是。 key_number // len(column_pins). The column is key_number % len(column_pins).

返回

(row, column)

返回类型

元组[int]

row_column_to_key_number(self, row: int, column: int)int

返回给定行和列的键号。关键数字是。row * len(column_pins) + column.

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_pressedFalse,将使用上拉;如果是,将使用下拉TruepullFalse。但是,在外部拉动已经存在时启用内部拉动不是问题;它只是使用更多的电流。

  • interval (float) – 扫描键的频率不超过interval允许去抖动。 interval在浮点秒。默认值为 0.020(20 毫秒)。

  • max_events (int) – 最大大小:保存的键转换事件的最大数量。必须 >= 1。如果队列已满时新事件到达,则丢弃最旧的事件。events EventQueue

key_count :int

正在扫描的密钥数。(只读)

events :EventQueue

EventQueue与此相关的 Keys对象。(只读)

deinit(self)None

停止扫描并释放引脚。

__enter__(self)Keys

上下文管理器使用的无操作。

__exit__(self)None

退出上下文时自动取消初始化。有关更多信息,请参阅 Lifetime 和 ContextManagers

reset(self)None

重置扫描仪的内部状态以假设所有键现在都已释放。因此,在此调用时已按下的任何键将立即导致新的按键事件发生。

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对象。(只读)

deinit(self)None

停止扫描并释放引脚。

__enter__(self)Keys

上下文管理器使用的无操作。

__exit__(self)None

退出上下文时自动取消初始化。有关更多信息,请参阅 Lifetime 和 ContextManagers

reset(self)None

重置扫描仪的内部状态以假设所有键现在都已释放。因此,在此调用时已按下的任何键将立即导致新的按键事件发生。