В настоящее время у меня есть две кнопки, подключенные к моей малиновой Pi (это те, у кого есть светодиод кольца), и я пытаюсь выполнить этот код
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17, GPIO.OUT) #green LED
GPIO.setup(18, GPIO.OUT) #red LED
GPIO.setup(4, GPIO.IN, GPIO.PUD_UP) #green button
GPIO.setup(27, GPIO.IN, GPIO.PUD_UP) #red button
def remove_events():
GPIO.remove_event_detect(4)
GPIO.remove_event_detect(27)
def add_events():
GPIO.add_event_detect(4, GPIO.FALLING, callback=green, bouncetime=800)
GPIO.add_event_detect(27, GPIO.FALLING, callback=red, bouncetime=800)
def red(pin):
remove_events()
GPIO.output(17, GPIO.LOW)
print "red pushed"
time.sleep(2)
GPIO.output(17, GPIO.HIGH)
add_events()
def green(pin):
remove_events()
GPIO.output(18, GPIO.LOW)
print "green pushed"
time.sleep(2)
GPIO.output(18, GPIO.HIGH)
add_events()
def main():
while True:
print "waiting"
time.sleep(0.5)
GPIO.output(17, GPIO.HIGH)
GPIO.output(18, GPIO.HIGH)
GPIO.add_event_detect(4, GPIO.FALLING, callback=green, bouncetime=800)
GPIO.add_event_detect(27, GPIO.FALLING, callback=red, bouncetime=800)
if __name__ == "__main__":
main()
На поверхности это выглядит довольно легко script. При обнаружении нажатия кнопки:
- удалить события
- напечатать сообщение
- подождите 2 секунды перед добавлением событий и включением светодиода
Что обычно отлично работает, когда я нажимаю зеленую кнопку. Я пробовал его несколько раз подряд, и он работает непременно. С красным, однако, он работает хорошо в первый раз, и второй раз, но после того, как он завершил второй цикл красного (pin), script просто останавливается.
Учитывая, что оба события довольно похожи, я не могу объяснить, почему он терпит неудачу в конце второй красной кнопки.
EDIT: я изменил контакты с красного и зеленого соответственно (либо на разные контакты полностью, либо заменил их). В любом случае, всегда красный код кнопки (на самом деле теперь зеленая кнопка) вызывает ошибку. Таким образом, кажется, что это не проблема с физической красной кнопкой, а также проблема с штырем, это просто приводит к ошибке кода...