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.
Philipp314
User
Beiträge: 9
Registriert: Samstag 30. September 2017, 09:30

Moin. Ich habe in Python annähernd keine Erfahrung also nicht wundern

Ich habe folgendes Problem:
In dem Programm wird ein Zahlenwert aus einer Textdatei abgefragt.Dieser ist 0 oder 1 oder 2, 3, 4. Dieser Wert wird in fahren geladen. Anhand diesen Wertes wird eine while Schleife ausgeführt. Die io's 7, 11,13,15 sind inputs mit pull down Widerstände an denen Taster(öffner) liegen. wird ein Taster betätigt (false) dürfen jeweilige While Schleifen so lange nicht durchlaufen werden. Die erste while Schleifen darf so lange durchlaufen werden wenn fahren==1 und die inputs 7,11 und 15 einen H Pegel bekommen. Ich hatte schon ein paar sachen versucht aber es klappt nicht so ganz, wie z.b bei dem unteren Beispiel. Wenn die Bedingung am Anfang unwahr ist weil z.b an 7 kein H Pegel anliegt dann wird die Schleife nicht durchlaufen. Bin ich aber in der Schleife drinnen und drücke einen Taster, so durchläuft er sie trotzdem weiter.
So als würde die Bedingung nicht wieder überprüft werden. Ändert sich aber der Zahlenwert in fahren, so wird eine andere while schleife ausgeführt.

Try:
#hier abfrage des zahlenwertes aus der Textdatei

while(fahren==1 and io.input(7)==io.HIGH and io.input(11)==io.HIGH==io.input(15)==io.HIGH):
#Anweisungen

Es gibt 5 while Schleifen für die Überprüfungen der Werte 0-4 in fahren. Bei den Werten 1,2,3,4 werden zusätzlich 3 Taster als Bedingung mit abgefragt.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das ist alles sehr vage und unstrukturiert. Ohne etwas mehr Code und eine konkrete Fragestellung wirst du wohl nicht allzu viel Feedback erhalten...
Philipp314
User
Beiträge: 9
Registriert: Samstag 30. September 2017, 09:30

Ich habe den Code gerade nicht vorliegen. Es geht darum das die Pegel dreier input pins als Bedingung in eine while schleife sollen. An den Pins befinden sich Taster. Im Normalzustand liegt ein H Pegel an. liegt ein L Pegel an so darf die while schleife nicht durchlaufen werden
__deets__
User
Beiträge: 14534
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kann man immer noch nicht viel zu sagen. Wenn du drei Wahrheitswerte hast, und nur wenn alle wahr sind, soll ein Gesamtausdruck wahr werden, dann ist das ein simples „a and b and c“ dein Freund. Aber ich glaube du fährst besser wenn du mal deine ganze Aufgabe darlegst.
Philipp314
User
Beiträge: 9
Registriert: Samstag 30. September 2017, 09:30

alles klar. ich werde mich auf dem weg machen. in 50 min sollte ich es geposstet haben. Spätestens
Philipp314
User
Beiträge: 9
Registriert: Samstag 30. September 2017, 09:30

Es ist nur ein Programm von mehreren. Den gesamtheitlichen Zweck zu erklären ist zu viel. In dem Programm werden 2 txt Dateien ausgelesen. Anhand des Wertes aus fahrparameter.txt (wird in fahren abgelegt) werden eine der jeweiligen while Schleifen ausgeführt. Die while Schleifen sollen zudem nur durchlaufen werden wenn die jeweilige Pins (habe ich daneben als Kommentar geschrieben) ein H Signal bekommen. An diesen Pins befinden sich Schalter (öffner). Beispiel: befindet sich in fahren eine 1, so soll und wird auch die erste while Schleife ausgeführt.
Sobald an Pin 15, 13 oder 11 ein LOW Signal anliegt, darf diese Schleife aber nicht mehr durchlaufen werden, solange bis alle Pins ein H haben und in fahren eine 1 steht. Das bekomme ich nicht hin.
Bei den anderen Schleifen ist es das selbe,nur das ein anderer Zahlenwert und immer ein andere von den drei Pins in die Bedingung muss.


Code: Alles auswählen

#!/usr/bin/env python

import sys, tty, termios, os, serial, time
import HBridge
import RPi.GPIO as io
import time

#Relaisschaltung
io.setmode(io.BOARD)
io.setup(40,io.OUT) #->Relaiskarte VCC 
io.setup(32,io.OUT) #->Relaiskarte->Licht vorne
io.setup(36,io.OUT) #->Relaiskarte-Licht hinten
io.setup(38,io.OUT) #->Sperre Joystick
io.output(40,True)

#pull_up_down = GPIO.PUD_DOWN
#Bumper-,Schaltleistenabfrage. Pinnummern werden beibehalten zwecks Laenge
io.setup(7,io.IN, pull_up_down = io.PUD_DOWN)   #<-Bumper
io.setup(11,io.IN, pull_up_down = io.PUD_DOWN)  #<-HSC-Schaltleiste rechts
io.setup(13,io.IN, pull_up_down = io.PUD_DOWN)  #<-HSC-Schaltleiste links
io.setup(15,io.IN, pull_up_down = io.PUD_DOWN)  #<-HSC-Schaltleiste vorne

#Funktion fahrparameter() zum auslesen aus der Datei fahrparameter:
def fahrparameter():
      #global richtung
      richtung = 0
      fobj = open ("/var/www/fahrparameter.txt", "r")
      for line in fobj:
            richtung = int(line.rstrip())
      fobj.close()

      #fobj = open ("/var/www/fahrparameter.txt", "w")
      #fobj.write("0")
      #fobj.close()
      
      return richtung

#Funktion licht() zum ein-/ausschalten des Lichts
def licht():
      #global lampe
      lampe = 0
      #global rlampe
      rlampe = 0
      fobj = open ("/var/www/licht.txt")
      for line in fobj:
            lampe = int(line.rstrip())
      fobj.close()
      if (lampe==1): 		
            if (fahren==2):
                   io.output(36,False) #Relais werden mit LOW geschaltet
                   io.output(32,True) 
            if (fahren==1):
                   io.output(36,True)
                   io.output(32,False)    
      if (lampe==0):
            io.output(32,True)  
            io.output(36,True) 

#speedleft = 0
#speedright = 0
#maxspeed = 0.9 
arduino=serial.Serial('/dev/ttyUSB0', 9600)
#arduino.open()
time.sleep(6) 
    
while (True):
    #einlesen aus Datei fahrparameter.txt
    #1=vor, 2=back, 3=rechts, 4=links, 0=stop
    # a=vorn, b=back, c=links, d=rechts, e= Kameraservo vor, f= Kameraservo hinten    
    
    try:
            fahren = fahrparameter() #Abfrage Fahrbefehl
            licht()                  #Abfrage Lichteinschalten
            arduino.write("a")
            time.sleep(0.1)
            #vorn = int(arduino.readline())
            arduino.write("b")
            time.sleep(0.1)
            #back = int(arduino.readline())
            arduino.write("c")
            time.sleep(0.1)
            #rechts = int(arduino.readline())
            arduino.write("d")
            time.sleep(0.1)
            #links = int(arduino.readline())

            
                  

            while (fahren==1):# and io.input(15)==io.HIGH and io.input(13)==io.HIGH and io.input(11)==io.HIGH):
			
                    io.output(38,False)
                    arduino.write("e")               
                    HBridge.setMotorLeft(1)
                    HBridge.setMotorRight(1)
                    fahren = fahrparameter()
                    licht()
                else:
				    break
                                                    
                #arduino.write("a")                   #Ultraschall Anfang
                #vorn = int(arduino.readline())                             
                #while (vorn <= 50 and fahren==1): 
                #     speedleft = 0.0
                #     speedright = 0.0
                #     HBridge.setMotorLeft(speedleft)
                #     HBridge.setMotorRight(speedright)
                #     arduino.write("a")
                #     vorn = int(arduino.readline())
                #     fahren=fahrparameter()
                #     licht()                         #Ultraschall Ende
                     
            while (fahren == 2):# and io.input(7)==io.HIG and io.input(13)==io.HIGH and io.input(11)==io.HIGH):
                io.output(38,False)
                arduino.write("f")
                HBridge.setMotorLeft(-1)
                HBridge.setMotorRight(-1)
                fahren = fahrparameter()
                licht()

                #arduino.write("b")                   #Ultraschall Anfang
                #back = int(arduino.readline())
                #while (back <= 50 and fahren==2):
                #      speedleft = 0.0
                #      speedright = 0.0
                #      HBridge.setMotorLeft(speedleft)
                #      HBridge.setMotorRight(speedright)
                #      arduino.write("b")
                #      back = int(arduino.readline())
                #      fahren=fahrparameter()
                #      licht()                        #Ultraschall Ende
                     
            while (fahren == 3):# and io.input(15)= and io.input(7) and io.input(11):
                io.output(38,False)
                HBridge.setMotorLeft(0.2) #Reduzierte Drehgeschw.
                HBridge.setMotorRight(-0.2)
                fahren = fahrparameter()
                licht()

                #arduino.write("d")                   #Ultraschall Anfang
                #rechts = int(arduino.readline())
                #while (rechts <= 50 and fahren==3):
                #     speedleft = 0.0
                #     speedright = 0.0
                #     HBridge.setMotorLeft(speedleft)
                #     HBridge.setMotorRight(speedright)
                #     arduino.write("d")
                #     rechts = int(arduino.readline())
                #     fahren=fahrparameter()
                #     licht()                         #Ultraschall Ende
                     
            while (fahren == 4):  #  and io.input(15)==io.HIGH and io.input(13)==io.HIGH and io.input(7)==io.HIGH): 
                io.output(38,False)			
                HBridge.setMotorLeft(-0.2) #Reduzierte Drehgeschw.
                HBridge.setMotorRight(0.2)
                fahren = fahrparameter()
                licht()

                #arduino.write("c")                   #Ultraschall Anfang
                #links = int(arduino.readline())
                #while (links <= 50 and fahren==4):
                #     speedleft = 0.0
                #     speedright = 0.0
                #     HBridge.setMotorLeft(speedleft)
                #     HBridge.setMotorRight(speedright)
                #     arduino.write("c")
                #     links = int(arduino.readline())
                #     fahren=fahrparameter()
                #     licht()                         #Ultraschall Ende
                     
            while (fahren == 0): #Anhalten
                io.output(38,True)
                HBridge.setMotorLeft(0.0)
                HBridge.setMotorRight(0.0)
                fahren=fahrparameter()
                licht()
                
    except KeyboardInterrupt():
        print "Ende"
End
Zuletzt geändert von Philipp314 am Samstag 30. September 2017, 13:22, insgesamt 2-mal geändert.
__deets__
User
Beiträge: 14534
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte gleich bearbeiten und in die Codebox setzten. Damit ist so nichts anzufangen. Und ein bisschen Erklaerung wozu das ganze dienen soll kann auch nicht schaden.
__deets__
User
Beiträge: 14534
Registriert: Mittwoch 14. Oktober 2015, 14:29

Statt magischer Nummern fuer deine GPIOS definier und benutze Konstanten, so das man den Code auch da versteht, wo man die Initialisierung und ihre Kommentare nicht vor Augen hat.

Code: Alles auswählen

LICHT_VORNE = 32
...
Dateine oeffnet und schliesst man automatisch mit dem with-statement:

Code: Alles auswählen

with open("/var/www/fahrparameter.txt") as inf:
     ...
Wahrheitswerte kann man direkt abfragen, und die Werte 0, [], (), {}, "" sind alle Falsch, alles andere ist wahr. Also kannst du zb schreiben

Code: Alles auswählen

if lampe:
     ...
else: # kein Grund lampe == 0 abzufragen, sonst kaeme man gar nicht hierher
    ...
Du unterscheidest zwischen fahren == 1 und fahren == 2. Was passiert denn, wenn fahren etwas anderes ist? Ich sehe 1, 2, 3, 4. Und wofuer stehen die? Auch hier bieten sich wieder Konstanten an, damit man versteht, was der Code tun soll.

Die riesengrosse while-Schleife ist so nicht wirklich nachzuvollziehen. Zergliedere sie in einzelne Funktionen, die etwas bestimmtes machen.

Ausserdem gibt es offensichtliche Fehler im Code. Siehe zB Zeile 113. Ist das wirklich der Code, den du laufen laesst?

Woher kommen die Dateien, die du oeffnest und einliest? Ich nehme mal an du hast eine Webseite oder etwas anderes, welches die beschreibt? Zum einen ist das sehr ineffizient, weil du ja gar keine persistenten Daten brauchst. Zum anderen ist es fehlertraechtig, weil du nicht synchronisierst, wann wer darauf zugreift. Damit kann es passieren, dass du unvollstaendige Daten liest.

In der Funktion licht() greifst du auf fahren zu, das es gar nicht gibt. Benutze Funktionsparameter, um den Wert einzugeben.
Philipp314
User
Beiträge: 9
Registriert: Samstag 30. September 2017, 09:30

Ich habe es nicht geschrieben. Ja die Werte kommen von einer Webseite und es Funktioniert auch alles. Das Zeile 113 einen Fehler aufweist bezweifel ich. Es ist nur ein Kommentar. Wie man HIGH schreibt weiß ich. Es ging nur um die Pin Nummern die dort mit abgefragt werden sollen.
Der ganze Code ist schlecht, unübersichtlich und sehr unpraktisch geschrieben. Darum geht es aber nicht und es ist auch egal.

Es geht einfach darum das immer 3 von 4 Input io,s einen H Pegel haben müssen damit die jeweilige Schleife passiert ist doch dafür völlig unerheblich. Aber für das Verständnis, es wird dort nur ein output pin auf false gesetzt und zwei Werte an eine Funktion in einem anderen Programm übergeben. Das ganze Programm läuft durchgehend im Hintergrund.
Mich interessiert aber einfach nur wie ich mit Hilfe der Pegel an den input Pins, die ich als Kommentar neben den Schleifen geschrieben habe, das durchlaufen dieser while Schleife verhindere bis alle Pegel wieder H sind und der Wert in fahren stimmt.
__deets__
User
Beiträge: 14534
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das das im Kommentar stand habe ich hier in der Webansicht hier nicht gesehen. Nur das es HIG war. licht() funktioniert auch, weil es auf globalen Zustand zugreift. Grosses Tennis...

Es gibt einen Zusammenhang dazwischen, dass das Programm schlecht und unverstaendlich geschrieben ist, und das du nicht in der Lage bist, es deinen Wuenschen nach zu verbessern. Alles was ich verstehe ist, das du irgendwelche Pins in irgendwelchen Bedingungen irgendwie abfragen willst. Welche das sind, ob das inhaltlich sinnvoll ist, und das darum halt nicht geht, kann ich nach wie vor nicht beantworten. Darum bleibt's bei meiner Antwort: a and b and c. So oder so aehnlich steht das da aber ja schon. Wenn das also nicht klappt - viel Erfolg beim rumroedeln.

Ich schaue mir das jedenfalls nicht weiter an, wenn du nicht willens bist, das Programm fuer dich und fuer die, die hier helfen sollen, verstaendlich zu gestalten.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Philipp314 hat geschrieben:Der ganze Code ist schlecht, unübersichtlich und sehr unpraktisch geschrieben. Darum geht es aber nicht und es ist auch egal.
Das ist nicht egal, denn der Code ist an der Grenze der Unwartbarkeit, wie Du sicherlich selbst schon gemerkt hast. Das Programm funktioniert allenfalls per Zufall und selbst dies bezweifle ich, denn keine der while fahren Schleifen verfügt über eine Abbruchbedingung.

Und, wie ich gerade gesehen habe, dürfte es aufgrund des Fehlers in Zeile 98 überhaupt nicht laufen.
Ich würde Dir empfehlen das Skript einzustampfen und neu anzulegen. So umfangreich ist es nicht, das dies ein Problem wäre.
Philipp314
User
Beiträge: 9
Registriert: Samstag 30. September 2017, 09:30

Es funktioniert immer und ohne Probleme. Das Einbeziehen der Stoßtaster an den Pins funktioniert nicht, daher stehen die nicht in den Bedingungen der While Schleifen drinnen. Deswegen auch die Frage. Alles andere spielt da keine Rolle. Das Programm läuft dauerhaft im Hintergrund und es wird immer eine der jeweiligen While Schleifen ausgeführt, da in fahrparameter.txt immer 0 oder 1 oder 2 oder 3 oder 4 steht.
Mit meinem Willen hat es nichts zu tun. Das Programm zu erklären macht keinen Sinn wenn ich die anderen 4 Programme dazu nicht auch noch erkläre. Und es geht nicht darum das es nicht schön geschrieben ist. Deswegen fange ich nicht an für jemand anderes den Code hübsch zu gestalten.


Und um es zu vereinfachen, lasse ich einfach alles weg und reduziere das mal so, dass es nur um die Fragestellung geht.
Mal angenommen ich möchte eine dieser while Schleifen durchgehend durchlaufen lassen, wenn der jeweilige Parameter in fahren stimmt.
Zusätzlich dürfen immer 3 der 4 Taster nicht betätigt sein. Welche das sein sollen steht neben den Bedingungen.
Schreibe ich while(fahren==1 and io.input(TASTER2) and io.input(TASTER3) and io.input(TASTER4)): dann wird die Schleife nicht ausgeführt wenn ich einen der Taster betätige, bevor ich in der while Schleife bin. Sobald ich es aber bin, wird diese weiter ausgeführt solange wie in fahren einer 1 steht. Ob ich die Taster betätige oder nicht macht keinen unterschied. Das ist das Problem.

Code: Alles auswählen

#!/usr/bin/env python

import sys, tty, termios, os, serial, time
import HBridge
import RPi.GPIO as io
import time


TASTER1 = 7
TASTER2 = 11
TASTER3 = 13 
TASTER4 = 15

io.setup(TASTER1,io.IN, pull_up_down = io.PUD_DOWN)   
io.setup(TASTER2,io.IN, pull_up_down = io.PUD_DOWN)  
io.setup(TASTER3,io.IN, pull_up_down = io.PUD_DOWN)  
io.setup(TASTER4,io.IN, pull_up_down = io.PUD_DOWN)  

#Funktion fahrparameter() zum auslesen aus der Datei fahrparameter:
def fahrparameter():
      richtung = 0
      fobj = open ("/var/www/fahrparameter.txt", "r")
      for line in fobj:
            richtung = int(line.rstrip())
      fobj.close()    
      return richtung


while (True):
  
    
    try:
            fahren = fahrparameter() 

            while (fahren==1):      # TASTER2,TASTER3,TASTER4 sollen zusätzlich H sein
			
                io.output(38,False)
                print "sinnlos1"
                fahren = fahrparameter()


                     
            while (fahren == 2):  # TASTER1,TASTER2,TASTER3 sollen zusätzlich H sein
                io.output(38,False)
                print "sinnlos2"
                fahren = fahrparameter()



                     
            while (fahren == 3):    # TASTER1,TASTER2,TASTER4 sollen zusätzlich H sein
                io.output(38,False)
                print "sinnlos3"
                fahren = fahrparameter()



                     
            while (fahren == 4):    # TASTER1,TASTER3,TASTER4 sollen zusätzlich H sein
                io.output(38,False)	
                print "sinnlos4"		
                fahren = fahrparameter()



                     
            while (fahren == 0):
                io.output(38,True)
                fahren=fahrparameter()

                
    except KeyboardInterrupt():
        print "Ende"
End
__deets__
User
Beiträge: 14534
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es geht nicht um "huebsch" mit Glitzer und Strasssteinchen. Es geht um verstaendlich. Sowohl beim Code, als auch bei der Problembeschreibung.

Da bist du immer noch nicht substantiell ueber "ich habe irgendwelche Taster, und ich mache irgendwas, und dann will ich, das irgendwas anderes passiert".

Statt GPIO Nummern TASTER1 bis TASTER4? Ist das dein Ernst? Was ist daran denn bitte besser? Das riecht schon nach Vorsatz.

Und wenn du deine anderen Programme auch erklaeren musst, um das hier zu erklaeren, dann ist das Problem damit genau was?

Abgesehen davon, dass man das gar nicht muss. Etwas wie

"""
Ich habe einen Roboter, den ich in vier Richungen fahren kann. Vorwaerts, Rueckwaerts, rechts und links drehen, und natuerlich stopp. Und jetzt moechte ich Kollisionsschalter einbauen, VORNE, HINTEN, LINKS und RECHTS. Und wenn man faehrt darf jeweils nur der Schalter ausgeloest sein, welcher der Fahrtrichtung gegenueber liegt, damit man von einem Hindernis wieder wegfahren kann
""".

Haette man alles schon schreiben koenen vor 5 Stunden. Muss man aber nicht.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Philipp314 hat geschrieben:Und es geht nicht darum das es nicht schön geschrieben ist. Deswegen fange ich nicht an für jemand anderes den Code hübsch zu gestalten.
Das hast Du falsch verstanden. Es geht darum, dass der Code für Dich übersichtlich abgefasst ist, so dass er wartbar und verständlich bleibt. Dein gegenwärtiges Problem wäre leichter zu vermitteln und zu lösen, wenn dem so wäre. Vielleicht wäre es auch gar nicht erst aufgetreten.
Philipp314
User
Beiträge: 9
Registriert: Samstag 30. September 2017, 09:30

Ich helf bei der Sache auch nur freiwillig. Deshalb habe ich keine Lust alles zu erklären. Fakt ist ich muss mich genau so wenig damit beschäftigen wie Sie.
Ob ich die GPIO's als Beispiel Taster, Bumper, Stoßschalter oder sonstiges nenne, ändert die Funktion dieses Teils nicht. Der Zustand an dem jeweiligen Pin ändert seinen Zustand von H zu L wenn dieser betätigt wird.
Denn Sinn und Zweck des ganzes haben Sie schon richtig aufgefasst aber eine wirkliche Rolle spielt das für die Frage nicht.
Mich hat lediglich interessiert wie man Taster als Unterbrechung mit in die While Schleife bekommt.
__deets__
User
Beiträge: 14534
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.
Antworten