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()
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()
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)
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
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()
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
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))