예제 #1
0
    def run(self):
        while True:
            if self.interface_conn.poll():
                received = comm.recv_msg(self.interface_conn).split(" ")
                if received[0] == "exit":
                    self.exit()
                if received[0] == "load":
                    self.load(received[1])
                elif received[0] == "unload":
                    self.unload(True)
                elif received[0] == "start":
                    self.start()
                elif received[0] == "stop":
                    self.stop()
                elif received[0] == "send":
                    self.send(" ".join(received[1:]))
                elif received[0] == "monitoring":
                    self.monitoring(received[1])

            if self.started and self.assignment_conn.poll():
                received = comm.recv_msg(self.assignment_conn)
                comm.send_msg(self.interface_conn, comm.MsgTypes.STATUS,
                              received)

            if self.monitoring_started and self.monitoring_conn.poll():
                received = comm.recv_msg(self.monitoring_conn)
                comm.send_msg(self.interface_conn, comm.MsgTypes.STATUS,
                              received)
예제 #2
0
    def run(self, conn):
        self.conn = conn
        comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
        motor_driver = motor.Motor(100, 80)

        while True:
            self.handleMessages()

            # TODO: Vision to recognise red circle for mandatory stop?
            # TODO  self.vision.imageHandler.loadFrameAsset(cv2.imread('../assets/images/cup5.jpg', cv2.IMREAD_COLOR), True) # load camera asset
            # TODO  self.vision.do_Vision() # do vision here

            # Update motor
            left_speed, left_polarity, right_speed, right_polarity = motor_driver.update(
                self.left_joy_ypos, self.right_joy_ypos)

            motor_values = str(int(
                round(left_speed))) + "," + str(left_polarity) + "," + str(
                    int(round(right_speed))) + "," + str(right_polarity)

            comm.send_msg(self.conn, comm.MsgTypes.STATUS, motor_values)

            # Write to serial
            self.serial.write(bytes(motor_values + ";", "utf-8"))

            time.sleep(0.1)
예제 #3
0
    def handleMessages(self):
        if self.conn.poll():
            received = comm.recv_msg(self.conn)
            received_split = received.split(" ")
            if received_split[0] == "controller":
                controller_values = received_split[1].split("-")
                print(received_split)

                print(controller_values)

                # Grab positions
                self.left_joy_xpos = int(controller_values[0].split(":")[1])
                self.right_joy_xpos = int(controller_values[1].split(":")[1])

                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Received")
            if received == "Stop":
                self.is_stopped = True
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Stopped")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()

        while self.is_stopped:
            received = comm.recv_msg(self.conn)
            if received == "Start":
                self.is_stopped = False
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
예제 #4
0
 def start(self):
     if self.assignment is None:
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "Please load an assignment first.")
     elif self.started:
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "The assignment has already started.")
         return
     elif self.assignment_conn is not None:
         comm.send_msg(self.assignment_conn, comm.MsgTypes.COMMAND, "Start")
         while comm.recv_msg(self.assignment_conn,
                             comm.MsgTypes.REPLY) != "Started":
             continue
         self.started = True
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       self.assignment.name() + " started.")
     else:
         parent_conn, child_conn = Pipe()
         self.assignment_conn = parent_conn
         self.assignment_proc = Process(target=self.assignment.start,
                                        args=(child_conn, ))
         self.assignment_proc.start()
         while comm.recv_msg(self.assignment_conn,
                             comm.MsgTypes.REPLY) != "Started":
             continue
         self.started = True
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       self.assignment.name() + " started.")
예제 #5
0
    def run(self, conn):
        global time_to_next_beat
        self.conn = conn
        comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")

        # Initiate neopixel led strip
        self.strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
        self.strip.begin()

        # Initiate pyaudio and set settings
        self.pa = pyaudio.PyAudio()
        self.lib = pyaudio.PyAudio()

        self.stream = self.pa.open(format=FORMAT,
                         channels=CHANNELS,
                         input_device_index=1,
                         rate=RATE,
                         input=True,
                         frames_per_buffer=CHUNK
                         )

        self.stream2 = self.lib.open(format=pyaudio.paFloat32,
                           channels=CHANNELS,
                           rate=RATE,
                           input_device_index=1,
                           input=True,
                           output=False,
                           frames_per_buffer=RATE * 10,
                           stream_callback=callback)

        # start the stream (4)
        self.stream.start_stream()
        self.stream2.start_stream()

        while True:
            #self.handleMessages()
            try:
                capture_time = time.time()
                # print("analyzing beat")

                audio_data = np.fromstring(self.stream.read(CHUNK, exception_on_overflow=False), dtype=np.int16)
                parse_audio(audio_data, self.strip)

                capture_time_2 = time.time()
                time_to_next_beat -= capture_time_2 - capture_time

                # print("time to next beat: ")
                # print(time_to_next_beat)

                if time_to_next_beat < 0.05 and analyzing != True:
                    print("beat!")
                    time_to_next_beat = original_time_to_next_beat
                elif analyzing:
                    {}
                    print("analyzing beat")

            except IOError as e:
                print("(%d) Error recording: %s" % e)
예제 #6
0
 def exit(self):
     if self.started:
         self.stop()
     if self.monitoring_conn is not None:
         self.monitoring("unload")
     if self.assignment is not None:
         self.unload(True)
     comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY, "exit")
     sys.exit()
예제 #7
0
    def load(self, assignment):
        if self.assignment is not None:
            comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                          "An assignment has already been loaded.")
            return

        self.assignment = importlib.import_module("assignments." + assignment +
                                                  "." + assignment)
        self.assignment.load()
        comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                      assignment + " loaded.")
예제 #8
0
    def run(self, conn):
        self.conn = conn
        comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")

        # Monitor time at start of dance
        start_time = time.time()

        # Starting led values
        g = 0
        r = 255
        b = 0

        while True:
            self.handleMessages()

            current_time = time.time()

            if current_time - start_time < 5:
                print("backward")
                ls, lp, rs, rp = self.motor.move_backward(250, True)
            elif current_time - start_time < 10:
                print("forward")
                ls, lp, rs, rp = self.motor.move_forward(100, True)
            elif current_time - start_time < 15:
                print("forward right")
                ls, lp, rs, rp = self.motor.rotate_around_axis(
                    100, MotorDirections.RIGHT, autoTransform=True)
            elif current_time - start_time < 20:
                print("forward left")
                ls, lp, rs, rp = self.motor.rotate_around_axis(
                    100, MotorDirections.LEFT, autoTransform=True)
            else:
                self.motor.update(0, 0)
                if current_time - start_time < 25:
                    break
                else:
                    continue

            vals = self.motor.get_motor_values_string(ls, lp, rs, rp)
            # if vals is not motor_values:
            # print(vals)
            motor_values = vals

            comm.send_msg(self.conn, comm.MsgTypes.STATUS, motor_values)
            # Updates the motor values to Arduino
            self.serial.write(bytes(motor_values + ";", "utf-8"))
            update_led(self.strip, g, r, b)

            time.sleep(0.1)
예제 #9
0
    def run(self):
        while True:
            self.handleMessages()
            sending = ""
            for id in range(1, 3):
                try:
                    temp = str(10)  # str(self.servos.readTemperature(id))
                    pos = str(20)  # str(self.servos.readPosition(id))
                    #print("Position: " + pos + ", Temperature: " + temp)
                    sending += str(id) + ":" + temp + ","
                    sending += str(id) + ":" + pos
                    sending += "-"
                except self.servos.timeoutError:
                    comm.send_msg(self.conn, comm.MsgTypes.ERROR,
                                  "Servo not found.")

            comm.send_msg(self.conn, comm.MsgTypes.STATUS, sending[:-1])

            sleep(0.7)
예제 #10
0
파일: ass1.py 프로젝트: LinFan15/IDP_RPi
    def run(self, conn):
        self.conn = conn
        comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")

        while True:
            self.handleMessages()
            if self.moving:
                try:
                    self.servos.move(1, 100)
                    self.servos.move(2, 100)

                    sleep(2)

                    self.servos.move(1, 1000)
                    self.servos.move(2, 1000)
                    sleep(2)

                except self.servos.timeoutError:
                    comm.send_msg(self.conn, comm.MsgTypes.ERROR,
                                  "Servo not found.")
예제 #11
0
    def handleMessages(self):
        if self.conn.poll():
            received = comm.recv_msg(self.conn)
            comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Received")
            if received == "Stop":
                self.is_stopped = True
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Stopped")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()

        while self.is_stopped:
            received = comm.recv_msg(self.conn)
            if received == "Start":
                self.is_stopped = False
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
예제 #12
0
    def run(self, conn):
        self.conn = conn
        comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
        motor_driver = motor.Motor(250, 100)

        while True:
            self.handleMessages()

            # Update motor
            left_speed, left_polarity, right_speed, right_polarity = motor_driver.update(
                self.left_joy_ypos, self.right_joy_ypos)

            motor_values = str(int(
                round(left_speed))) + "," + str(left_polarity) + "," + str(
                    int(round(right_speed))) + "," + str(right_polarity)

            comm.send_msg(self.conn, comm.MsgTypes.STATUS, motor_values)

            # Write to serial
            self.serial.write(bytes(motor_values + ";", "utf-8"))

            time.sleep(0.1)
예제 #13
0
 def send(self, msg):
     if self.started:
         comm.send_msg(self.assignment_conn, comm.MsgTypes.COMMAND, msg)
         while comm.recv_msg(self.assignment_conn,
                             comm.MsgTypes.REPLY) != "Received":
             continue
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "Message sent.")
     else:
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "No assignment is currently running.")
예제 #14
0
 def stop(self):
     if self.started:
         comm.send_msg(self.assignment_conn, comm.MsgTypes.COMMAND, "Stop")
         self.started = False
         while comm.recv_msg(self.assignment_conn,
                             comm.MsgTypes.REPLY) != "Stopped":
             continue
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       self.assignment.name() + " stopped.")
         return
     else:
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "No assignment is currently running.")
예제 #15
0
    def unload(self, wait):
        if self.assignment is None:
            comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                          "No assignment has been loaded.")
            return
        else:
            if self.assignment_conn is None:
                self.assignment.unload()
            else:
                comm.send_msg(self.assignment_conn, comm.MsgTypes.COMMAND,
                              "Unload")
                while wait and comm.recv_msg(
                        self.assignment_conn,
                        comm.MsgTypes.REPLY) != "Unloaded":
                    continue

            assignment = self.assignment
            self.assignment = None
            self.started = False
            self.assignment_conn = None
            self.assignment_proc = None
            comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                          "Unloaded " + assignment.name() + ".")
            return
예제 #16
0
파일: fandf.py 프로젝트: LinFan15/IDP_RPi
    def run(self, conn):
        self.conn = conn
        comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")

        while True:
            self.handleMessages()
예제 #17
0
 def monitoring(self, msg):
     if self.monitoring_conn is None:
         comm.send_msg(
             self.interface_conn, comm.MsgTypes.REPLY,
             "Monitoring has been unloaded, please restart the application."
         )
     else:
         if msg == "start":
             if not self.monitoring_started:
                 comm.send_msg(self.monitoring_conn, comm.MsgTypes.COMMAND,
                               "Start")
                 comm.send_msg(
                     self.interface_conn, comm.MsgTypes.REPLY,
                     comm.recv_msg(self.monitoring_conn,
                                   comm.MsgTypes.REPLY))
                 self.monitoring_started = True
             else:
                 comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                               "Monitoring is already running.")
         elif msg == "stop":
             if self.monitoring_started:
                 comm.send_msg(self.monitoring_conn, comm.MsgTypes.COMMAND,
                               "Stop")
                 comm.send_msg(
                     self.interface_conn, comm.MsgTypes.REPLY,
                     comm.recv_msg(self.monitoring_conn,
                                   comm.MsgTypes.REPLY))
                 self.monitoring_started = False
             else:
                 comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                               "Monitoring has already been stopped.")
         elif msg == "unload":
             comm.send_msg(self.monitoring_conn, comm.MsgTypes.COMMAND,
                           "Unload")
             comm.send_msg(
                 self.interface_conn, comm.MsgTypes.REPLY,
                 comm.recv_msg(self.monitoring_conn, comm.MsgTypes.REPLY))
             self.monitoring_started = False
예제 #18
0
파일: fandf.py 프로젝트: LinFan15/IDP_RPi
    def handleMessages(self):
        if self.conn.poll():
            received = comm.recv_msg(self.conn)
            received_split = received.split(" ")
            if received_split[0] == "controller":
                controller_values = received_split[1].split("-")
                print(received_split)

                print(controller_values)

                # Grab positions
                self.right_joy_ypos = int(
                    controller_values[0].split(":")[1].split(",")[0])
                self.left_joy_ypos = int(
                    controller_values[1].split(":")[1].split(",")[0])
                self.right_joy_xpos = int(
                    controller_values[0].split(":")[1].split(",")[1])
                self.left_joy_xpos = int(
                    controller_values[1].split(":")[1].split(",")[1])

                # Update motor
                left_speed, left_polarity, right_speed, right_polarity = self.motor_driver.update(
                    self.left_joy_ypos, self.right_joy_ypos)

                motor_values = str(int(
                    round(left_speed))) + "," + str(left_polarity) + "," + str(
                        int(round(right_speed))) + "," + str(right_polarity)

                comm.send_msg(self.conn, comm.MsgTypes.STATUS, motor_values)

                # Write to serial
                self.serial.write(bytes(motor_values + ";", "utf-8"))

                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Received")
            if received == "Stop":
                self.is_stopped = True
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Stopped")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()

        while self.is_stopped:
            received = comm.recv_msg(self.conn)
            if received == "Start":
                self.is_stopped = False
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
예제 #19
0
파일: ass1.py 프로젝트: LinFan15/IDP_RPi
    def handleMessages(self):
        if self.conn.poll():
            received = comm.recv_msg(self.conn)
            received_split = received.split(" ")
            if received_split[0] == "controller":
                controller_values = ",".join(received_split[1:]) + ";"
                print(received_split)
                self.serial.write(bytes(controller_values, "utf-8"))
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Received")

            if received == "Stop":
                self.is_stopped = True
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Stopped")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
            elif received == "turn":
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Received")
                self.moving = True

        while self.is_stopped:
            received = comm.recv_msg(self.conn)
            if received == "Start":
                self.is_stopped = False
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
예제 #20
0
 def send(self, command):
     comm.send_msg(self.conn, comm.MsgTypes.COMMAND, command)
     print(comm.recv_msg(self.conn, comm.MsgTypes.REPLY) + "\n")
예제 #21
0
 def send(self, command):
     comm.send_msg(self.conn, comm.MsgTypes.COMMAND, command)