EE149
/
FinalProject
Final Project files for mBed development.
main.h
- Committer:
- lsaristo
- Date:
- 2014-12-19
- Revision:
- 46:a3b9c0fe8f36
- Parent:
- 40:0199bad6c979
File content as of revision 46:a3b9c0fe8f36:
/** * @file main.h * @brief Main header file for includes and defs * @author John Wilkey * @author Alec Guertin * @author Chester Chu */ #ifndef _MAIN_H #define _MAIN_H #include "mbed.h" #include "m3pi.h" #include <string.h> #include <stdarg.h> #include <stdio.h> #include <math.h> /* Constants used in main.c */ #define TURN_SPEED 0.15 /**< Motor power for turning */ #define DRIVE_SPEED 0.25 /**< Motor power for drawing/moving */ #define TIME_FACT 1780 /**< Multiplier for forward() and backward() */ #define CAL_SPEED 0.25 /**< Drive speed during calibration */ #define CLOSE_ENOUGH 0.0008 /**< Threshold for calibration line centering */ #define WIGGLE_MAX 30 /**< Max 'wiggles' during calibration */ #define CORNER_THRESHOLD 0.3 /**< Threshold for checking if line position denotes a corner */ #define INST_BUF_SIZE 250 /**< Size of input buffer for instructions */ #define CORRECTION_SPEED 0.2*DRIVE_SPEED /**< Amount to change speed of one wheel when following line */ #define CORRECTION_THRESHOLD 0.05 /**< Maximum tolerable deviation from line when following line */ #define RAD_TO_DEG 57.29 /**< Factor to convert radians to degrees */ #define FULL_TURN 360 /**< Degrees for a full turn */ #define HALF_TURN 180 /**< Degrees for a half turn */ #define QUARTER_TURN 90 /**< Degrees for a quarter (right angle) turn */ #define CAL_FACTOR 1.1 /**< Scaling factor for time to drive */ #define DEGREE_CORRECTION 0 /**< Amount (in degrees) added to the angle for each turn */ #define SEC_TO_MSEC 1000 /**< Scaling factor to convert seconds to milliseconds */ #define SEC_TO_USEC 1000000 /**< Scaling factor to convert seconds to microseconds */ #define MSEC_TO_USEC 1000 /**< Scaling factor to convert milliseconds to microseconds */ /** * @brief get values of next PostScript instruction. * * @param buf Buffer with PS instructions. * @param x Pointer to storage for x coordinate. * @param y Pointer to storage for y coordinate. * @param draw Pointer to storage for draw/move boolean. * * @return Success or failure code. */ int retrieve_inst(char *buf, int *x, int *y, int *draw); /** * @brief Driver forward for a time. * * @param[in] amt Amount to drive forward. In milliseconds. */ void forward(int amt); /** * @brief Drive backward for a time. * * @param[in] amt Amount to drive backward. In milliseconds. */ void backward(int amt); /** * @brief Turn right by some angle. * * @param[in] deg Desired final turn angle in degrees from start. * Note that a negative angle will turn in the opposite * direction. */ void right(float deg); /** * @brief Turn left by some angle. * * @param[in] deg Desired final turn angle in degrees from start. * Note that a negative angle will turn in the opposite * direction. */ void left (float deg); /** * @brief Wait for a number of seconds, possibly fractional. * * Timer resolution is on the order of microseconds. A negative wait * time does nothing. * * @param[in] amt Time to wait, in seconds. */ void timerWait(float amt); /** * @brief Follows the non-reflective line to a corner * * @param[in] left boolean specifying if the corner to look for * is a left corner * * @return returns an error code */ int find_corner(int left); /** * @brief Turns towards the base line and moves to reach it */ void find_line(); /** * @brief Computes the Euclidean distance between two points * * @param[in] x1 the x-coordinate of the first point * @param[in] y1 the y-coordinate of the first point * @param[in] x2 the x-coordinate of the second point * @param[in] y2 the y-coordinate of the second point * * @return the distance between points (x1,y1) and (x2,y2) */ float distance(int x1, int y1, int x2, int y2); /** * @brief prints to the m3pi's screen * * @param[in] line the line on the screen to print to, in {0,1} * @param[in] format the format string to print * @param[in] ... the arguments to pass into the format string */ void robot_printf(int line, const char *format, ...); /** * @brief computes the angle to turn to face towards (x,y) * * @param[in] last_x the current x-coordinate * @param[in] last_y the current y-coordinate * @param[in] x the desired x-coordinate * @param[in] y the desired y-coordinate * @param[in] angle the current angle the m3pi is facing * * @return the angle to turn left */ float compute_turn_angle(int last_x, int last_y, int x, int y, float angle); /** * @brief sends the signal on the output pin for the led * to turn it on */ void pen_up(); /** * @brief turns off the signal to the led */ void pen_down(); #endif