Example #1
0
 def do(self):
     old_angle = self.device.get_servo_rotation(self.servo_id)
     speed = settings.get_servo(self.servo_id).speed
     duration = abs(old_angle - self.angle) / speed
     self.device.set_servo_rotation(self.servo_id, self.angle)
     sleep(duration)
     self.end()
Example #2
0
    def on_ok_button_press(self, *largs):
        for i in range(settings.servo_count):
            slider = self.ids['sliders_grid'].children[i]
            servo_settings = settings.get_servo(i)
            servo_settings.min_rotation = int(slider.min)
            servo_settings.max_rotation = int(slider.max)

        self.parent.back_to_main_menu()
Example #3
0
        def go_into_dance_pose():
            for i in range(settings.servo_count):
                servo_settings = settings.get_servo(i)
                default_init_rotation = (servo_settings.max_rotation + servo_settings.min_rotation) / 2
                if i == 1:
                    timmy_device.set_servo_rotation(i, 14)  # magic const
                else:
                    timmy_device.set_servo_rotation(i, default_init_rotation)

            sleep(1)
Example #4
0
    def set_servo_rotation(self, servo_id, rotation):
        if servo_id < 0 or servo_id > settings.servo_count - 1:
            print 'Wrong servo index: {}'.format(servo_id)
            return

        servo_settings = settings.get_servo(servo_id)

        if rotation < servo_settings.min_rotation:
            rotation = servo_settings.min_rotation

        if rotation > servo_settings.max_rotation:
            rotation = servo_settings.max_rotation

        self.rotations[servo_id] = rotation

        return True
Example #5
0
        def dance():
            def dance_processing():
                while not self.is_stopped:
                    elapsed_time = time() - start_time
                    # if elapsed_time > length:
                    #     break

                    # if elapsed_time > beats[current_beat]:
                    #     current_beat += 1
                    #     if current_beat >= len(beats):
                    #         break
                    #     state = 'min'
                    #     self.app.timmy_device.set_servo_rotation(servo_id, min_rotation)
                    # elif current_beat > 0 and elapsed_time > (beats[current_beat - 1] + beats[current_beat]) / 2 and state == 'min':
                    #     state = 'max'
                    #     self.app.timmy_device.set_servo_rotation(servo_id, max_rotation)

                    if elapsed_time >= total_duration:
                        break

                    t = int(elapsed_time / total_duration * length)
                    s = self.sound_data.signal[t] * scale
                    rotation = int((max_rotation + min_rotation) / 2 + (max_rotation - min_rotation) / 2 * s / 32768)
                    timmy_device.set_servo_rotation(servo_id, rotation)

            if not timmy_device.is_active():
                return False

            servo_id = 2 # !!! gui
            scale = 4 # ??? calc
            servo_settings = settings.get_servo(servo_id)
            min_rotation = servo_settings.min_rotation
            max_rotation = servo_settings.max_rotation
            timmy_device.set_servo_rotation(servo_id, max_rotation)
            state = 'max'
            current_beat = 0
            start_time = time()

            length = len(self.sound_data.signal) #!!!: already calc
            total_duration = float(length) / self.sound_data.rate

            dance_thread = Thread(target=dance_processing)
            dance_thread.start()
Example #6
0
    def set_servo_rotation(self, servo_id, rotation):

        if servo_id < 0 or servo_id > settings.servo_count - 1:
            print 'Wrong servo index: {}'.format(servo_id)
            return

        servo_settings = settings.get_servo(servo_id)

        if rotation < servo_settings.min_rotation:
            rotation = servo_settings.min_rotation

        if rotation > servo_settings.max_rotation:
            rotation = servo_settings.max_rotation

        buffer = array('B', [0, 0, 0x01, TimmyDevice.servo_pulse, servo_id, rotation % 256, rotation / 256, 0, 0, 0, 0])
        result = self.usb_dev.write(TimmyDevice.write_end_point_address, buffer, settings.timeout)

        if result:
            self.rotations[servo_id] = rotation

        return result
Example #7
0
 def get_slider(servo_index):
     servo_settings = settings.get_servo(servo_index)
     return ServoSlider(min=servo_settings.min_rotation, max=servo_settings.max_rotation,
                        value=timmy_device.get_servo_rotation(servo_index),
                        on_value_changed=lambda value: on_slider_value_changed(servo_index, value))