双按键 Unit
Dual Button Unit 提供两个独立按键。使用 DualButtonUnit 可处理单击、双击、长按和回调;使用 SimpleDualButtonUnit 可直接读取引脚并轮询消抖后的边沿事件。
支持以下产品:
UiFlow2 应用示例
按键事件
在 UiFlow2 中打开 dual_button_core_example.m5f2 项目。
本示例演示如何在 UiFlow2 中读取按键状态并处理按键事件。
UiFlow2 代码块:
示例输出:
按键事件发生时显示按键状态。
MicroPython 应用示例
按键事件与回调
本示例演示如何使用 DualButtonUnit 处理按键状态、单击、长按和回调。
MicroPython 代码块:
1import os, sys, io 2import M5 3from M5 import * 4from unit import DualButtonUnit 5 6 7dual_button_0_blue = None 8dual_button_0_red = None 9 10 11def dual_button_0_blue_wasClicked_event(state): # noqa: N802 12 global dual_button_0_blue, dual_button_0_red 13 print(dual_button_0_blue.isHolding()) 14 15 16def setup(): 17 global dual_button_0_blue, dual_button_0_red 18 19 M5.begin() 20 Widgets.fillScreen(0x222222) 21 22 dual_button_0_blue, dual_button_0_red = DualButtonUnit((36, 26)) 23 dual_button_0_blue.setCallback( 24 type=dual_button_0_blue.CB_TYPE.WAS_CLICKED, cb=dual_button_0_blue_wasClicked_event 25 ) 26 print(dual_button_0_blue.isHolding()) 27 28 29def loop(): 30 global dual_button_0_blue, dual_button_0_red 31 M5.update() 32 dual_button_0_blue.tick(None) 33 34 35if __name__ == "__main__": 36 try: 37 setup() 38 while True: 39 loop() 40 except (Exception, KeyboardInterrupt) as e: 41 try: 42 from utility import print_error_msg 43 44 print_error_msg(e) 45 except ImportError: 46 print("please update to latest firmware")
示例输出:
蓝色按键事件发生时打印按键状态。
简单轮询
本示例演示如何使用 SimpleDualButtonUnit 直接读取引脚,并在无需 tick() 或回调的情况下轮询消抖后的按下和释放边沿。
MicroPython 代码块:
1import os, sys, io 2import time 3 4import M5 5from M5 import * 6from unit import SimpleDualButtonUnit 7 8 9blue = None 10red = None 11 12 13def setup(): 14 global blue, red 15 16 M5.begin() 17 Widgets.fillScreen(0x222222) 18 19 blue, red = SimpleDualButtonUnit((36, 26)) 20 21 22def loop(): 23 global blue, red 24 M5.update() 25 blue.update() 26 red.update() 27 28 if blue.was_pressed(): 29 print("blue pressed, pin value:", blue.value()) 30 if blue.was_released(): 31 print("blue released, active:", blue.is_active()) 32 33 if red.was_pressed(): 34 print("red pressed, pin value:", red.value()) 35 if red.was_released(): 36 print("red released, active:", red.is_active()) 37 38 time.sleep_ms(10) 39 40 41if __name__ == "__main__": 42 try: 43 setup() 44 while True: 45 loop() 46 except (Exception, KeyboardInterrupt) as e: 47 try: 48 from utility import print_error_msg 49 50 print_error_msg(e) 51 except ImportError: 52 print("please update to latest firmware")
示例输出:
打印蓝色和红色按键的按下与释放事件。
API
DualButtonUnit
- DualButtonUnit(port)
创建两个功能完整的按键对象。
UiFlow2 代码块:

- Dual_Button.isHolding()
返回按键当前是否处于长按状态。
UiFlow2 代码块:

- Dual_Button.setCallback(type, cb)
为指定的按键事件注册回调函数。
- 参数:
type (int) – 按键事件类型。
cb (callable) – 事件发生时调用的函数。
UiFlow2 代码块:

- Dual_Button.tick(pin)
轮询按键状态机。请在循环中定期调用此方法。
- 参数:
pin – 中断处理程序传入的可选引脚参数。从循环中轮询时使用
None。
UiFlow2 代码块:

SimpleDualButtonUnit
SimpleButton
- class SimpleButton(pin_num, active_low=True, debounce_ms=50)
提供无需回调的直接引脚读取和消抖边沿轮询。
读取边沿事件前需定期调用
SimpleButton.update()。SimpleButton.value()和SimpleButton.is_active()方法会直接读取引脚,无需调用update()。- update()
采样引脚并更新消抖后的边沿状态。每次循环迭代调用一次此方法。
- was_pressed()
返回最近一次调用
SimpleButton.update()是否检测到消抖后的按下事件。- 返回类型:
- was_released()
返回最近一次调用
SimpleButton.update()是否检测到消抖后的释放事件。- 返回类型:

