Hallo Leute
Ich erhalte beim Abarbeiten meines Programms folgende Fehlermeldung, leider kann ich nicht die ganze zeigen, denn der vorherige Teil wiederholt sich dauernd und füllt mir so die maximal anzeigbaren Zeilen in Thonny:
File "/home/pi/Desktop/Motorsteuerung/Tkinter_Motorsteuerung_PWM_Ultraschall.py", line 139, in norm_vor
self.AbstandVorne()
File "/home/pi/Desktop/Motorsteuerung/Tkinter_Motorsteuerung_PWM_Ultraschall.py", line 89, in AbstandVorne
self.norm_vor()
File "/home/pi/Desktop/Motorsteuerung/Tkinter_Motorsteuerung_PWM_Ultraschall.py", line 139, in norm_vor
self.AbstandVorne()
File "/home/pi/Desktop/Motorsteuerung/Tkinter_Motorsteuerung_PWM_Ultraschall.py", line 87, in AbstandVorne
print("vorne")
File "/usr/lib/python3/dist-packages/thonny/common.py", line 220, in serialize_message
return MESSAGE_MARKER + ascii(msg)
File "/usr/lib/python3/dist-packages/thonny/common.py", line 88, in __repr__
return "{}({})".format(self.__class__.__name__, ", ".join(items))
File "/usr/lib/python3/dist-packages/thonny/common.py", line 87, in <genexpr>
items = ("{}={}".format(k, repr(self.__dict__[k])) for k in keys)
RecursionError: maximum recursion depth exceeded while getting the repr of an object
Alles anzeigen
Das ist meiner Meinung nach das Problem, dass def AbstandVornezu viel aufgerufen wird.
Ich glaube das Problem hatte ich schon einmal, aber ich finde leider den entsprechenden Artikel nicht mehr.
Kann mir jemand helfen wie ich diese Fehlermeldung loswerde, wenn möglich ohne dass ich das ganze Programm komplett umbauen muss?
Hier noch das Programm:
!/usr/bin/python3
import tkinter as tk
import gpiozero
import time
STBY=gpiozero.LED(23)#Freigabe
motorLi = gpiozero.Motor(forward=18, backward=15)
motorRe = gpiozero.Motor(forward=24, backward=25)
sensor_vorne = gpiozero.DistanceSensor(echo=26, trigger=19, max_distance=5) #Distanzsensor vorne
sensor_links = gpiozero.DistanceSensor(echo=12, trigger=16, max_distance=5) #Distanzsensor links
sensor_rechts = gpiozero.DistanceSensor(echo=20, trigger=21, max_distance=5) #Distanzsensor rechts
sensor_hinten = gpiozero.DistanceSensor(echo=6, trigger=13, max_distance=5) #Distanzsensor hinten
PWMLi=gpiozero.PWMLED(14)
PWMRe=gpiozero.PWMLED(8)
class Motorsteuerung(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.pack()
self.vor_aktion=1#vorherige Aktion (Vorwärtsfahren, Rückwärtsfahren etc.)
self.freigabe()
self.PWMLi_wert=0
self.PWMRe_wert=0
self.AbstandVorne()
#self.widgetsAnlegen()
"""def widgetsAnlegen(self):
self.Freigabe = tk.Button(self)
self.Freigabe.config(text="Freigabe", bg="dark grey", command=self.freigabe)
self.Freigabe.grid (row=1, column=0, padx=10, pady=10)
self.Ausschalten = tk.Button(self)
self.Ausschalten.config(text="Ausschalten", bg="dark grey", command=self.ausschalten)
self.Ausschalten.grid (row=5, column=0, padx=10, pady=10)
self.AgUZS = tk.Button(self)
self.AgUZS.config(text="Motor A gegen den Uhrzeigersinn", bg="dark grey", command=self.MA_gegen_uhrzeigersinn)
self.AgUZS.grid (row=6, column=0, padx=10, pady=10)
self.AUZS = tk.Button(self)
self.AUZS.config(text="Motor A Uhrzeigersinn", bg="dark grey", command=self.MA_uhrzeigersinn)
self.AUZS.grid (row=7, column=0, padx=10, pady=10)
self.BgUZS = tk.Button(self)
self.BgUZS.config(text="Motor A gegen den Uhrzeigersinn", bg="dark grey", command=self.MB_gegen_uhrzeigersinn)
self.BgUZS.grid (row=6, column=1, padx=10, pady=10)
self.BUZS = tk.Button(self)
self.BUZS.config(text="Motor A Uhrzeigersinn", bg="dark grey", command=self.MB_uhrzeigersinn)
self.BUZS.grid (row=7, column=1, padx=10, pady=10)"""
def AbstandVorne(self):
self.dist_vorne=sensor_vorne.distance*100
self.dist_links=sensor_links.distance*100
self.dist_rechts=sensor_rechts.distance*100
self.dist_hinten=sensor_hinten.distance*100
if self.dist_vorne>=20:
print("vorne")
print(self.dist_vorne)
self.norm_vor()
elif self.dist_links>=10:
print("links")
self.links()
elif self.dist_rechts>=10:
print("rechts")
self.rechts()
elif self.dist_hinten>=10:
print("hinten")
self.hinten()
def norm_vor(self):
print("vor2")
if self.vor_aktion==1:
PWMLi.value=1
PWMRe.value=1
motorLi.forward()
motorRe.forward()
elif self.vor_aktion!=1:
print("1")
print(PWMLi.value)
print(PWMRe.value)
while PWMLi.value >0 and PWMRe.value >0:
print(self.PWMRe_wert)
self.PWMLi_wert=PWMLi.value*10
self.PWMRe_wert=PWMRe.value*10
print(self.PWMLi_wert)
self.PWMLi_wert=self.PWMLi_wert-1
self.PWMRe_wert=self.PWMRe_wert-1
print(self.PWMRe_wert)
PWMLi.value=self.PWMLi_wert/10
PWMRe.value=self.PWMRe_wert/10
print("2!")
print(PWMLi.value)
print(PWMRe.value)
time.sleep(0.2)
while PWMLi.value <1 and PWMRe.value <1:
self.PWMLi_wert=PWMLi.value*10
self.PWMRe_wert=PWMRe.value*10
self.PWMLi_wert=self.PWMLi_wert+1
self.PWMRe_wert=self.PWMRe_wert+1
PWMLi.value=self.PWMLi_wert/10
PWMRe.value=self.PWMRe_wert/10
motorLi.forward()
motorRe.forward()
print(PWMLi.value)
print(PWMRe.value)
time.sleep(0.2)
self.vor_aktion=1
self.AbstandVorne()
def links(self):
#while dist_vorne<=20:
print(self.dist_vorne)
if self.vor_aktion==2:
PWMLi.value=0.7
PWMRe.value=0.7
motorLi.forward()
motorRe.backward()
elif self.vor_aktion!=2:
print("2.")
print(PWMLi.value)
print(PWMRe.value)
while PWMLi.value >0 and PWMRe.value >0:
print(self.PWMRe_wert)
self.PWMLi_wert=PWMLi.value*10
self.PWMRe_wert=PWMRe.value*10
print(self.PWMLi_wert)
self.PWMLi_wert=self.PWMLi_wert-1
self.PWMRe_wert=self.PWMRe_wert-1
print(self.PWMRe_wert)
PWMLi.value=self.PWMLi_wert/10
PWMRe.value=self.PWMRe_wert/10
print("2?")
print(PWMLi.value)
print(PWMRe.value)
time.sleep(0.2)
while PWMLi.value <=0.7 and PWMRe.value <=0.7:
self.PWMLi_wert=PWMLi.value*10
self.PWMRe_wert=PWMRe.value*10
self.PWMLi_wert=self.PWMLi_wert+1
self.PWMRe_wert=self.PWMRe_wert+1
PWMLi.value=self.PWMLi_wert/10
PWMRe.value=self.PWMRe_wert/10
motorLi.forward()
motorRe.backward()
print(PWMLi.value)
print(PWMRe.value)
time.sleep(0.2)
print("Linksdrehung fertig")
self.vor_aktion=2
self.AbstandVorne()
def MA_uhrzeigersinn(self):
#AIN1.on()
#AIN2.off()
#gpiozero.PWMOutputDevice(13, active_high=True, initial_value=0, frequency=100, pin_factory=None)
#PWM()
PWMLi.value=0.5
motorLi.forward()
#motorLi.forward()
print("A Uhrzeigersinn")
def MA_gegen_uhrzeigersinn(self):
PWMLi.value=1.0
motorLi.backward()
print("A gegen den Uhrzeigersinn")
def MB_uhrzeigersinn(self):
#AIN1.on()
#AIN2.off()
#gpiozero.PWMOutputDevice(13, active_high=True, initial_value=0, frequency=100, pin_factory=None)
#PWM()
PWMRe.value=0.5
motorRe.forward()
#motorLi.forward()
print("B Uhrzeigersinn")
def MB_gegen_uhrzeigersinn(self):
PWMRe.value=1.0
motorRe.backward()
print("B gegen den Uhrzeigersinn")
def freigabe(self):
STBY.on()
print("Freigabe")
def ausschalten(self):
STBY.off()
print("Ausschalten")
root = tk.Tk()
app = Motorsteuerung(master=root)
app.mainloop()
root.destroy()
Alles anzeigen
Das Programm ist noch nicht fertig, deshalb existieren z.B. def rechts(self) und def hinten(self) noch nicht.
Und was ich erreichen möchte: Das ist ein Raupenfahrzeug, das mit zwei Motoren und vier Ultraschallsensoren fährt. Das Fahrzeug fährt vorwärts, solange der vordere Sensor kein Hindernis detektiert. Wenn er ein Hindernis sieht, bremst das Fahrzeug ab, dreht nach links (wenn dieser Sensor frei meldet) und beschleunigt dann wieder wenn der vordere Sensor wieder frei meldet. Alle Beschleunigungs- und Bremsvorgänge der Motoren habe ich über Rampen programmiert um die Mechanik zu schonen.
Liebe Grüsse
Bern