class myserver(): def __init__(self): self.TCP_Server = Server() self.TCP_Server.StartTcpServer() self.ReadData = Thread(target=self.TCP_Server.readdata) self.SendVideo = Thread(target=self.TCP_Server.sendvideo) self.power = Thread(target=self.TCP_Server.Power) self.SendVideo.start() self.ReadData.start() self.power.start() def close(self): try: stop_thread(self.SendVideo) stop_thread(self.ReadData) stop_thread(self.power) except: pass try: self.TCP_Server.server_socket.shutdown(2) self.TCP_Server.server_socket1.shutdown(2) self.TCP_Server.StopTcpServer() except: pass print("Close TCP") os._exit(0)
class mywindow(QMainWindow, Ui_server_ui): def __init__(self): self.user_ui = True self.start_tcp = False self.TCP_Server = Server() self.parseOpt() if self.user_ui: self.app = QApplication(sys.argv) super(mywindow, self).__init__() self.setupUi(self) self.m_DragPosition = self.pos() self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.setMouseTracking(True) self.Button_Server.setText("On") self.on_pushButton() self.Button_Server.clicked.connect(self.on_pushButton) self.pushButton_Close.clicked.connect(self.close) self.pushButton_Min.clicked.connect(self.windowMinimumed) if self.start_tcp: self.TCP_Server.StartTcpServer() self.ReadData = Thread(target=self.TCP_Server.readdata) self.SendVideo = Thread(target=self.TCP_Server.sendvideo) self.power = Thread(target=self.TCP_Server.Power) self.SendVideo.start() self.ReadData.start() self.power.start() if self.user_ui: self.label.setText("Server On") self.Button_Server.setText("Off") def windowMinimumed(self): self.showMinimized() def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.m_drag = True self.m_DragPosition = event.globalPos() - self.pos() event.accept() def mouseMoveEvent(self, QMouseEvent): if QMouseEvent.buttons() and Qt.LeftButton: self.move(QMouseEvent.globalPos() - self.m_DragPosition) QMouseEvent.accept() def mouseReleaseEvent(self, QMouseEvent): self.m_drag = False def parseOpt(self): self.opts, self.args = getopt.getopt(sys.argv[1:], "tn") for o, a in self.opts: if o in ('-t'): print("Open TCP") self.start_tcp = True elif o in ('-n'): self.user_ui = False def close(self): try: stop_thread(self.SendVideo) stop_thread(self.ReadData) stop_thread(self.power) except: pass try: self.TCP_Server.server_socket.shutdown(2) self.TCP_Server.server_socket1.shutdown(2) self.TCP_Server.StopTcpServer() except: pass print("Close TCP") if self.user_ui: QCoreApplication.instance().quit() os._exit(0) def on_pushButton(self): if self.label.text() == "Server Off": self.label.setText("Server On") self.Button_Server.setText("Off") self.TCP_Server.tcp_Flag = True print("Open TCP") self.TCP_Server.StartTcpServer() self.SendVideo = Thread(target=self.TCP_Server.sendvideo) self.ReadData = Thread(target=self.TCP_Server.readdata) self.power = Thread(target=self.TCP_Server.Power) self.SendVideo.start() self.ReadData.start() self.power.start() elif self.label.text() == 'Server On': self.label.setText("Server Off") self.Button_Server.setText("On") self.TCP_Server.tcp_Flag = False try: stop_thread(self.ReadData) stop_thread(self.power) stop_thread(self.SendVideo) except: pass self.TCP_Server.StopTcpServer() print("Close TCP")
class myapp(): def __init__(self, motor=None, headlight=None, taillight=None, buzzer=None, display=None): self.PWM = motor self.serverup = False self.automode = False self.taillight = taillight self.TCP_Server = Server(motor, headlight, taillight, buzzer) self.adc = Adc() self.led = Led() self.buzzer = buzzer self.myservo = Servo() self.display = display print "Initializing..." self.on_pushButton() def close(self): print "Closing down..." try: stop_thread(self.SendVideo) stop_thread(self.ReadData) stop_thread(self.power) except: pass try: self.TCP_Server.server_socket.shutdown(2) self.TCP_Server.server_socket1.shutdown(2) self.TCP_Server.StopTcpServer() except: pass self.serverup = False print "Close TCP" os._exit(0) def on_pushButton(self): if self.serverup == False: self.TCP_Server.tcp_Flag = True print "Open TCP" self.TCP_Server.StartTcpServer() self.SendVideo = Thread(target=self.TCP_Server.sendvideo) self.ReadData = Thread(target=self.TCP_Server.readdata) self.power = Thread(target=self.TCP_Server.Power) self.SendVideo.start() self.ReadData.start() self.power.start() self.serverup = True elif self.serverup == True: self.TCP_Server.tcp_Flag = False try: stop_thread(self.ReadData) stop_thread(self.power) stop_thread(self.SendVideo) except: pass self.TCP_Server.StopTcpServer() self.serverup = False print "Close TCP" def run_light_thread(self): self.automode = True threading.Thread(target=self.run_light).start() def run_line_thread(self): self.automode = True threading.Thread(target=self.run_line).start() def run_ultrasonic_thread(self): self.automode = True threading.Thread(target=self.run_ultrasonic).start() def run_dance_thread(self): self.automode = True threading.Thread(target=self.run_dance).start() # Event types # 0 - d < x # 1 - d >= x # 2 - l > r - for future enhancement not using in first try # 3 - l <= r - ditto def run_ultrasonic(self): IR01 = 14 IR02 = 15 IR03 = 23 GPIO.setmode(GPIO.BCM) GPIO.setup(IR01, GPIO.IN) GPIO.setup(IR02, GPIO.IN) GPIO.setup(IR03, GPIO.IN) self.LMR0 = 0x00 if GPIO.input(IR01) == False: self.LMR0 = (self.LMR0 | 4) if GPIO.input(IR02) == False: self.LMR0 = (self.LMR0 | 2) if GPIO.input(IR03) == False: self.LMR0 = (self.LMR0 | 1) if self.LMR0 > 0: self.LMR0 = 7 ttable = [[1, 0], [2, 4], [3, 5], [1, 1], [0, 0], [0, 0]] x = 40 ultra = Ultrasonic() print "Auto drive Start!" cur_state = 0 while self.automode: if cur_state == 0: self.display.show(1, "FORWARD") self.PWM.slowforward() ultra.look_forward() elif cur_state == 1: self.display.show(1, "LOOKLEFT") self.PWM.stopMotor() ultra.look_left() elif cur_state == 2: self.display.show(1, "LOOKRITE") self.PWM.stopMotor() ultra.look_right() elif cur_state == 3: self.display.show(1, "GOBACK") self.PWM.backup() elif cur_state == 4: self.display.show(1, "TURNLEFT") self.PWM.turnLeft() time.sleep(0.2) elif cur_state == 5: self.display.show(1, "TURNRITE") self.PWM.turnRight() time.sleep(0.2) else: print "Wrong state?" cur_state = 0 time.sleep(0.1) d = ultra.get_distance() self.LMR = 0x00 if GPIO.input(IR01) == False: self.LMR = (self.LMR | 4) if GPIO.input(IR02) == False: self.LMR = (self.LMR | 2) if GPIO.input(IR03) == False: self.LMR = (self.LMR | 1) if (self.LMR <> self.LMR0): cur_state = 3 else: e = 0 if d < x else 1 cur_state = ttable[cur_state][e] print "Auto drive End!" def run_line(self): IR01 = 14 IR02 = 15 IR03 = 23 print "Line Follow Start!" GPIO.setmode(GPIO.BCM) GPIO.setup(IR01, GPIO.IN) GPIO.setup(IR02, GPIO.IN) GPIO.setup(IR03, GPIO.IN) while self.automode: self.LMR = 0x00 if GPIO.input(IR01) == False: self.LMR = (self.LMR | 4) if GPIO.input(IR02) == False: self.LMR = (self.LMR | 2) if GPIO.input(IR03) == False: self.LMR = (self.LMR | 1) if self.LMR == 2: self.display.show(1, "FORWARD") self.PWM.setMotorModel(800, 800, 800, 800) elif self.LMR == 4: self.display.show(1, "TURNLEFT") self.PWM.setMotorModel(-1000, -1000, 1500, 1500) elif self.LMR == 3: self.display.show(1, "FASTLEFT") self.PWM.setMotorModel(-1500, -1500, 2000, 2000) elif self.LMR == 1: self.display.show(1, "TURNRIGHT") self.PWM.setMotorModel(1500, 1500, -1000, -1000) elif self.LMR == 6: self.display.show(1, "FASTRITE") self.PWM.setMotorModel(2000, 2000, -1500, -1500) elif self.LMR == 7: pass print "Line Follow End!" def run_light(self): print "Light follow start!" self.PWM.setMotorModel(0, 0, 0, 0) while self.automode: L = self.adc.recvADC(0) R = self.adc.recvADC(1) if L < 2.99 and R < 2.99: self.display.show(1, "FORWARD") self.PWM.setMotorModel(1000, 1000, 1000, 1000) elif abs(L - R) < 0.15: self.display.show(1, "STOP") self.PWM.setMotorModel(0, 0, 0, 0) elif L > 3 or R > 3: if L > R: self.display.show(1, "TURNLEFT") self.PWM.setMotorModel(-1500, -1500, 2000, 2000) elif R > L: self.display.show(1, "TURNRITE") self.PWM.setMotorModel(2000, 2000, -1500, -1500) print "Light follow finished!" def dancemove(self, *args): for move in args: if not self.automode: break if move == DLEFT: self.PWM.turnLeft() time.sleep(DSPEED) self.PWM.stopMotor() elif move == DRIGHT: self.PWM.turnRight() time.sleep(DSPEED) self.PWM.stopMotor() elif move == DSPIN: self.PWM.spin() time.sleep(DSPEED * 2) self.PWM.stopMotor() elif move == DFORWARD: self.PWM.slowforward() time.sleep(DSPEED) self.PWM.stopMotor() elif move == DBACK: self.PWM.slowBackup() time.sleep(DSPEED) self.PWM.stopMotor() elif move == DTOOT: self.buzzer.run('1') time.sleep(DSPEED / 2) self.buzzer.run('0') time.sleep(DSPEED / 2) elif move == DARMUP: self.myservo.setServoPwm(ARM, (ARMSTART + ARMEND) * 2 / 3) time.sleep(DSPEED) elif move == DARMDOWN: self.myservo.setServoPwm(ARM, (ARMSTART + ARMEND) * 1 / 3) time.sleep(DSPEED) elif move == DCLAP: self.myservo.setServoPwm(HAND, HANDEND) time.sleep(DSPEED) self.myservo.setServoPwm(HAND, HANDSTART) time.sleep(DSPEED) else: print "Invalid dance move?" def run_dance(self): print "Dance moves" self.PWM.setMotorModel(0, 0, 0, 0) # start light show mode = str(random.randint(1, 4)) ledthread = Thread(target=self.led.ledMode, args=(mode, )) ledthread.start() while self.automode: self.dancemove(DLEFT, DBACK, DFORWARD, DBACK, DARMDOWN, DARMUP, DCLAP, DSPIN, DTOOT, DTOOT, DRIGHT, DBACK, DFORWARD, DBACK, DARMDOWN, DARMUP, DCLAP, DSPIN, DTOOT, DTOOT) #self.dancemove(DARMUP, DARMDOWN, DCLAP) # stop light show when done stop_thread(ledthread) self.led.colorWipe(self.led, Color(0, 0, 0), 10) print "Dance moves finished"