您能告诉我在无尽的脚本中捕获 GPIO 的低状态(或更精确地说是下降沿)的最佳方法是什么?
为了清楚起见,我将在引导时运行此脚本(在bg中),并且每当用户按下按钮(连接到此 GPIO )时,都会将此引脚置于低状态。我想检测其中的每一个,并在每次推送时执行操作。
我已经有了这段代码,但是它会消耗很多 CPU ,我想...我需要一个像是中断的想法:
import RPi.GPIO as GPIO
#Set GPIO numbering scheme to pinnumber
GPIO.setmode(GPIO.BCM)
#setup pin 4 as an input
GPIO.setup(4,GPIO.IN)
# To read the state
While true:
state = GPIO.input(4)
if state:
print('on')
else:
print('off')
编辑
Here the pinout by BCM or BOARD, I will work with BCM
因为我的按钮在GPIO4上,所以引脚号为4。 仍然始终使用代码或 @ jp-jee
不断检测边缘事件编辑
#!/usr/bin/env python3
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4,GPIO.IN)
def Callback(channel):
print('pushed')
GPIO.add_event_detect(4, GPIO.FALLING, callback = Callback, bouncetime = 300)
while(True):
time.sleep(1)
现在我的代码打印总是在释放按钮时被按下,而在我按下按钮时什么也不打印...
答案 0 :(得分:0)
您是否尝试过使用中断?
import time
import RPi.GPIO as GPIO
GPIO.setup(4, GPIO.IN)
def Callback(channel):
state = GPIO.input(channel)
if state:
print('on')
else:
print('off')
GPIO.add_event_detect(4, GPIO.FALLING, callback = Callback, bouncetime = 300)
while(True):
time.sleep(1)
答案 1 :(得分:0)
看看the documentation of raspberry-gpio-python。
您想要的是GPIO.add_event_detect(channel, GPIO.RISING)
与回调函数的组合。
由于使用的是按钮,因此还需要考虑弹跳。
最后,您将得到如下所示(从链接的网站中获取):
def my_callback(channel):
print('This is a edge event callback function!')
GPIO.add_event_detect(channel, GPIO.FALLING, callback=my_callback, bouncetime=200)