我想要实现一个功能,该功能不会中止程序,而是要等到我按下频道11上的按钮,然后再次启动程序。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN) #GPIO17
while GPIO.input(11) == GPIO.LOW:
GPIO.input(11) == GPIO.LOW
os.system("python /home/pi/gpio.py")
if not (GPIO.input(11) == GPIO.HIGH):
break
![在此处输入图片描述] (https://i.stack.imgur.com/UOzdW.jpg)
答案 0 :(得分:1)
我非常喜欢使用gpiozero
库进行事件处理。我在下面发布了该库的示例:
from gpiozero import Button
from signal import pause
import os
buttonPin = 4
def ButtonPressedCallback():
#do what you need when button is pressed
os.system("python /home/pi/gpio.py")
button = Button(buttonPin)
button.when_pressed = ButtonPressedCallback
pause()
或使用RPi.GPIO
库:
import RPi.GPIO as GPIO
import time
import os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.IN) #GPIO17
def my_callback():
#do something
print("button pressed")
GPIO.add_event_detect(11, GPIO.RISING, callback=my_callback, bouncetime=200)
#You can use GPIO.RISING, GPIO.FALLING, GPIO.BOTH
while True:
time.sleep(0.01)
#Or you can use pause() from signal package
答案 1 :(得分:0)
您想要做的是使用中断。单击以获取详细信息here。
简而言之,中断是一种可以中断正常程序流并通过控制中断过程的东西。使用GUI编写程序时,您可以使用各种onButtonClick()
方法来做到这一点:它们处理操作系统传递的中断。在此行的链接中插入示例:
GPIO.add_event_detect(BTN_G, GPIO.BOTH, handle)
添加事件检测并将流控制传递给handle()
函数。