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()
class HandyMove(Thread): def __init__(self, dataFromClient, socketConnection): Thread.__init__(self) self.dataFromClient = dataFromClient self.komm_handy = socketConnection self.motorCamera = Stepper() self.wheels = Wheel() # angabe wie gerade gefahren wird. 0=halt 1=vorwärts 2=rückwärts 3=links 4=rechts self.richtung = 0 self.verglRichtung1 = 90 # der Motor startet bei 90Grad in der Mitte self.verglRichtung2 = 90 # der Motor startet bei 90Grad in der Mitte self.daemon = True self.start() def run(self): # Daten vom Client empfangen damit Funktionen gestartet werden können try: while True: self.data = self.dataFromClient.recv(1024).decode("utf-8") #Abfrage ob noch Kommandos kommen, wenn nicht dann wird erneut nach dem Aufbau der Verbindung gefragt. Wird nur hier getan und nicht in handyWheels if not (self.data): print("End transmit commands") self.komm_handy.kommunikationHandyClose() self.dataFromClient, self.dataFromClient1 = self.komm_handy.kommunikationHandy( ) cmdList = self.data.split("\n") cmdList = cmdList[:-1] for oneCmd in cmdList: # comma, or other dataSplit = oneCmd.split("#") if (dataSplit[0] == "CMD_SERVO"): print(dataSplit) if ((dataSplit[1] == "0") and (int(dataSplit[2]) > int(self.verglRichtung1))): print("motor1, rechts wird übergeben") self.motorCamera.backwardsM1( ) #Motor1 wird rechts gedreht Speak().voice("Kamera rechts") self.verglRichtung1 = dataSplit[2] elif ((dataSplit[1] == "0") and (int(dataSplit[2]) < int(self.verglRichtung1))): print("motor1, links wird übergeben") self.motorCamera.forwardM1( ) #Motor1 wird links gedreht Speak().voice("Kamera links") self.verglRichtung1 = dataSplit[2] elif ((dataSplit[1] == "1") and (int(dataSplit[2]) > int(self.verglRichtung2))): print("motor2, hoch wird übergeben") self.motorCamera.backwardsM2( ) #Motor2 wird hoch gedreht Speak().voice("Kamera hoch") self.verglRichtung2 = dataSplit[2] elif ((dataSplit[1] == "1") and (int(dataSplit[2]) < int(self.verglRichtung2))): print("motor2, runter wird übergeben") self.motorCamera.forwardM2( ) #Motor2 wird runter gedreht Speak().voice("Kamera runter") self.verglRichtung2 = dataSplit[2] elif (dataSplit[0] == "CMD_MOTOR"): print(dataSplit) if (int(dataSplit[1]) == 0) and (int(dataSplit[3]) == 0): self.wheels.stopStep() self.richtung = 0 elif (int(dataSplit[1]) > 0) and (int(dataSplit[3]) > 0): if (self.richtung != 1): self.wheels.stopStep() time.sleep(0.5) self.wheels.forwardStep() self.richtung = 1 elif (int(dataSplit[1]) < 0) and (int(dataSplit[3]) < 0): if (self.richtung != 2): self.wheels.stopStep() time.sleep(0.5) self.wheels.backwardStep() self.richtung = 2 elif (int(dataSplit[1]) > 0) and (int(dataSplit[3]) < 0): if (self.richtung != 3): self.wheels.stopStep() time.sleep(0.5) self.wheels.leftStep() self.richtung = 3 elif (int(dataSplit[1]) < 0) and (int(dataSplit[3]) > 0): if (self.richtung != 4): self.wheels.stopStep() time.sleep(0.5) self.wheels.rightStep() self.richtung = 4 except Exception as e: print(e) self.komm_handy.kommunikationHandyClose() self.motorCamera.setStep0() print("Programm Handy Steuerung geschlossen")