James Heavey / 3875_Individualproject

Dependents:   3875_DISSERTATION

Committer:
eencae
Date:
Wed Apr 05 10:25:42 2017 +0000
Revision:
1:5523d6d1feec
Parent:
0:56320ef879a6
Child:
2:26bf14f4dc84
Added few extra message, fixed issue with reading sensor values into array.

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 /** Write value to LEDs
eencae 0:56320ef879a6 26 * @param val - value to display in binary on LEDs (0 to 255)
eencae 0:56320ef879a6 27 */
eencae 0:56320ef879a6 28 void write_leds(int val);
eencae 0:56320ef879a6 29
eencae 0:56320ef879a6 30 /** Initialisation function
eencae 1:5523d6d1feec 31 * @details Should be called at the start of the program to interrupt demo
eencae 1:5523d6d1feec 32 * @details code and start 3pi in serial slave mode
eencae 0:56320ef879a6 33 */
eencae 0:56320ef879a6 34 void init();
eencae 0:56320ef879a6 35
eencae 0:56320ef879a6 36 /** Get signature of slave firmware
eencae 0:56320ef879a6 37 * @param signature - array of size 7 to store signature
eencae 0:56320ef879a6 38 */
eencae 0:56320ef879a6 39 void get_signature(char *signature);
eencae 1:5523d6d1feec 40
eencae 0:56320ef879a6 41 /** Read raw sensor values from IR sensors (0 - 2000)
eencae 0:56320ef879a6 42 * @param values - array of size 5 to store values
eencae 0:56320ef879a6 43 */
eencae 1:5523d6d1feec 44 void get_raw_values(unsigned int *values);
eencae 0:56320ef879a6 45
eencae 0:56320ef879a6 46 /** Read calibrated sensor values from IR sensors (0 - 1000)
eencae 0:56320ef879a6 47 * @param values - array of size 5 to store values
eencae 0:56320ef879a6 48 */
eencae 0:56320ef879a6 49 void get_calibrated_values(unsigned int *values);
eencae 1:5523d6d1feec 50
eencae 1:5523d6d1feec 51 /** Read user potentiometer values (0.0 - 1.0)
eencae 0:56320ef879a6 52 * @returns float in range 0.0 to 1.0
eencae 0:56320ef879a6 53 */
eencae 0:56320ef879a6 54 float get_trimpot_value();
eencae 0:56320ef879a6 55
eencae 0:56320ef879a6 56 /** Read battery voltage
eencae 0:56320ef879a6 57 * @returns battery voltage in volts
eencae 0:56320ef879a6 58 */
eencae 0:56320ef879a6 59 float get_battery_voltage();
eencae 1:5523d6d1feec 60
eencae 0:56320ef879a6 61 /** Play music
eencae 0:56320ef879a6 62 * @param notes - const array containing Pololu notes
eencae 1:5523d6d1feec 63 * @param length - number of notes in array
eencae 0:56320ef879a6 64 */
eencae 0:56320ef879a6 65 void play_music(const char notes[],int length);
eencae 1:5523d6d1feec 66
eencae 1:5523d6d1feec 67 /** Calibrate
eencae 1:5523d6d1feec 68 * @details manual calibration of sensors. Should be called repeatedly.
eencae 1:5523d6d1feec 69 */
eencae 0:56320ef879a6 70 void calibrate();
eencae 0:56320ef879a6 71
eencae 1:5523d6d1feec 72 /** Reset previous calibration values
eencae 1:5523d6d1feec 73 */
eencae 0:56320ef879a6 74 void reset_calibration();
eencae 0:56320ef879a6 75
eencae 1:5523d6d1feec 76 /** Returns estimate of line position
eencae 1:5523d6d1feec 77 * @returns int in the range -2000 to 2000
eencae 1:5523d6d1feec 78 * @details -2000 for line under sensor 0, -1000 for line under sensor 1
eencae 1:5523d6d1feec 79 * @details 0 for line under sensor 2, 1000 for line under sensor 3 etc.
eencae 1:5523d6d1feec 80 */
eencae 0:56320ef879a6 81 int get_line_position();
eencae 1:5523d6d1feec 82
eencae 1:5523d6d1feec 83 /** Returns estimate of normalised line position
eencae 1:5523d6d1feec 84 * @returns float in the range -1.0 to 1.0
eencae 1:5523d6d1feec 85 * @details -1.0 for line under sensor 0, -0.5 for line under sensor 1
eencae 1:5523d6d1feec 86 * @details 0.0 for line under sensor 2, 0.5 for line under sensor 3 etc.
eencae 1:5523d6d1feec 87 */
eencae 0:56320ef879a6 88 float get_normalised_line_position();
eencae 0:56320ef879a6 89
eencae 1:5523d6d1feec 90 /** Clear LCD
eencae 1:5523d6d1feec 91 */
eencae 0:56320ef879a6 92 void lcd_clear();
eencae 1:5523d6d1feec 93
eencae 1:5523d6d1feec 94 /** Print text on LCD
eencae 1:5523d6d1feec 95 * @param text[] - string of max size 8
eencae 1:5523d6d1feec 96 * @param - length of string
eencae 1:5523d6d1feec 97 */
eencae 0:56320ef879a6 98 void lcd_print(char text[],int length);
eencae 1:5523d6d1feec 99
eencae 1:5523d6d1feec 100 /** Move cursor on LCD
eencae 1:5523d6d1feec 101 * @param x - x position
eencae 1:5523d6d1feec 102 * @param y - line number
eencae 1:5523d6d1feec 103 */
eencae 0:56320ef879a6 104 void lcd_goto_xy(int x, int y);
eencae 1:5523d6d1feec 105
eencae 1:5523d6d1feec 106 /** Call automatic calibration function
eencae 1:5523d6d1feec 107 */
eencae 0:56320ef879a6 108 void auto_calibrate();
eencae 1:5523d6d1feec 109
eencae 1:5523d6d1feec 110 /** Move left motor
eencae 1:5523d6d1feec 111 * @param speed - value in range -1.0 (full-speed backward) to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 112 */
eencae 0:56320ef879a6 113 void left_motor(float speed);
eencae 1:5523d6d1feec 114
eencae 1:5523d6d1feec 115 /** Move right motor
eencae 1:5523d6d1feec 116 * @param speed - value in range -1.0 (full-speed backward) to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 117 */
eencae 0:56320ef879a6 118 void right_motor(float speed);
eencae 1:5523d6d1feec 119
eencae 1:5523d6d1feec 120 /** Move both motors
eencae 1:5523d6d1feec 121 * @param left speed - value in range -1.0 (full-speed backward) to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 122 * @param right speed - value in range -1.0 (full-speed backward) to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 123 */
eencae 0:56320ef879a6 124 void motors(float left_speed,float right_speed);
eencae 1:5523d6d1feec 125
eencae 1:5523d6d1feec 126 /** Stop both motors
eencae 1:5523d6d1feec 127 */
eencae 0:56320ef879a6 128 void stop();
eencae 1:5523d6d1feec 129
eencae 1:5523d6d1feec 130 /** Move buggy forward
eencae 1:5523d6d1feec 131 * @param speed - value in range 0.0 to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 132 */
eencae 0:56320ef879a6 133 void forward(float speed);
eencae 1:5523d6d1feec 134
eencae 1:5523d6d1feec 135 /** Reverse buggy
eencae 1:5523d6d1feec 136 * @param speed - value in range 0.0 to 1.0 (full-speed forward)
eencae 1:5523d6d1feec 137 */
eencae 0:56320ef879a6 138 void reverse(float speed);
eencae 1:5523d6d1feec 139
eencae 1:5523d6d1feec 140 /** Spin right
eencae 1:5523d6d1feec 141 * @param speed - value in range 0.0 to 1.0
eencae 1:5523d6d1feec 142 */
eencae 0:56320ef879a6 143 void spin_right(float speed);
eencae 1:5523d6d1feec 144
eencae 1:5523d6d1feec 145 /** Spin left
eencae 1:5523d6d1feec 146 * @param speed - value in range 0.0 to 1.0
eencae 1:5523d6d1feec 147 */
eencae 0:56320ef879a6 148 void spin_left(float speed);
eencae 1:5523d6d1feec 149
eencae 1:5523d6d1feec 150 /** Read button on m3pi expansion shield (p21)
eencae 1:5523d6d1feec 151 * @returns int - active-low - 0 for pressed/ 1 for not pressed
eencae 1:5523d6d1feec 152 */
eencae 0:56320ef879a6 153 int read_button();
eencae 1:5523d6d1feec 154
eencae 1:5523d6d1feec 155 /** Display battery voltage on LCD
eencae 1:5523d6d1feec 156 * @param x - x position on LCD to display
eencae 1:5523d6d1feec 157 * @param y - line on LCD to display
eencae 1:5523d6d1feec 158 */
eencae 0:56320ef879a6 159 void display_battery_voltage(int x,int y);
eencae 1:5523d6d1feec 160
eencae 1:5523d6d1feec 161 /** Display slave firmware signature on LCD
eencae 1:5523d6d1feec 162 * @param x - x position on LCD to display
eencae 1:5523d6d1feec 163 * @param y - line on LCD to display
eencae 1:5523d6d1feec 164 */
eencae 0:56320ef879a6 165 void display_signature(int x,int y);
eencae 0:56320ef879a6 166
eencae 0:56320ef879a6 167 private:
eencae 0:56320ef879a6 168
eencae 0:56320ef879a6 169 Serial* _serial;
eencae 0:56320ef879a6 170 DigitalOut* _reset;
eencae 0:56320ef879a6 171 DigitalIn* _button;
eencae 0:56320ef879a6 172 BusOut* _leds;
eencae 0:56320ef879a6 173
eencae 0:56320ef879a6 174 void reset();
eencae 0:56320ef879a6 175
eencae 0:56320ef879a6 176 };
eencae 0:56320ef879a6 177
eencae 0:56320ef879a6 178
eencae 0:56320ef879a6 179
eencae 0:56320ef879a6 180 #endif