我怎样才能实现事件检测?

问题描述 投票:0回答:2

我想要实现不会中止我的程序功能,但等到我按下通道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

python raspberry-pi
2个回答
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

0
投票

你想要做的是使用中断。点击详情here

在短的中断是东西,以及,中断正常的程序流,并将控制传递中断过程。当编写与GUI程序,你都有点那个做的正是这onButtonClick()方法:它们处理由操作系统传递的中断。 INT在链接此行的例子:

GPIO.add_event_detect(BTN_G, GPIO.BOTH, handle)

添加事件检测和传递流量控制handle()功能。

© www.soinside.com 2019 - 2024. All rights reserved.