Example 11 Recording Values =========================== .. image:: ../tutorial/advanced1.gif :alt: not found :align: center What does this code do? ----------------------- This code, the robot records where the servo and motor positions are. Then it calculates the difference between the arm and the servo. Finally it outputs all the recorded values. Functions Used -------------- variable = (any word) enable_servo( servo port) print(inputted message) return(variable) read_servo_position( servo port) set_servo_position_and_print(servo port, position from 1 to 500) 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 read_servo_position(port): position = get_servo_position(port) print("Servo position at port", port, "is:", position) return position read_servo_position(arm) # Read the servo position at port 1 def set_servo_position_and_print(port, position): set_servo_position(port, position) print("Set servo position at port", port, "to:", position) set_servo_position_and_print(arm, 500) # Set the servo position at port 1 to 500 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 calculate_position_difference(arm, 1000) # Calculate difference to move servo from current position to 1000 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 calculate_position_modifier(seconds(), 2) # Calculate position modifier over 2 seconds def move_servo_smoothly(port, target_position, speed): start_time = seconds() start_position, position_difference = calculate_position_difference(port, target_position) while seconds() - 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)