Obecnie mam 2 przyciski podłączone do mojego Raspberry Pi (są to te z pierścieniem LED w nich) i próbuję wykonać ten kodPython funkcje przycisków dziwnie nie robi to samo
#!/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()
On powierzchnia wygląda na dość łatwy scenariusz. Kiedy naciśnij przycisk zostanie wykryte:
- usunąć Wydarzenia
- wydrukować wiadomość
- czekać 2 sekundy przed dodaniem wydarzenia i odwrotu diody na
który normalnie pracuje się wspaniale, gdy Naciskam zielony przycisk. Próbowałem go kilka razy z rzędu i działa bez problemów. Z czerwonym jednak działa dobrze za pierwszym razem, a po raz drugi, ale po zakończeniu drugiego cyklu (pin) skrypt po prostu się zatrzymuje.
Biorąc pod uwagę oba zdarzenia są dość podobne, nie mogę wyjaśnić, dlaczego nie zakończyło się ono na końcu drugiego czerwonego przycisku.
EDYCJA: Zmieniłem szpilki odpowiednio z czerwonego i zielonego (albo do różnych pinów całkowicie lub zamienię je). Tak czy inaczej, zawsze czerwony kod przycisku (obecnie zielony przycisk) powoduje błąd. Wygląda więc na to, że nie jest to problem z fizycznym czerwonym przyciskiem, ani problem z pinem, to po prostu pozostawia kod, by być w błędzie ...
Być może jedno z wywołań "GPIO.output" podniosło wyjątek, a następnie 'add_events()' nigdy nie było wywoływane ponownie? – zvone
Dziękuję za uwagę w tej sprawie. Dodałem klauzule z wyjątkiem, ale nie zostały uruchomione. Wygląda na to, że to nie to. – user5740843
To również nie wyjaśnia, dlaczego działa dobrze, ale zawsze kończy się niepowodzeniem na końcu drugiego cyklu ... – user5740843