James Heavey / 3875_Individualproject

Dependents:   3875_DISSERTATION

Committer:
eencae
Date:
Thu May 25 10:18:43 2017 +0000
Revision:
3:5015bc2d1cf8
Parent:
2:26bf14f4dc84
Child:
4:0abe81f5d9fd
Remove m3pi shield specific methods (button and LEDs) as custom shield does not have these.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:56320ef879a6 1 #ifndef M3PI_H
eencae 0:56320ef879a6 2 #define M3PI_H
eencae 0:56320ef879a6 3
eencae 0:56320ef879a6 4 #include "mbed.h"
eencae 0:56320ef879a6 5
eencae 0:56320ef879a6 6 /** m3pi Class
eencae 0:56320ef879a6 7 @brief Library to control m3pi robot from Polulu running the serial slave code
eencae 0:56320ef879a6 8 @brief Revision 1.0
eencae 1:5523d6d1feec 9 @author Craig A. Evans <C.A.Evans@leeds.ac.uk>
eencae 0:56320ef879a6 10 @date April 2017
eencae 0:56320ef879a6 11
eencae 0:56320ef879a6 12 */
eencae 0:56320ef879a6 13 class m3pi
eencae 0:56320ef879a6 14 {
eencae 0:56320ef879a6 15
eencae 0:56320ef879a6 16 public:
eencae 0:56320ef879a6 17
eencae 0:56320ef879a6 18 /** m3pi constructor
eencae 0:56320ef879a6 19 */
eencae 0:56320ef879a6 20 m3pi();
eencae 0:56320ef879a6 21 /** m3pi destructor
eencae 0:56320ef879a6 22 */
eencae 0:56320ef879a6 23 ~m3pi();
eencae 0:56320ef879a6 24
eencae 0:56320ef879a6 25
eencae 0:56320ef879a6 26 /** Initialisation function
eencae 1:5523d6d1feec 27 * @details Should be called at the start of the program to interrupt demo
eencae 1:5523d6d1feec 28 * @details code and start 3pi in serial slave mode
eencae 0:56320ef879a6 29 */
eencae 0:56320ef879a6 30 void init();
eencae 0:56320ef879a6 31
eencae 0:56320ef879a6 32 /** Get signature of slave firmware
eencae 0:56320ef879a6 33 * @param signature - array of size 7 to store signature
eencae 0:56320ef879a6 34 */
eencae 0:56320ef879a6 35 void get_signature(char *signature);
eencae 1:5523d6d1feec 36
eencae 0:56320ef879a6 37 /** Read raw sensor values from IR sensors (0 - 2000)
eencae 0:56320ef879a6 38 * @param values - array of size 5 to store values
eencae 0:56320ef879a6 39 */
eencae 1:5523d6d1feec 40 void get_raw_values(unsigned int *values);
eencae 0:56320ef879a6 41
eencae 0:56320ef879a6 42 /** Read calibrated sensor values from IR sensors (0 - 1000)
eencae 0:56320ef879a6 43 * @param values - array of size 5 to store values
eencae 0:56320ef879a6 44 */
eencae 0:56320ef879a6 45 void get_calibrated_values(unsigned int *values);
eencae 1:5523d6d1feec 46
eencae 1:5523d6d1feec 47 /** Read user potentiometer values (0.0 - 1.0)
eencae 0:56320ef879a6 48 * @returns float in range 0.0 to 1.0
eencae 0:56320ef879a6 49 */
eencae 0:56320ef879a6 50 float get_trimpot_value();
eencae 0:56320ef879a6 51
eencae 0:56320ef879a6 52 /** Read battery voltage
eencae 0:56320ef879a6 53 * @returns battery voltage in volts
eencae 0:56320ef879a6 54 */
eencae 0:56320ef879a6 55 float get_battery_voltage();
eencae 1:5523d6d1feec 56
eencae 0:56320ef879a6 57 /** Play music
eencae 0:56320ef879a6 58 * @param notes - const array containing Pololu notes
eencae 1:5523d6d1feec 59 * @param length - number of notes in array
eencae 0:56320ef879a6 60 */
eencae 0:56320ef879a6 61 void play_music(const char notes[],int length);
eencae 1:5523d6d1feec 62
eencae 1:5523d6d1feec 63 /** Calibrate
eencae 1:5523d6d1feec 64 * @details manual calibration of sensors. Should be called repeatedly.
eencae 1:5523d6d1feec 65 */
eencae 0:56320ef879a6 66 void calibrate();
eencae 0:56320ef879a6 67
eencae 1:5523d6d1feec 68 /** Reset previous calibration values
eencae 1:5523d6d1feec 69 */
eencae 0:56320ef879a6 70 void reset_calibration();
eencae 0:56320ef879a6 71
eencae 1:5523d6d1feec 72 /** Returns estimate of normalised line position
eencae 1:5523d6d1feec 73 * @returns float in the range -1.0 to 1.0
eencae 1:5523d6d1feec 74 * @details -1.0 for line under sensor 0, -0.5 for line under sensor 1
eencae 1:5523d6d1feec 75 * @details 0.0 for line under sensor 2, 0.5 for line under sensor 3 etc.
eencae 1:5523d6d1feec 76 */
eencae 2:26bf14f4dc84 77 float get_line_position();
eencae 0:56320ef879a6 78
eencae 1:5523d6d1feec 79 /** Clear LCD
eencae 1:5523d6d1feec 80 */
eencae 0:56320ef879a6 81 void lcd_clear();
eencae 1:5523d6d1feec 82
eencae 1:5523d6d1feec 83 /** Print text on LCD
eencae 1:5523d6d1feec 84 * @param text[] - string of max size 8
eencae 1:5523d6d1feec 85 * @param - length of string
eencae 1:5523d6d1feec 86 */
eencae 0:56320ef879a6 87 void lcd_print(char text[],int length);
eencae 1:5523d6d1feec 88
eencae 1:5523d6d1feec 89 /** Move cursor on LCD
eencae 1:5523d6d1feec 90 * @param x - x position
eencae 1:5523d6d1feec 91 * @param y - line number
eencae 1:5523d6d1feec 92 */
eencae 0:56320ef879a6 93 void lcd_goto_xy(int x, int y);
eencae 1:5523d6d1feec 94
eencae 1:5523d6d1feec 95 /** Call automatic calibration function
eencae 1:5523d6d1feec 96 */
eencae 0:56320ef879a6 97 void auto_calibrate();
eencae 1:5523d6d1feec 98
eencae 1:5523d6d1feec 99 /** Move left motor
eencae 1:5523d6d1feec 100 * @param speed - value in range -1.0 (full-speed backward) to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 101 */
eencae 0:56320ef879a6 102 void left_motor(float speed);
eencae 1:5523d6d1feec 103
eencae 1:5523d6d1feec 104 /** Move right motor
eencae 1:5523d6d1feec 105 * @param speed - value in range -1.0 (full-speed backward) to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 106 */
eencae 0:56320ef879a6 107 void right_motor(float speed);
eencae 1:5523d6d1feec 108
eencae 1:5523d6d1feec 109 /** Move both motors
eencae 1:5523d6d1feec 110 * @param left speed - value in range -1.0 (full-speed backward) to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 111 * @param right speed - value in range -1.0 (full-speed backward) to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 112 */
eencae 0:56320ef879a6 113 void motors(float left_speed,float right_speed);
eencae 1:5523d6d1feec 114
eencae 1:5523d6d1feec 115 /** Stop both motors
eencae 1:5523d6d1feec 116 */
eencae 0:56320ef879a6 117 void stop();
eencae 1:5523d6d1feec 118
eencae 1:5523d6d1feec 119 /** Move buggy forward
eencae 1:5523d6d1feec 120 * @param speed - value in range 0.0 to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 121 */
eencae 0:56320ef879a6 122 void forward(float speed);
eencae 1:5523d6d1feec 123
eencae 1:5523d6d1feec 124 /** Reverse buggy
eencae 1:5523d6d1feec 125 * @param speed - value in range 0.0 to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 126 */
eencae 0:56320ef879a6 127 void reverse(float speed);
eencae 1:5523d6d1feec 128
eencae 1:5523d6d1feec 129 /** Spin right
eencae 1:5523d6d1feec 130 * @param speed - value in range 0.0 to 1.0
eencae 1:5523d6d1feec 131 */
eencae 0:56320ef879a6 132 void spin_right(float speed);
eencae 1:5523d6d1feec 133
eencae 1:5523d6d1feec 134 /** Spin left
eencae 1:5523d6d1feec 135 * @param speed - value in range 0.0 to 1.0
eencae 1:5523d6d1feec 136 */
eencae 0:56320ef879a6 137 void spin_left(float speed);
eencae 1:5523d6d1feec 138
eencae 1:5523d6d1feec 139 /** Display battery voltage on LCD
eencae 1:5523d6d1feec 140 * @param x - x position on LCD to display
eencae 1:5523d6d1feec 141 * @param y - line on LCD to display
eencae 1:5523d6d1feec 142 */
eencae 0:56320ef879a6 143 void display_battery_voltage(int x,int y);
eencae 1:5523d6d1feec 144
eencae 1:5523d6d1feec 145 /** Display slave firmware signature on LCD
eencae 1:5523d6d1feec 146 * @param x - x position on LCD to display
eencae 1:5523d6d1feec 147 * @param y - line on LCD to display
eencae 1:5523d6d1feec 148 */
eencae 0:56320ef879a6 149 void display_signature(int x,int y);
eencae 2:26bf14f4dc84 150
eencae 2:26bf14f4dc84 151 /** Display sensor values on LCD
eencae 2:26bf14f4dc84 152 * @param values - array of calibrated sensor values
eencae 2:26bf14f4dc84 153 * @param y - line on LCD to display
eencae 2:26bf14f4dc84 154 */
eencae 2:26bf14f4dc84 155 void display_sensor_values(unsigned int values[],int y);
eencae 2:26bf14f4dc84 156
eencae 2:26bf14f4dc84 157 /** Gets value of sensor array expressed as decimal number
eencae 2:26bf14f4dc84 158 * @details Each sensor is a bit (PC4 is bit 0, PC0 is bit 5)
eencae 2:26bf14f4dc84 159 * @returns value - 5-bit value of sensor reading
eencae 2:26bf14f4dc84 160 */
eencae 2:26bf14f4dc84 161 unsigned int get_sensor_array_value(unsigned int values[]);
eencae 2:26bf14f4dc84 162
eencae 2:26bf14f4dc84 163 /** Calculates an estimate of normalised line position from the sensor readings
eencae 2:26bf14f4dc84 164 * @returns float in the range -1.0 to 1.0
eencae 2:26bf14f4dc84 165 * @details -1.0 for line under sensor 0, -0.5 for line under sensor 1
eencae 2:26bf14f4dc84 166 * @details 0.0 for line under sensor 2, 0.5 for line under sensor 3 etc.
eencae 2:26bf14f4dc84 167 */
eencae 2:26bf14f4dc84 168 float calc_line_position(unsigned int values[]);
eencae 0:56320ef879a6 169
eencae 0:56320ef879a6 170 private:
eencae 0:56320ef879a6 171
eencae 0:56320ef879a6 172 Serial* _serial;
eencae 0:56320ef879a6 173 DigitalOut* _reset;
eencae 2:26bf14f4dc84 174
eencae 2:26bf14f4dc84 175 float _last_line_position;
eencae 0:56320ef879a6 176
eencae 0:56320ef879a6 177 void reset();
eencae 0:56320ef879a6 178
eencae 0:56320ef879a6 179 };
eencae 0:56320ef879a6 180
eencae 0:56320ef879a6 181
eencae 0:56320ef879a6 182
eencae 0:56320ef879a6 183 #endif