如何解决按下按钮时 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 举报,一经查实,本站将立刻删除。