Racing Robots Session

Dependencies:   m3pi mbed

Fork of racing_robots by Nico De Witte

robot_logic.h

Committer:
dwini
Date:
2015-02-23
Revision:
2:356bb8d99326
Parent:
0:c0ae66a0ec7a
Child:
4:3743cbfe031b

File content as of revision 2:356bb8d99326:

#include "mbed.h"
#include "m3pi.h"

#ifndef H_ROBOT_LOGIC
#define H_ROBOT_LOGIC

typedef enum {
   LED_1 = 0,
   LED_2 = 1,
   LED_3 = 2,
   LED_4 = 3,
   LED_5 = 4,
   LED_6 = 5,
   LED_7 = 6,
   LED_8 = 7
} LedIndex;

typedef enum {
    LED_ON = 0,
    LED_OFF = 1,
    LED_TOGGLE = 2
} LedState;


/*
 * Drive the robot forward or backward.
 * If the robot was turning it will stop turning and drive in a straight line.
 *
 * @speed The speed percentage with which to drive forward or backward.
 * Can range from -100 (full throttle backward) to +100 (full throttle forward).
 */
void drive(int speed);

/*
 * Turn the robot left or right while driving.
 *
 * @turnspeed The percentage with which to turn the robot.
 * Can range from -100 (full throttle left) to +100 (full throttle right).
 */
void turn(int turnspeed);

/*
 * Stop the robot.
 */
void stop(void);

/*
 * Calibrate the line follow sensors.
 * Take note that the pololu should be placed over the line
 * before this function is called and that it will rotate to
 * both sides.
 */
void sensor_calibrate(void);

/*
 * Read the value from the line sensor. The returned value indicates the
 * position of the line. The value ranges from -100 to +100 where -100 is
 * fully left, +100 is fully right and 0 means the line is detected in the middle.
 *
 * @return The position of the line with a range of -100 to +100.
 */
int line_sensor(void);

/*
 * Initialize the PID drive control with
 * the P, I and T factors.
 *
 * @p The P factor
 * @i The I factor
 * @d The D factor
 */
void pid_init(int p, int i, int d);

/*
 * Determine PID turnspeed with which the pololu should
 * turn to follow the line at the given position.
 *
 * @line_position The position of the line in a range of [-100, +100]
 *
 * @returns The turnspeed in a range of [-100, +100]
 */
int pid_turn(int line_position);

// Show drive speed and sensor data
void show_stats();

// Show the name of the robot on the display
void show_name(char * name);


// Turn a led on or off
void led(LedIndex i, LedState state);

// Wait for a number of milliseconds
void await(int milliseconds);

#endif