Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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()