Python GPIO add_event_detect 每个状态单独

Python GPIO add_event_detect each state individually

我目前有几个杠杆式开关,我希望在它 on/off 独立关闭所有其他开关后立即打印状态。

到目前为止,我已经走到这一步了:

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)

GPIO.setup(7, GPIO.IN) # switch 2
GPIO.setup(11, GPIO.IN) # switch 3

def print_func(pin):
        if GPIO.input(7) == 0:
                print "switch 2 on"
        elif GPIO.input(7) == 1:
               print "switch 2 off"
        elif GPIO.input(11) == 0:
                print "switch 3 on"
        elif GPIO.input(11) == 1:
               print "switch 3 off"


GPIO.add_event_detect(7, GPIO.BOTH, callback=print_func, bouncetime=300)
GPIO.add_event_detect(11, GPIO.BOTH, callback=print_func, bouncetime=300)

while True:
        sleep(1)

但是,这对我没有任何帮助。我不知道如何只提及刚刚移动的杠杆的状态,而不通过循环提及每个杠杆的状态..

任何帮助将不胜感激!

我现在没有 raspberry-pi,所以我无法对此进行测试,但我很确定以下是您需要的。

lever_num_by_pin = {7: 2, 11: 3}

def printOn(pin):
  print("switch", lever_num_by_pin[pin], "on")

def printOff(pin):
  print("switch", lever_num_by_pin[pin], "off")

for pin in lever_num_by_pin:
  GPIO.add_event_detect(pin, GPIO.RISING, callback=printOn, bouncetime=300)
  GPIO.add_event_detect(pin, GPIO.FALLING, callback=printOff, bouncetime=300)

回调是使用它们从中接收输入的通道的参数调用的。我们可以使用它根据引脚到数字的字典有选择地打印出杠杆编号。此外,我们可以使用这个字典的键作为一种方法来遍历所有带杠杆的引脚,并在每个引脚上附加一个上升和下降事件。上升为开启,下降为关闭