class AutonomFunctions(): def __init__(self): GPIO.setmode(GPIO.BCM) self.areas = 16 self.sonicMotor = Stepper() self.wheels = Wheel() self.motorPosition = 0 #gibt an ob der SonicMotor links oder rechts steht 0=links def entfernung(self, Trigger, Echo): # Trig High setzen GPIO.output(Trigger, True) # Trig Low setzen (nach 0.01ms) time.sleep(0.00001) GPIO.output(Trigger, False) Startzeit = time.time() Endzeit = time.time() # Start/Stop Zeit ermitteln while GPIO.input(Echo) == 0: Startzeit = time.time() while GPIO.input(Echo) == 1: Endzeit = time.time() # Vergangene Zeit Zeitdifferenz = Endzeit - Startzeit # Schallgeschwindigkeit (34300 cm/s) einbeziehen entfernung = (Zeitdifferenz * 34300) / 2 return entfernung def checkClear(self, Trigger, Echo): self.listAreas = [] self.listAreasReturn = [] areaMerker = -1 for i in range(self.areas): distanz = self.entfernung(Trigger, Echo) #prüfung ob die Distanz größer als 20cm ist und in einer Reihenfolge zum vorigen Wert liegt, # wenn ja dann wird der Bereich i in die listAreas eingetragen if (distanz > 20 and i == areaMerker + 1): self.listAreas.append(i) else: if len(self.listAreas) < 3: del self.listAreas[:] elif len(self.listAreas) > len(self.listAreasReturn): self.listAreasReturn = list(self.listAreas) del self.listAreas[:] #Motor zur nächsten Position fahren und erneut die Distanz messen self.sonicMotor.forwardSonic() time.sleep(0.2) areaMerker = i #erneute Abfrage ob hinten der Wert höher ist. Dies muss geschehen da der letzte Wert angehängt werden kann und dann nicht mehr in die vorige else-Abfrage gegangen wird if len(self.listAreas) > len(self.listAreasReturn): self.listAreasReturn = list(self.listAreas) del self.listAreas[:] if 0 in self.listAreasReturn: self.wheels.leftStep() time.sleep(2.0) self.wheels.forwardStep() time.sleep(2.5) self.wheels.rightStep() time.sleep(2.0) self.wheels.stopStep() elif 15 in self.listAreasReturn: self.wheels.rightStep() time.sleep(2.0) self.wheels.forwardStep() time.sleep(2.5) self.wheels.leftStep() time.sleep(2.0) self.wheels.stopStep() else: self.wheels.backwardStep() time.sleep(1.0) self.wheels.stopStep() self.checkClear(3, 2) #Motor zurück in die Ausgangsposition bringen self.sonicMotor.backwardSonic() return self.listAreasReturn
class TastaturMove(Thread): def __init__(self): Thread.__init__(self) self.window = curses.initscr() #Klasse für die drei Schrittmotoren self.stepperMotor = Stepper() self.wheels = Wheel() curses.noecho() self.window.keypad(True) self.daemon = True self.start() def run(self): try: while (True): self.key_char = self.window.get_wch() print(self.key_char) if (self.key_char == curses.KEY_LEFT): print("links") self.stepperMotor.forwardM1() Speak().voice("links") elif (self.key_char == curses.KEY_RIGHT): print("rechts") self.stepperMotor.backwardsM1() Speak().voice("rechts") elif (self.key_char == curses.KEY_UP): print("hoch") self.stepperMotor.backwardsM3() Speak().voice("hoch") elif (self.key_char == curses.KEY_DOWN): print("runter") self.stepperMotor.forwardM3() Speak().voice("runter") elif (self.key_char == curses.KEY_HOME): print("links fahren") self.wheels.stopStep() time.sleep(0.5) self.wheels.leftStep() #Speak().voice("links fahren") elif (self.key_char == curses.KEY_END): print("rechts fahren") self.wheels.stopStep() time.sleep(0.5) self.wheels.rightStep() #Speak().voice("rechts fahren") elif (self.key_char == curses.KEY_PPAGE): print("vorwärts fahren") self.wheels.stopStep() time.sleep(0.5) self.wheels.forwardStep() #Speak().voice("vorwärts") elif (self.key_char == curses.KEY_NPAGE): print("rückwärts fahren") self.wheels.stopStep() time.sleep(0.5) self.wheels.backwardStep() #Speak().voice("rückwärts") elif (self.key_char == curses.KEY_BACKSPACE): print("Stop Motoren") self.wheels.stopStep() #sonic bewegen elif (self.key_char == "r"): self.stepperMotor.forwardSonic() elif (self.key_char == "l"): self.stepperMotor.backwardSonic() #Einschalten falls mal die Geschwindigkeitskontrolle funktioniert elif (self.key_char == "s"): print("langsam fahren") self.wheels.slowSpeed() elif (self.key_char == "m"): print("mittelscnell fahren") self.wheels.mediumSpeed() elif (self.key_char == "f"): print("schnell fahren") self.wheels.highSpeed() else: curses.beep() curses.flushinp() # Cache Tasteninhalt löschen if self.key_char == "q": curses.flushinp() # Cache Tasteninhalt löschen break except Exception as e: print("es gab einen Fehler: ", e) self.stepperMotor.setStep0()