Я попытался реализовать прерывание на 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 тоже падает. Как решить?