首页 > 解决方案 > 如何实现事件检测?

问题描述

我想实现一个不会中止程序但等到我按下通道 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 )

标签: pythonraspberry-pi

解决方案


我非常喜欢使用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

推荐阅读