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.
while Schleife mit Taster Abfrage
-
- 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
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.
-
- 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
-
- 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.
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.
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.
Dateine oeffnet und schliesst man automatisch mit dem with-statement:
Wahrheitswerte kann man direkt abfragen, und die Werte 0, [], (), {}, "" sind alle Falsch, alles andere ist wahr. Also kannst du zb schreiben
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.
Code: Alles auswählen
LICHT_VORNE = 32
...
Code: Alles auswählen
with open("/var/www/fahrparameter.txt") as inf:
...
Code: Alles auswählen
if lampe:
...
else: # kein Grund lampe == 0 abzufragen, sonst kaeme man gar nicht hierher
...
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.
-
- 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.
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.
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.
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.
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.Philipp314 hat geschrieben:Der ganze Code ist schlecht, unübersichtlich und sehr unpraktisch geschrieben. Darum geht es aber nicht und es ist auch egal.
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.
-
- 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.
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
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.
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.
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 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.
-
- 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.
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.
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
Aber wo du recht hast, haste recht: ich muss mich damit nicht beschaeftigen. Tue ich ab jetzt auch nicht mehr
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 hat geschrieben:Mich hat lediglich interessiert wie man Taster als Unterbrechung mit in die While Schleife bekommt.
-
- 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.
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.
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.
-
- 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.