So guten Morgen,
wieder ist eine programmier und testreiche Nacht vergangen. Also den Denkansatz den ich gestern hier hatte, den habe ich dann auch so umgesetzt wie ich mir das vorgestellt habe. Und soweit ich das gesehen habe funzt das soweit ganz gut.
Ich muss nur mal eine Programmiertechnische Frage geklärt wissen. Wo ich gestern keine Lösung atok zur Verfügung hatte.
Ich habe das Script gestern nochmal komplett neu aufgesetzt und sämtliche Programablaufmodule jetzt als 'def' gesetzt. Unter anderem auch den Messvorgang.
Jedoch wenn ich dann im Programmablauf in der while True: Schleife dann die def Messung_vorn_perma(): aufrufe dann macht der zwar sein Messvorgang und gibt mir das Ergebnis auf dem Bildschirm auch aus. Aber wenn ich dahinter eine if Abfrage setze, die den distance Wert aus dem Messmodul der aktuellen Messung abfragen soll, dann bekomm ich eine Error Meldung das der globale name 'distance' nicht definiert wurde. Und somit übergibt der dann den Messwert nicht an die if Abfrage. Jetzt hab ich mir beholfen indem ich das Modul halt doch wieder direkt mit in den Programablauf komplett mit reingesetzt habe anstatt nur den def Namen des Messmoduls selber. Jedoch ist das keine gewünschte Lösung warum ich mir überhaupt die Mühe mache das gesamte Script neuaufzusetzen.
Code:
def Messung_vorn_perma():
#Messung Start
print "Messung_vorn_perma_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(0.1)
GPIO.output(12, True)
time.sleep(0.00001)
start = time.time()
GPIO.output(12, False)
while GPIO.input(16)==0:
pass
start = time.time()
while GPIO.input(16)==1:
pass
stop = time.time()
elapsed = stop-start
distance = elapsed * 17500
print "Abstand_vorn: %.1f cm" % distance
print "Messung_vorn_perma_ende
#Messung Ende
while True:
Messung_vorn_perma()
if distance < 20: #Und hier bekommt der dann die Meldung das Distance nicht als Globaler Name definiert wurde. Jedoch wenn ich den Namen definiere bringt mir dsa nichts da der mir das Messergebniss nicht mit übergibt.
Stop_anhalten()
ich hab wie schon erwähnt dann das Messmodul direkt mit in die Schleife gepackt und dann funktioniert auch die Übergabe des Messwertes.
Hat da jemand eine Idee wie die Definierung mit einer sauberen Übergabe geschrieben werden kann, ohne gleich das komplette Modul, in die whiles True Schleife reinzukopieren. Das ganze soll natürlich der Übersichtlichkeit dienen, damit der Programmablauf kurz gehalten wird und ich schneller nur an einer Stelle mal ne Code Anpassung durchführen kann.
MFG
Zappelmann
Lesezeichen