Example 12 Recording Values While Using The Claw ================================================ .. image:: ../tutorial/code12.gif :alt: not found :align: center What does this code do? ----------------------- In this code, the robot moves it's claw down, while recording where the claw is and how much percentof the code is done. Function Implementation *********************** .. code-block:: python :linenos: #!/usr/bin/python3 import os, sys sys.path.append("/usr/lib") from kipr import * L = 3 R = 0 grey_value = 1700 arm = 0 claw = 3 enable_servo(claw) enable_servo(arm) def get_current_time(): return seconds() def read_servo_position(port): position = get_servo_position(port) print("Servo position at port", port, "is:", position) return position def set_servo_position_and_print(port, position): set_servo_position(port, position) print("Set servo position at port", port, "to:", position) def calculate_position_difference(port, target_position): start_position = get_servo_position(port) position_difference = target_position - start_position print("Start position:", start_position, "Target position:", target_position, "Difference:", position_difference) return start_position, position_difference def calculate_position_modifier(start_time, speed): time_elapsed = seconds() - start_time position_modifier = time_elapsed / speed print("Time elapsed:", time_elapsed, "Position modifier:", position_modifier) return position_modifier def move_servo_smoothly(port, target_position, speed): start_time = get_current_time() start_position, position_difference = calculate_position_difference(port, target_position) while get_current_time() - start_time < speed: position_modifier = calculate_position_modifier(start_time, speed) new_position = int(start_position + (position_difference * position_modifier)) set_servo_position_and_print(port, new_position) set_servo_position_and_print(port, target_position) msleep(50) # Add a short delay move_servo_smoothly(arm, 2000, 2) # Move servo smoothly to position 1000 over 2 seconds def slow_servo(port, position, speed): start_time = seconds() start_position = get_servo_position(port) position_difference = position - start_position while seconds() - start_time < speed: position_modifier = (seconds() - start_time) / speed print("Percent =", (seconds() - start_time) / speed) set_servo_position(port, int(start_position + (position_difference * position_modifier))) set_servo_position(port, position) msleep(50) slow_servo(arm, 1000, 2) # Execute the complete slow servo function