我想要实现不会中止我的程序功能,但等到我按下通道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)
我很喜欢用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
你想要做的是使用中断。点击详情here。
在短的中断是东西,以及,中断正常的程序流,并将控制传递中断过程。当编写与GUI程序,你都有点那个做的正是这onButtonClick()
方法:它们处理由操作系统传递的中断。 INT在链接此行的例子:
GPIO.add_event_detect(BTN_G, GPIO.BOTH, handle)
添加事件检测和传递流量控制handle()
功能。