я в настоящее время есть 2 кнопки подключили к моей Raspberry Pi (это те, с кольцом светодиодов в них), и я пытаюсь выполнить этот кодфункции кнопок Python странно не делать то же самое
#!/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()
На на поверхности он выглядит как довольно простой скрипт. При обнаружении нажмите кнопку:
- удалить событиях,
- печатать сообщение
- подождать 2 секунды, прежде чем добавлять события и поворачиваясь светодиода на
которое обычно работает здорово, когда Я нажимаю зеленую кнопку. Я пробовал его несколько раз подряд, и он работает непременно. С красным, однако, он работает хорошо в первый раз, а во второй раз, но после того, как он завершил второй цикл (цикл), сценарий просто останавливается.
Учитывая, что оба события довольно схожи, я не могу объяснить, почему он терпит неудачу в конце второй красной кнопки.
РЕДАКТИРОВАТЬ: Я изменил контакты с красного и зеленого соответственно (либо на разные контакты, либо на их замену). В любом случае, всегда красный код кнопки (на самом деле теперь зеленая кнопка) вызывает ошибку. Поэтому кажется, что это не «проблема с физическими красными кнопками, ни проблема с штырем», это просто оставляет код виноватым ...
Возможно, один из вызовов «GPIO.output» вызвал исключение, а затем 'add_events()' никогда не вызывался снова? – zvone
Спасибо за вашу мысль по этому вопросу. Я добавил кроме предложений, но они не были вызваны. Похоже, это не так. – user5740843
Это также не объясняет, почему он работает хорошо один раз, но всегда терпит неудачу в конце второго цикла ... – user5740843