while Schleife mit Taster Abfrage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Gut das du weisst, was man fuer die Beantwortung der Frage wissen muss, und was nicht. Komisch nur, dass du nicht weisst, wie man das Problem loest.

Aber wo du recht hast, haste recht: ich muss mich damit nicht beschaeftigen. Tue ich ab jetzt auch nicht mehr :lol:
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Philipp314 hat geschrieben:Mich hat lediglich interessiert wie man Taster als Unterbrechung mit in die While Schleife bekommt.
Mit dieser Frage lässt sich etwas anfangen und die Antwort lautet: Event-gesteuerter Programmablauf. Dafür aber muss das Programm definitiv neu geschrieben werden.
Philipp314
User
Beiträge: 9
Registriert: Samstag 30. September 2017, 09:30

kbr in diesem Programm an sich passiert nichts aufregendes. Es werden nur Zahlenwerte aus txt Dateien ausgelesen. Der Wert in licht.txt sorgt dafür das jeweilige IO's in Abhängigeit des Wertes aus der fahrparameter.txt gesetzt oder rückgesetzt werden.
Fahrparameter.txt enthält Werte von 0-4. Diese werden in "fahren" gespeichert und stehen für Fahrtrichtungen. 0 stop,1 vorwärts, 2 rückwärts 3 links, 4 rechts. Anhand dieser Werte landet man in einer while Schleife. In den Schleifen werden dann auch nur Werte an eine Funkion Names HBridge übergeben, welche sich in einem anderen Programm befindet.
An einem Gerät befinden sich Stoßschalter. Ist einer Betätigt, so liefert er ein L Signal. Jeder Stoßschalter soll bei Betätigung 3 von 4 Fahrtrichtungen sperren.

Dennoch wollte ich wissen wie der Zustand (H/L) von 3 input Pins das Durchlaufen einer while Schleife verhindert. Da spielt der Rest überhaupt keine Rolle. Ich helfe hier auch nur und wollte das so schnell wie möglich beenden.
Das eben verkürzte Beispiel langt auch dafür da die Anweisungen innerhalb der Schleifen keine Rolle spielen, genauso wenig wie das auslesen der Textdateien.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Also, ich habe weniger Ahnung als __deets__ und kbr und vielleicht verstehe ich nicht alles. Doch so wie ich das sehe, Deine Schleife die läuft und läuft und läuft und hat gar nicht vor etwas anderes zu machen. Stelle Dir doch nebenher die Frage, warum die etwas anderes machen sollte, wenn die nur aus irgendeiner Textdatei (fahrparameter.txt) sich die Anfangswerte holt und mit denen losläuft. Dann müsste doch schon einmal etwas mit rein von dem, was Du da jetzt auskommentiert hast. Und Deine erste Fragestellung ging ja auch in diese Richtung. Da müsstest Du halt die Werte überprüfen, was mit denen nicht stimmt, denn die Schleifen werden diese gewiss prüfen, würde ich mir denken.
Philipp314
User
Beiträge: 9
Registriert: Samstag 30. September 2017, 09:30

Das ist durchaus richtig und wohl gewollt gewesen. Dieses Programm ist im Hintergrund versetzt worden und läuft dauerhaft. Die Zahlenwerte in fahrparameter.txt kommen von einer Webseite. Diese öffnet man mit dem Handy und kann ein Gerät steuern. Wird nichts gemacht, so steht in fahrparameter.txt eine 0. Drückt man einen Richtungsknopf so steht , je nach Richtung, eine 1,2,3 oder 4 in der txt DateiI. Anhand des Zahlenwertes landet man in der jeweiligen while Schleife. Diese soll auch durchgehend durchlaufen werden wie der Zahlenwert vorhanden ist. Die Taster sollen aber mit in den Bedingungen, sodass die Schleife nicht mehr durchlaufen wird sobald und solange ein LOW Signal geführt wird.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Die Architektur des Programms ist zu kompliziert. Benötigt wird lediglich eine zentrale while Schleife in der abgefragt wird:

- liegt eine Richtungsinformation vor?
- liegen Tastendruck-Ereignisse vor?

Anhand dieser Informationen wird eine Aktion ausgeführt, die möglichst schnell zurückkehren soll, damit auf weitere Ereignisse reagiert werden kann.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Mal so als Gerüst. Lässt sich auf auf Threading erweitern, falls dies erforderlich sein sollte.

Code: Alles auswählen

# here import statements
# and constants definitions


def init_rpio():
    # set init states here
    pass
    
    
def get_direction():
    # return next direction or 0
    return 0
    
    
def get_button_event():
    # gets information about pressed buttons
    # and returns an according result
  
  
def main_control():
    while True:
        direction = get_direction() 
        button_event = get_button_event()
        # depending on direction and button_event
        # call:
        #   handler()
        # or:
        #   another_handler()
        # and so on.


# entry point
def main():
    try:
        main_control()
    except KeyboardInterrupt:
        pass


# global call, so module can run standalone or get imported somewhere else.
init_rpio()


if __name__ == '__main__':
    main()
            
Antworten