Wihle nach abgelaufener Zeit beenden

  • Hallo Leute

    Ich frage nachdem ich mit Google nicht weitergekommen bin.

    Ich schalte einen GPIO Ausgang,

    In einer While Schleife warte ich bis ein Eingang HIGH wird setze den Ausgang rück und beende die Schleife mit break.

    Nun möchte ich, dass wenn nach einiger Zeit "100 Sekunden" der Eingang nicht kommt den Ausgang rücksetzen und die Schleife beenden.

    Ich bitte um Eure Hilfe.

    So sieht die Schleife jetzt aus:

    while True:

    if (GPIO.input(23) or GPIO.input(20) and GPIO.input(26)):

    GPIO.output(26, 1)

    print("Tür ist offen")

    break

    Vielen Dank schon mal im Voraus

  • Hier ist das ganze Script

    Spoiler anzeigen

    #!/usr/bin/env python

    #coding: utf8

    import RPi.GPIO as GPIO

    from time import sleep

    GPIO.setwarnings (False)

    # Zählweise der Pins festlegen

    GPIO.setmode(GPIO.BCM)

    GPIO.setup(20, GPIO.OUT)

    GPIO.setup(26, GPIO.OUT)

    GPIO.setup(23, GPIO.IN)

    # wenn Tür unterwegs, stoppen.

    if GPIO.input(20) == 0:

    GPIO.output(20, 1)

    print("Tür stoppen")

    sleep(2)

    # Tür öffnen

    if (GPIO.input(26) == 1 and GPIO.input(23) == 0):

    GPIO.output(26, 0)


    while True:

    if (GPIO.input(23) or GPIO.input(20) and GPIO.input(26)):

    GPIO.output(26, 1)

    print("Tür ist offen")

    break

    GPIO.cleanup()


  • Das ist immer noch der Pin 26 doppelt belegt. Aber auch nicht wirklich eine Antwort auf die Frage, was du *vor* hast. Sondern nur mehr Code. Was fuer ein Problem soll der wie loesen?

  • Wenn man einen Ausgang abfragen will heißt das: GPIO.input(26) == 1

    Meine Frage war. Kann ich die While Schleife nach einer gewissen Zeit beenden wenn der Eingang GPIO.input(23) nicht kommt.

    Danke

  • Seufz. Du hast es immer noch nicht verstanden. In deinem Code benutzt du Pin 26 sowohl als input als auch als output. Das kann eigentlich nicht richtig sein. Aber soll wohl so.

    Und dann hast du immer noch nicht die Frage beantwortet, *wozu* das ganze ist. Denn vielleicht ist die Loesung, die dir vorschwebt, gar nicht die richtige fuer dein Problem.

    Aber hier, genau das Seil, nach dem du gefragt hast:

    Code
    timestamp = time.monotonic()
    while True:
         ... # tuwas
         if time.monotonic() - timestamp > SEKUNDEN:
            break
  • Mein Ziel ist es ein Tor auf und zu zufahren, dieses Script ist zum auffahren.

    Dabei mocht ich die Relais dafür gegenseitig verriegeln, auch möchte ich das Ganze abbrechen können.

    Und falls irgend etwas hängen bleibt soll das Script nicht in der While Schleife hängen.

    • Offizieller Beitrag

    Wenn man einen Ausgang abfragen will heißt das: GPIO.input(26) == 1

    Das stimmt zwar, musste auch erst nochmals in die Doku (*) sehen, aber der Status kann ja alles sein ohne der Abfrage welcher gewünscht ist, wie in der Schleife.


    *)

    Note that you can read the current state of a channel set up as an output using the input() function.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!