这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 电子测光表DIY--过程贴--按键检测

共4条 1/1 1 跳转至

电子测光表DIY--过程贴--按键检测

助工
2024-11-06 23:58:42     打赏

开箱贴上已经验证过板卡上有三个按键,不需要外接按键的设想理论可行,因此今天实际编码验证效果。看大家玩的都是arduino,那我就走另一个方向,玩CircuitPython。

硬件接线

2.jpg

从按键原理图可以知道:

D0按键对应脚为IO0_BOOT0,按下接地,由于未接上拉,因此需要配置成上拉输入

D1按键对应脚为IO1,按下接到3.3V,由于外部未接下拉,因此需要配置成输入下拉

D2按键对应脚为IO2,按下接到3.3V,由于外部未接下拉,因此需要配置成输入下拉

软件编码

import time
import board
from digitalio import DigitalInOut, Direction, Pull

def keyDetect():
    key_value = 0
    if key0.value == 0:
        key_value +=1
    if key1.value:
        key_value +=2
    if key2.value:
        key_value +=4
    return key_value

def isKeyPressed():
    key_value = keyDetect()
    if key_value:
        time.sleep(0.01) 
        if key_value == keyDetect():
            return key_value
    return 0

key0 = DigitalInOut(board.BOOT0)
key0.direction = Direction.INPUT
key0.pull = Pull.UP
key0_value = key0.value

key1 = DigitalInOut(board.D1)
key1.direction = Direction.INPUT
key1.pull = Pull.DOWN

key2 = DigitalInOut(board.D2)
key2.direction = Direction.INPUT
key2.pull = Pull.DOWN

key_value = 0
old_key_value = key_value
while True:
    
    key_value=isKeyPressed()
    if old_key_value != key_value:
        old_key_value = key_value
        if key_value == 1:
            print("Key D0 Pressed")
        elif key_value == 2:
            print("Key D1 Pressed")
        elif key_value == 4:
            print("Key D2 Pressed")
        elif key_value == 3:
            print("Key D0 D1 Pressed")
        elif key_value == 5:
            print("Key D0 D2 Pressed")
        elif key_value == 6:
            print("Key D1 D2 Pressed")
        elif key_value == 7:
            print("Key D0 D1 D2 Pressed")
        else:
            print("Key Release")

编码思路为:先将所有按键按下信息记录,判断是否有按键按下,如果有按键按下,则延时消抖后再读一次,若读到的值与之前读到的值一致,则认为按键按下。上层根据按下消息提供对应的输出。

结果验证

>>> %Run -c $EDITOR_CONTENT
Key D0 Pressed
Key Release
Key D1 Pressed
Key Release
Key D0 D1 Pressed
Key Release
Key D1 Pressed
Key Release
Key D2 Pressed
Key Release
Key D1 D2 Pressed
Key Release
Key D0 D2 Pressed
Key Release
Key D0 D1 Pressed
Key Release
Key D0 D1 D2 Pressed
Key Release

可以看到,按键效果与预期一致(消抖过程被认为按键释放后按下新键,对上层逻辑来说,反而降低了状态维护难度,不算问题),按键检测实现完毕





关键词: 电子     测光     过程     按键     检测    

专家
2024-11-07 00:06:41     打赏
2楼

感谢楼主分享


专家
2024-11-07 08:19:30     打赏
3楼

感谢分享


菜鸟
2024-11-07 08:45:21     打赏
4楼

感谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]