# Dokumentation

# Documentation for robotlibrary/robot.py 

## Robot 
This is the central class which manages and uses all the other components of the robot. The parameters are defined in config.py

## _drive 
This abstracted driving function is only called locally by the other functions with better names. 
It accelerates and decelerates to make driving more natural. Do not call directly!

## _drive_instantly 
This abstracted driving function is only called locally by the other functions with better names. 
It sets the speed immediately. Do not call directly!

## set_speed_instantly 
Sets the new speed immediately. Doesn't change the driving mode of the robot.
:param s: the speed you want to set.

## set_speed 
Sets the new speed and accelerates and decelerates. Doesn't change the driving mode of the robot.
:param s: the speed you want to set.

## set_forward 
Sets the direction of the robot. True means forward.
:param f: True for forwards and False for backwards.

## spin_right 
Spin right indefinitely. 

## spin_left 
Spin left indefinitely. 

## turn_right 
This turns the robot to the right without it spinning on the spot. Each call makes the turn steeper.

## turn_left 
This turns the robot to the right without it spinning on the spot. Each call makes the turn steeper.

## go_left 
With Meccanum wheels the robot goes sideways to the left.
        

## go_right 
With Meccanum wheels the robot goes sideways to the right.
        

## turn 
This turns the robot right or left. Is mostly used by the remote control.
:param turn: positive or negative value. Higher values mean steeper turn.

## go_straight 
Lets the robot go straight on. Usually called when a turn shall end. 

## spin_before_obstacle 
This spins until the distance to an obstacle is greater than the given parameter *distance*.
:param distance: The distance

## toggle_spin 
Toggle turn for the given duration. With each call the opposite direction(clockwise / anti-clockwise) is used.
:param d: The duration for the turn in milliseconds.

## random_spin 
Randomly turn for the given duration.
:param d: The duration for the turn in milliseconds.

## stop 
Stop the robot slowly by deceleration. 

## emergency_stop 
Stop the robot immediately.

## ir_detected 
If implemented this method is called when the IR-sensor has detected a change. Fill in your code accordingly.

## get_dist 
Get the distance from the ultrasonic sensor.

## set_angle 
If implemented, turn the servo motor with the ultrasonic sensor to the given angle.
:param a: The angle that is to be set.

## get_smallest_distance 
This returns the angle of the ultrasonic sensor where it measured the smallest distance

## get_longest_distance 
This returns the angle of the ultrasonic sensor where it measured the longest distance

# Documentation for robotlibrary/config.py 

## Module 
This defines the parameters for the motors. 

MAX_DUTY: Set to lower than the maximum not to overload the motors. Absolute maximum is 65535.
MIN_DUTY: Set this to the minimum duty cycle that the motor needs to start moving. 
MIN_SPEED: Only 0 is making sense here but if you want you can change that. Must be above 0 though.
MAX_SPEED: If you want another scale than 0-100, set the maximum here.

DEBOUNCE_WAIT: This defines the waiting time for the debouncing of the buttons. Leave as it is if 
you don't know what it means.

WHITE_DETECTED: Use these constants to check for white or black with the IR-sensor. Don't change!
BLACK_DETECTED: Use these constants to check for white or black with the IR-sensor. Don't change!

Motors and ultrasonic sensor must use consecutive pins. so, f. ex. the left motor uses pins 12 and 13. Use >None< if you don't use the device.
MLF and LRF are for four wheel drive.
ML: pin number for left motor (or left rear motor for four wheel drive).
MR: pin number for right motor (or right rear motor for four wheel drive).
MLF: pin number for left motor (or left front motor for four wheel drive). Use None if not used. 
MRF: pin number for right motor (or right front motor for four wheel drive). Use None if not used. 
US: pin number for the ultrasonic sensor. Use None if not used. 
IR: pin number for the infrared sensor. Use None if not used. 
SERVO: pin number for the servo motor. Use None if not used.

JS_X_MEDIAN 
JS_Y_MEDIAN
JS_MAX_DUTY
JS_MIN_DUTY: These define the parameters for the joystick. You need to calibrate the numbers. Look at joystick.py for details.

ROBOT_NAME: You need to set a custom name if you use a remote control.

SERVO_MIN_DUTY: Only change if the servo doesn't move the required 180°.
SERVO_MAX_DUTY: Only change if the servo doesn't move the required 180°.