微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按下按钮时 GPIO 事件检测不提供输出

如何解决按下按钮时 GPIO 事件检测不提供输出

以下python脚本应该等待按钮按下,打印按钮按下消息,然后退出

但是,当我按下按钮时,没有打印任何内容。然后当我按下回车键时,脚本会打印“检测到按钮按下”然后停止。

如何修复此代码,以便在按下按钮时打印“检测到按钮按下”?

我按照教程制作了这段代码

#Button input detection
#by 
#Start date: 11th February 2021
#End date: 11th February 2021

#Importing GPIO andtime libraries as per usual with a python script making use of RPi GPIO
import RPi.GPIO as GPIO
import time

#Callback function to print 'Button push detected' when called
def button_callback(channel):
    print("Button push detected")
    
#disabling annoying GPIO warnings and setting GPIO mode to board
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_UP)

#GPIO event detector that detects a rising edge on pin 11
GPIO.add_event_detect(11,GPIO.FALLING,callback=button_callback)

#Command that does not stop until someone presses enter
quit = input("Press enter to quit")

#Clean up the pins used
GPIO.cleanup()

解决方法

问题在于您的脚本需要一个循环,等待按钮被按下,以便在检测到按钮按下时,您的脚本将能够对事件做出反应。

现在您的脚本设置了事件检测,然后等待输入,一旦输入,您的脚本就会退出。

请参阅此 Raspberry Pi 论坛帖子,https://www.raspberrypi.org/forums/viewtopic.php?t=201747

它有一个程序,可以通过按下按钮来打开和关闭 LED。

但是在我看来,如果您希望脚本在您按下按钮时结束,您可能需要对回调函数进行更改以引发异常而不是点亮 LED。

请参阅下面的修改后的程序,其中包含一些附加注释以及注释掉的 LED 灯/熄灯。

然而,这个修改后的程序使用了一个忙循环,它会持续运行直到按下按钮。使用忙循环虽然适用于像您这样的简单程序,但通常不是一个好主意。

另一种方法是使用 import pandas as pd from typing import NewType,List,Tuple Dataframe = NewType("pandas dataframe obj",pd.Dataframe) time_tup = lambda s: sum(list(s.strip().split(':')[:-1])) def sliding_window(df: Dataframe,ranges: List[Tuple[str,str]])-> float: tm = time_tup(df['TIME']) for low,high in ranges: l,h = time_tup(low),time_tup(high) if l <= tm <= h: return 0.85 * df["A"]/(df["B"]+df["C"]) return 1 ... sliding_window(your_df,[("10:00:00","14:30:00"),("22:00:00","2:30:00")]) 函数暂停脚本,直到按下按钮。请参阅 Raspberry Pi StackExchange - Pausing code execution till a button is pressed 以消除繁忙循环。

首先是忙循环版本。

GPIO.wait_for_edge()

另请参阅对这些论坛帖子中发生的事情的解释

https://www.raspberrypi.org/forums/viewtopic.php?t=128510

https://www.raspberrypi.org/forums/viewtopic.php?t=141520

还有这篇关于python异常的文章。 https://realpython.com/python-exceptions/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?