python - 如何阻止错误的 GPIO 触发发生?
问题描述
我是与 Raspberry Pi 交互的新手,并且有一个用于发送 webhook 的 Pi,这样当有人按下我作为门铃放置的按钮时,我可能会收到警报。我已经把 webhook 全部整理好了,但是当按钮什么也没做时,我不断收到错误的 GPIO 触发器,这些触发器会向我发送钩子。
我尝试通过使用屏蔽线来消除噪音,在 Raspberry Pi 和按钮之间只使用大约 12 英寸左右的电线,甚至在回路中加入一个电阻电容电路,以尝试“硬件去抖”按钮。即使在之后在这些升级中,我看到了错误的按钮按下,尽管要少得多(每几周一次,而不是每几天一次)。
我正在使用的代码
import RPi.GPIO as GPIO
import sys
import os
GPIO.setmode(GPIO.BOARD)
buttonPin = 16
input_state1 = True
last_state1 = True
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
try:
while True:
input_state1 = GPIO.input(16)
if input_state1 != last_state1:
os.system('python hook.py')
finally:
GPIO.cleanup()
我希望不会看到错误的按钮按下,特别是因为我已经在使用内部上拉和硬件循环。我只是在这一点上迷路了
解决方案
last_state1 永远不会更新,因此当 input_state1 更改时,您的if input_state1 != last_state1:
条件将变为 true,并且它将os.system('python hook.py')
在 while 循环中一遍又一遍地触发。
解决方法是在调用last_state1 = input_state1
后设置。os.system
推荐阅读
- java - 子集总和问题:返回所需子集的变体
- javascript - 如何防止ckeditor在页面中加载多个content.css
- python - Gif 后跟输入语句时使脚本崩溃
- c# - 在具有表锁的数据库中生成带有验证的随机密钥
- java - java中函数的导数
- regex - 如何使用 sed 或 awk 在一行中分离重复模式,并将它们保存到行中?
- r - `fourfoldplot` 在列标签中没有正确显示大小和颜色
- android - 如何在android中随手指移动一起移动视图?
- mysql - 棘手的 CTE - 递归 sql(编辑我的查询)
- javascript - JavaScript:模拟 CSS 三次贝塞尔函数()