如何实施事件检测?

时间:2019-02-05 09:17:29

标签: python raspberry-pi

我想要实现一个功能,该功能不会中止程序,而是要等到我按下频道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

2 个答案:

答案 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()函数。