按键模块包含一个 板载的 BOOT0 引脚 和两个 外接的 A1 和 A2 引脚 作为按键输入。按键按下时,GPIO引脚会读取到低电平(0),而未按下时则读取高电平(1)。为了确保稳定的输入信号,本模块采用了BOOT上拉电阻,A1,A2下拉电阻。按键的操作会通过分压电路和开发板GPIO引脚进行处理。
硬件连接电源要求
模块需要通过 3.3V 电源来供电。开发板的 VBUS 引脚输出 1.8V,无法正常识别高电平,因此必须使用 3.3V 电源来保证按键模块能够正常工作。按键引脚
BOOT0:板载引脚,用作按键输入。
A1 和 A2:外接引脚,分别用作蓝色和红色按键输入。
连接方式
按键模块通过分压电阻与开发板GPIO引脚相连接,接线需要按照原理图正确连接。
以下是驱动代码,已更新为支持 BOOT0 和 外接的 A1、A2 引脚:
import time import board from digitalio import DigitalInOut, Direction, Pull # 定义按键值 KEY_NULL = 0 KEY_D0 = 1 KEY_D1 = 2 KEY_D2 = 4 # 定义按键 GPIO 引脚 key0 = DigitalInOut(board.BOOT0) # BOOT0 按键 key1 = DigitalInOut(board.A1) # A1 按键 key2 = DigitalInOut(board.A2) # A2 按键 # 按键初始化 def keyInit(): key0.direction = Direction.INPUT key0.pull = Pull.UP # BOOT0 使用上拉 key1.direction = Direction.INPUT key1.pull = Pull.DOWN # A1 使用下拉 key2.direction = Direction.INPUT key2.pull = Pull.DOWN # A2 使用下拉 # 按键检测 def keyDetect(): key_value = KEY_NULL if key0.value == 0: # 判断 BOOT0 是否按下 key_value += KEY_D0 if key1.value: # 判断 A1 是否按下 key_value += KEY_D1 if key2.value: # 判断 A2 是否按下 key_value += KEY_D2 return key_value # 检查按键是否按下 def isKeyPressed(): key_value = keyDetect() if key_value: # 如果检测到按键被按下 time.sleep(0.01) # 防抖 if key_value == keyDetect(): # 再次确认按键状态 return key_value return 0 # 没有按键按下 # 主函数:调试检测按键 def main(): keyInit() # 初始化按键 print("开始按键调试,按下按键查看状态...") while True: key_value = isKeyPressed() # 获取按键状态 # 打印按键状态 if key_value == KEY_NULL: print("没有按键按下") else: print(f"按下的按键:{key_value}") time.sleep(0.5) # 每隔0.5秒检查一次 # 启动主函数 main()注意事项
引脚连接:确保 BOOT0、A1 和 A2 按键的连接正确。每个按键都通过分压电路与GPIO引脚连接,在按下时通过引脚读取低电平(1),未按下时为高电平(0)。
由于外接按键正负极接反导致无论A1,A2上下拉都是默认输出1,这点错误要避免。