rpi4 add_event_detect триггер события - PullRequest
0 голосов
/ 03 августа 2020

Я попытался реализовать прерывание на RPi4 с помощью функции add_event_detect(). Моя структура выглядит следующим образом:

вход: gpio20, исходный сигнал вывод: gpio21, световой сигнал запуска

entertime_stamp = time.time() 

''' config '''
INPUT_PIN = 20
OUTPUT_PIN = 21

''' gpio '''
GPIO.setmode(GPIO.BCM) 
GPIO.setup(INPUT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # pull_up_down=GPIO.PUD_DOWN
GPIO.setup(OUTPUT_PIN, GPIO.OUT, initial=GPIO.LOW) 
        
''' function for event trigger '''
def Interrupt(channel):
    global OUTPUT_PIN
    global GPIO
    global time_stamp       # put in to debounce  
    
    time_now = time.time()  
    if ((time_now - time_stamp) >= 0.3 and GPIO.input(INPUT_PIN)==1):  
    
        GPIO.output(OUTPUT_PIN, True)    
        
        time.sleep(0.2)
        GPIO.output(OUTPUT_PIN, False)
        
        print('Action trigger');
    
    time_stamp = time_now  

''' interrupt '''
GPIO.add_event_detect(INPUT_PIN, GPIO.RISING, callback = Interrupt, bouncetime = 200)


''' main '''
try:
    
    while True:
        print("input: {0}".format(GPIO.input(INPUT_PIN)))
            
        time.sleep(0.5)

Мое правило - запускать gpio21 (от 0 до 1) при нарастании сигнала gpio20, поэтому я установил правило add_event_detect() на «GPIO.RISING».

GPIO.add_event_detect(INPUT_PIN, GPIO.RISING, callback = Interrupt, bouncetime = 200) 

, но он запускает gpio21 (от 0 до 1), когда сигнал приема gpio20 тоже падает. Как решить?

...