RPi.GPIO.wait_for_edge(4,GPIO.FALLING)同时检测按钮的按下和释放

时间:2018-12-05 00:17:55

标签: python raspberry-pi3 gpio

我已经阅读了RPi.GPIO的文档,并搜索了Google和SO,但是无法找到可能是一个非常愚蠢的问题的解决方案。我试图仅检测到按钮的边缘被按下。但是,无论我指定要寻找“下降”边缘还是“上升”边缘,Pi都会在按下和释放按钮时执行命令。有时它会多次执行代码。我的代码:

import RPi.GPIO as GPIO

buttonPin = 4                 # this is the pin for the button
GPIO.setmode(GPIO.BCM)                 # pinmode
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)                 #setting up my pin to be input w/ pullup resistor

if __name__ == '__main__':
    while True:                 # loop
        GPIO.wait_for_edge(buttonPin,GPIO.RISING)                 # looking for a rising edge
        print('Edge detected')                 # this happens regardless of my button being pressed or released

很确定我在这里缺少一些基本的东西,任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您的代码基本上没问题,但是您需要一些硬件知识...

使用普通的开关和按钮,有一种叫做抖动的东西。

一种解决方案是在很短的时间(通常为几毫秒)后检查按钮状态,然后根据延迟的结果采取行动。

答案 1 :(得分:0)

您可以使用参数bouncetime以编程方式解决它,但必须使用

GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback, bouncetime=200)

GPIO.add_event_callback(channel, my_callback, bouncetime=200)

代替GPIO.wait_for_edge(channel,GPIO.RISING)

或使用其他硬件:在交换机上添加一个0.1uF电容器,

或者您可以将两者结合使用。

Documentation中的更多内容

和平