【问题标题】:GPIO.wait_for_edge triggering randomlyGPIO.wait_for_edge 随机触发
【发布时间】:2019-03-16 11:24:35
【问题描述】:

我已经组装了一个树莓派,只需按下瞬时开关即可发送一些请求。一切正常,正如预期的那样,直到我意识到打开和关闭附近的插头也会触发程序启动。我对 python 很陌生,但是边走边学。这是我的代码的相关部分

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)

GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_UP)

try
  while True:
    print("waiting for input")
    GPIO.wait_for_edge(10, GPIO.FALLING)

       #do requests

except KeyboardInterrupt:
    GPIO.cleanup()
GPIO.cleanup()

我在某处读到,可能是我用于按钮的电线充当天线并产生下降沿,但不知道如何确认或修复它。

另外,是否值得进行 time.sleep 延迟,然后在短暂延迟后重新检查边缘是否仍然正确?

按下按钮大约半秒后它应该是假的,而随机触发可能更长时间是真的?不确定所以真的只是在寻找一些建议!

还可能值得指出的是,我使用的是第一代树莓派之一,因为不需要任何繁重的工作!

【问题讨论】:

  • 这不是 Python 问题。您需要 add a pull-up or pull-down resistor 到您的电路以避免随机激活您的 GPIO。您可能还需要debounce your button
  • 感谢您的回复,我把它放在 python 中,就像我说我正在学习 python 并想检查我的代码是否正确。我也没有通过指定 pull_up_down = GPIO.PUD_UP 在代码中有效地添加电阻器吗?我认为我不需要去抖动,因为它是一个瞬时开关,当触发请求时,至少需要几秒钟的时间才能执行,并且从测试中,如果按下或按住按钮,我不会得到任何不需要的结果。

标签: python button input raspberry-pi gpio


【解决方案1】:

以防万一其他人偶然发现这一点,我最终在按下按钮后在我的程序中实现了 0.3 秒的等待时间,然后检查它是否仍然是下降沿(低)。

如果是,则继续执行我想要的代码,因为它是按下按钮,如果不是,则不执行任何操作作为其干扰。

这是否意味着我必须按住我的瞬时开关大约一秒钟才能确保它通过我的检查但没什么大不了的!

while True:
   print("waiting for input")
   GPIO.wait_for_edge(10, GPIO.FALLING)
   time.sleep(.3)
   if GPIO.input(10) == GPIO.LOW:
      #do the thing i want as it's a button press
   else:
      #do nothing as its interference

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 2014-01-04
    • 2018-08-23
    • 1970-01-01
    • 2018-08-15
    • 2014-07-17
    • 1970-01-01
    • 2015-07-05
    相关资源
    最近更新 更多