Ok Jungs,
zum ersten freut es mich das Ihr hier gleich direkt so zahlreich auf meine Anfrage antwortet.
kurz ein paar Worte zu meiner Person.
Ich hab von Python Programmierung null Plan. Eigentlich generel nicht vom Programmieren, aber das ist erstmal egal.
Jedoch hab ich mir diesen Code mühsam zusammengebaut. und bisher funzt das scheinbar was ich da zusammengebaut habe.
dies ist natürlich nur ein Schnipsel aus dem gesamten Code.
ich werde mal das gesamte Script hier eben linken. Denn mit einigen Eurer Aussagen kann ich atm nicht wirklich was anfangen.
Das ich natürlich noch vieles über Python lernen muss ist mir klar, aber das geht natürlich auch nicht über Nacht. Wobei ich mich jetzt seit ca. 3 Wochen mit Python beschäftige komme ich nur langsam voran. Und Bücher lesen na ja es vermittelt zwar einiges an Wissen aber die Praxis ist meistens doch etwas komplexer.
So damit ihr überhaupt wisst worum es sich bei dem Codeschnippsel handelt.
hier kurz ein paar Worte dazu.
Ich arbeite gerade an einem kleinem Roboter Projekt
https://www.youtube.com/watch?v=hN7qRw3E0Gk.
Der Raspberry Pi ist das Gehirn und ich hab ein paar Motoren / Servos / und ein Ultraschallmodul für eine Abstandsmessung.
Das Ziel des Projektes ist ein autonomen Roboter zu bauen der nirgendwo anstößt und Hindernissen selber ausweichen kann.
Der Schnippsel selber war nur eine Messfunktion. von dem HC-SR04 US-Modull
so ich setzt mal mein aktuellen Code hier rein und dann bleibt also immer noch die Frage einer globalen definition der variable distance für die übergabe an die if Abfrage.
Mir wäre es recht mir da einfach entweder als nachvollziehbares Beispiel zu posten oder das script dahingehend anzupassen.
Die Prints im übrigen waren absichtlich gwollt um einie grafische ausgabe über den Puttyterm auf meinem PC zu bekommen um zu sehen was der gerade so macht wenn der unterwegs ist.
Um Fehler festzustellen ob ich mit meiner Programmierung gerade falsch liege oder ob der Ablauf sauber umgesetzt wird wi ich mir das vorstelle. Desweiteren soll dies später auch als Logfile dienen.
Nochmal ich bin leider kein Profi im Programmieren. Jedoch sehr lernfähig wenn ich etwas gut erklärt bekomme oder es durch eigene Analyse sauber nachvollziehen kann.
Code: Alles auswählen
#!/usr/bin/python
from time import sleep
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
print "Ultraschallmessung mit HC-SR04"
#A routine to control a pair of pins
def ControlAPairOfPins(FirstPin,FirstState,SecondPin,SecondState):
if FirstState == "1":
GPIO.output(int(FirstPin),True)
else:
GPIO.output(int(FirstPin),False)
if SecondState == "1":
GPIO.output(int(SecondPin),True)
else:
GPIO.output(int(SecondPin),False)
return
def dist_vorn_perma():
dist_vorn_perma = elapsed * 17000
'''
def dist_links_perma():
dist_links_perma = elapsed * 17000
def dist_rechts_perma():
dist_rechts_perma = elapsed * 17000
def distance():
distance = elapsed * 17000
#das war hier mein Ansatz was die globale namens definition angeht. jedoch liege ich hier programmiertechnisch scheinbar total daneben.
#deswegen benötige ich von Euch PROFIS mal ein sauberes Beispiel damit sämtliche distance Werte später bei der richtigen if Abfrage übergeben
#werden können und ich dadurch die schleife klein sauber und übersichtlich halten kann.
#ansonten funktioniert der Code bisher im groben und ganzen. Der Feinschliff ist natürlich schon seit ein paar Tagen in Arbeit.
def dist_links():
dist_links = elapsed * 17000
def dist_rechts():
dist_rechts = elapsed * 17000
'''
def Stop_anhalten_permanent():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(11,GPIO.OUT)
ControlAPairOfPins("19","0","7","0")
ControlAPairOfPins("22","0","11","0")
print "Stop_vorwaertz"
def Vorwaertz_fahren():
#Geradeaus Start
print "vorwaertz_fahren"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(11,GPIO.OUT)
ControlAPairOfPins("19","1","7","0")
ControlAPairOfPins("22","1","11","1")
print "Geradeaus_vorwaerts"
#time.sleep(True)
#Geradeaus Ende
def Geradeaus_vorwaertz_start():
#Geradeaus Start
print "Geradeaus_vorwaertz_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(11,GPIO.OUT)
ControlAPairOfPins("19","1","7","0")
ControlAPairOfPins("22","1","11","1")
print "Geradeaus_vorwaerts"
# Geradeaus Ende
def Links_fahren():
#Drehung links Start
print "Drehung_nach_links_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(11,GPIO.OUT)
ControlAPairOfPins("19","1","7","0")
ControlAPairOfPins("22","0","11","1")
time.sleep(0.5)
print "Drehung_nach_links_ende"
#Drehung links Ende
def Rechts_fahren():
#Drehung rechts Start
print "Drehung_nach_rechts_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(11,GPIO.OUT)
ControlAPairOfPins("19","1","7","1")
ControlAPairOfPins("22","1","11","1")
print "Drehung_nach_rechts"
time.sleep(0.5)
print "Drehung_nach_rechts_ende"
#Drehung rechts Ende
def Rueckwaertz_fahren():
#Drehung zurueck Start
GPIO.setmode(GPIO.BOARD)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(11,GPIO.OUT)
ControlAPairOfPins("19","1","7","1")
ControlAPairOfPins("22","1","11","1")
print "Fahre zurueck"
time.sleep(1.5)
print "zurueck_ende"
#Drehung rueckwaertz Ende
def Servo_permanent_vorn():
#Servo anfang mitte Start
print "Robo_Cycle"
print "Servo_mitte_start"
GPIO.setup(26,GPIO.OUT)
p = GPIO.PWM(26,0.1)
p.start(5.5)
p.ChangeDutyCycle(5.5)
time.sleep(True)
p.stop(5.5)
print "Servo_mitte_ende"
#Servo anfang mitte Ende
def Servo_permanent_links():
#Drehung nach links Start
print "Servo_links_permanent_start"
GPIO.setup(26,GPIO.OUT)
p = GPIO.PWM(26,50)
p.start(5.5)
p.ChangeDutyCycle(8.5)
time.sleep(0.2)
p.stop(8.5)
print "Servo_links_permanent_ende"
#Drehung nach links Ende
def Servo_permanent_rechts():
#Drehung nach rechts Start
print "Servo_rechts_permanent_start"
GPIO.setup(26,GPIO.OUT)
p = GPIO.PWM(26,50)
p.start(8.5)
p.ChangeDutyCycle(3.5)
time.sleep(0.2)
p.stop(3.5)
print "Servo_rechts_permanent_ende"
#Drehung nach rechts Ende
def Servo_permanent_mitte():
#Drehung Mitte Start
print "Servo_mitte_permanent_start"
GPIO.setup(26,GPIO.OUT)
p = GPIO.PWM(26,50)
p.start(3.5)
p.ChangeDutyCycle(5.5)
time.sleep(0.2)
p.stop(5.5)
print "Servo_mitte_permanent_ende"
#Drehung Mitte Ende
def Servo_anfang_mitte():
#Servo anfang mitte Start
print "Robo_Cycle"
print "Servo_mitte_start"
GPIO.setup(26,GPIO.OUT)
p = GPIO.PWM(26,0.1)
p.start(5.5)
p.ChangeDutyCycle(5.5)
time.sleep(0.1)
p.stop(5.5)
print "Servo_mitte_ende"
#Servo anfang mitte Ende
def Servo_links():
#Drehung nach links Start
print "Servo_links_start"
GPIO.setup(26,GPIO.OUT)
p = GPIO.PWM(26,50)
p.start(5.5)
p.ChangeDutyCycle(10.5)
time.sleep(0.3)
p.stop(10.5)
print "Servo_links_ende"
#Drehung nach links Ende
def Servo_rechts():
#Drehung nach rechts Start
print "Servo_rechts_start"
GPIO.setup(26,GPIO.OUT)
p = GPIO.PWM(26,50)
p.start(10.5)
p.ChangeDutyCycle(1)
time.sleep(0.3)
p.stop(1)
print "Servo_rechts_ende"
#Drehung nach rechts Ende
def Servo_mitte():
#Drehung Mitte Start
print "Servo_mitte_start"
GPIO.setup(26,GPIO.OUT)
p = GPIO.PWM(26,50)
p.start(1)
p.ChangeDutyCycle(5.5)
time.sleep(0.2)
p.stop(5.5)
print "Servo_mitte_ende"
#Drehung Mitte Ende
def Messung_permanent_vorn():
#Messung Start
print "Messung_vorn_permanent_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
dist_vorn_perma = elapsed * 17500
print "Abstand_vorn: %.1f cm" % dist_vorn_perma
#Messung Ende
def Messung_permanent_links():
#Messung links Start
print "Messung_links_permanent_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
dist_links_perma = elapsed * 17000
print "Abstand_links: %.1f cm" % dist_links_perma
print "Messung_links_permanent_ende"
#Messung links Ende
def Messung_permanent_rechts():
#Messung rechts Start
print "Messung_rechts_permanent_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
dist_rechts_perma = elapsed * 17000
print "Abstand_rechts: %.1f cm" % dist_rechts_perma
print "Messung_rechts_permanent_ende"
#Messung rechts Ende
def Messung_distance_vorn():
#Messung Start
print "Messung_vorn_permanent_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(0.5)
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
#Messung Ende
def Messung_dist_links():
#Messung links Start
print "Messung_links_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(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
dist_links = elapsed * 17000
print "Abstand_links: %.1f cm" % dist_links
print "Messung_links_ende"
#Messung links Ende
def Messung_dist_rechts():
#Messung rechts Start
print "Messung_rechts_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(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
dist_rechts = elapsed * 17000
print "Abstand_rechts: %.1f cm" % dist_rechts
print "Messung_rechts_ende"
#Messung rechts Ende
while True:
Servo_anfang_mitte()
Vorwaertz_fahren()
#Messung Start
print "Messung_vorn_permanent_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
dist_vorn_perma = elapsed * 17500
print "Abstand_vorn: %.1f cm" % dist_vorn_perma
#Messung Ende
if dist_vorn_perma < 30:
Stop_anhalten_permanent()
Rueckwaertz_fahren()
print "STOP_VORN"
Servo_links()
#Messung links Start
print "Messung_links_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(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
dist_links = elapsed * 17000
print "Abstand_links: %.1f cm" % dist_links
print "Messung_links_ende"
#Messung links Ende
Servo_rechts()
#Messung rechts Start
print "Messung_rechts_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(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
dist_rechts = elapsed * 17000
print "Abstand_rechts: %.1f cm" % dist_rechts
print "Messung_rechts_ende"
#Messung rechts Ende
Servo_permanent_mitte()
if dist_links > dist_rechts:
Links_fahren()
else:
Rechts_fahren()
else:
Geradeaus_vorwaertz_start()
Servo_permanent_links()
#Messung links Start
print "Messung_links_permanent_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
dist_links_perma = elapsed * 17000
print "Abstand_links: %.1f cm" % dist_links_perma
print "Messung_links_permanent_ende"
#Messung links Ende
if dist_links_perma < 30:
Stop_anhalten_permanent()
print "STOP_LINKS"
Rueckwaertz_fahren()
Servo_links()
#Messung links Start
print "Messung_links_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(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
dist_links = elapsed * 17000
print "Abstand_links: %.1f cm" % dist_links
print "Messung_links_ende"
#Messung links Ende
Servo_rechts()
#Messung rechts Start
print "Messung_rechts_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(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
dist_rechts = elapsed * 17000
print "Abstand_rechts: %.1f cm" % dist_rechts
print "Messung_rechts_ende"
#Messung rechts Ende
Servo_permanent_mitte()
if dist_links > dist_rechts:
Links_fahren()
else:
Rechts_fahren()
else:
Geradeaus_vorwaertz_start()
Servo_permanent_rechts()
#Messung rechts Start
print "Messung_rechts_permanent_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
dist_rechts_perma = elapsed * 17000
print "Abstand_rechts: %.1f cm" % dist_rechts_perma
print "Messung_rechts_permanent_ende"
#Messung rechts Ende
if dist_rechts_perma < 30:
Stop_anhalten_permanent()
print "STOP_RECHTS"
Rueckwaertz_fahren()
Servo_links()
#Messung links Start
print "Messung_links_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(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
dist_links = elapsed * 17000
print "Abstand_links: %.1f cm" % dist_links
print "Messung_links_ende"
#Messung links Ende
Servo_rechts()
#Messung rechts Start
print "Messung_rechts_start"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(16,GPIO.IN)
GPIO.output(12, False)
time.sleep(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
dist_rechts = elapsed * 17000
print "Abstand_rechts: %.1f cm" % dist_rechts
print "Messung_rechts_ende"
#Messung rechts Ende
Servo_permanent_mitte()
if dist_links > dist_rechts:
Links_fahren()
else:
Rechts_fahren()
else:
Geradeaus_vorwaertz_start()
# Servo_permanent_mitte()
so gut jetzt seid Ihr dran. gebt mir bitte den entscheidenen Hinweis was es mit dieser globalen namensdefinierung aufsich hat. und wie das dann in meinem fall aussehen müsste. damit es zu keinem Error kommt.
Vielen Dank für Eure Mühe sich hiermit mal kurz beschäftigen zu müssen.
MFG
Zappelmann