2016-06-11 2 views
0

В настоящее время у меня есть несколько переключателей с переключателем рычага, которые я хотел бы распечатать, как только он отключится независимо от всех остальных переключателей.Python GPIO add_event_detect каждое состояние индивидуально

До сих пор, я пришел далеко:

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) 

Однако это не поймите меня везде. Я не могу понять, как просто упомянуть статус рычага, который просто двигается, не пропуская петлю, в которой упоминается статус для каждого из них.

Любая помощь была бы действительно оценена!

ответ

1

У меня сейчас нет малины-пи, поэтому я не могу это проверить, но я уверен, что следующее вам нужно.

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) 

Обратные вызовы вызываются с аргументом канала, с которого они получали вход. Мы можем использовать это, чтобы выборочно распечатать номер рычага на основе словаря контактов для номера. Кроме того, мы можем использовать ключи этого словаря как способ итерации через все булавки с рычагами и прикладывать к ним каждое восходящее и падающее событие. Восхождение активируется, и падение падает.

Смежные вопросы