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)
예제 #2
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")
예제 #3
0
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"