Library for ELEC2645 Gamepad PCB. University of Leeds Version 2 January 2020
Dependents: ELEC2645_Ticker_WAV ELEC2645_Project_username ELEC2645_Project_el18vgt ELEC2645_Project_el17oc11 ... more
Gamepad.h@10:a13d2f9d8a14, 2017-02-07 (annotated)
- Committer:
- eencae
- Date:
- Tue Feb 07 11:53:37 2017 +0000
- Revision:
- 10:a13d2f9d8a14
- Parent:
- 9:893189072e89
- Child:
- 11:ff86b2ffce01
Renamed LED methods.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 0:a6288c29b936 | 1 | #ifndef GAMEPAD_H |
eencae | 0:a6288c29b936 | 2 | #define GAMEPAD_H |
eencae | 0:a6288c29b936 | 3 | |
eencae | 0:a6288c29b936 | 4 | #include "mbed.h" |
eencae | 3:964a6d95acdd | 5 | |
eencae | 3:964a6d95acdd | 6 | #define TOL 0.1f |
eencae | 3:964a6d95acdd | 7 | #define RAD2DEG 57.2957795131f |
eencae | 3:964a6d95acdd | 8 | |
eencae | 9:893189072e89 | 9 | /** Enum for direction */ |
eencae | 3:964a6d95acdd | 10 | enum Direction { |
eencae | 9:893189072e89 | 11 | CENTRE, /**< joystick centred */ |
eencae | 9:893189072e89 | 12 | N, /**< pushed North (0)*/ |
eencae | 9:893189072e89 | 13 | NE, /**< pushed North-East (45) */ |
eencae | 9:893189072e89 | 14 | E, /**< pushed East (90) */ |
eencae | 9:893189072e89 | 15 | SE, /**< pushed South-East (135) */ |
eencae | 9:893189072e89 | 16 | S, /**< pushed South (180) */ |
eencae | 9:893189072e89 | 17 | SW, /**< pushed South-West (225) */ |
eencae | 9:893189072e89 | 18 | W, /**< pushed West (270) */ |
eencae | 9:893189072e89 | 19 | NW /**< pushed North-West (315) */ |
eencae | 3:964a6d95acdd | 20 | }; |
eencae | 3:964a6d95acdd | 21 | |
eencae | 9:893189072e89 | 22 | /** Vector 2D struct */ |
eencae | 3:964a6d95acdd | 23 | struct Vector2D { |
eencae | 9:893189072e89 | 24 | float x; /**< float for x value */ |
eencae | 9:893189072e89 | 25 | float y; /**< float for y value */ |
eencae | 3:964a6d95acdd | 26 | }; |
eencae | 3:964a6d95acdd | 27 | |
eencae | 9:893189072e89 | 28 | /** Polar coordinate struct */ |
eencae | 3:964a6d95acdd | 29 | struct Polar { |
eencae | 9:893189072e89 | 30 | float mag; /**< float for magnitude */ |
eencae | 9:893189072e89 | 31 | float angle; /**< float for angle (in degrees) */ |
eencae | 3:964a6d95acdd | 32 | }; |
eencae | 0:a6288c29b936 | 33 | |
eencae | 9:893189072e89 | 34 | /** Gamepad Class |
eencae | 9:893189072e89 | 35 | @brief Library for interfacing with ELEC2645 Gamepad PCB, University of Leeds |
eencae | 9:893189072e89 | 36 | @author Dr Craig A. Evans |
eencae | 9:893189072e89 | 37 | @date Febraury 2017 |
eencae | 9:893189072e89 | 38 | */ |
eencae | 0:a6288c29b936 | 39 | class Gamepad |
eencae | 0:a6288c29b936 | 40 | { |
eencae | 0:a6288c29b936 | 41 | |
eencae | 0:a6288c29b936 | 42 | public: |
eencae | 0:a6288c29b936 | 43 | |
eencae | 9:893189072e89 | 44 | /** Constructor */ |
eencae | 0:a6288c29b936 | 45 | Gamepad(); |
eencae | 8:7eaf26f4b5f2 | 46 | |
eencae | 9:893189072e89 | 47 | /** Destructor */ |
eencae | 1:6d25cd49059b | 48 | ~Gamepad(); |
eencae | 0:a6288c29b936 | 49 | |
eencae | 9:893189072e89 | 50 | /** Initialise all peripherals and configure interrupts */ |
eencae | 0:a6288c29b936 | 51 | void init(); |
eencae | 8:7eaf26f4b5f2 | 52 | |
eencae | 9:893189072e89 | 53 | /** Turn all LEDs on */ |
eencae | 0:a6288c29b936 | 54 | void leds_on(); |
eencae | 8:7eaf26f4b5f2 | 55 | |
eencae | 9:893189072e89 | 56 | /** Turn all LEDs off */ |
eencae | 0:a6288c29b936 | 57 | void leds_off(); |
eencae | 8:7eaf26f4b5f2 | 58 | |
eencae | 9:893189072e89 | 59 | /** Set all LEDs to duty-cycle |
eencae | 9:893189072e89 | 60 | *@param value in range 0.0 to 1.0 |
eencae | 9:893189072e89 | 61 | */ |
eencae | 10:a13d2f9d8a14 | 62 | void leds(float val); |
eencae | 9:893189072e89 | 63 | |
eencae | 9:893189072e89 | 64 | /** Set LED to duty-cycle |
eencae | 9:893189072e89 | 65 | *@param value in range 0.0 to 1.0 |
eencae | 8:7eaf26f4b5f2 | 66 | */ |
eencae | 10:a13d2f9d8a14 | 67 | void led1(float val); |
eencae | 9:893189072e89 | 68 | |
eencae | 9:893189072e89 | 69 | /** Set LED to duty-cycle |
eencae | 9:893189072e89 | 70 | *@param value in range 0.0 to 1.0 |
eencae | 9:893189072e89 | 71 | */ |
eencae | 10:a13d2f9d8a14 | 72 | void led2(float val); |
eencae | 9:893189072e89 | 73 | |
eencae | 9:893189072e89 | 74 | /** Set LED to duty-cycle |
eencae | 9:893189072e89 | 75 | *@param value in range 0.0 to 1.0 |
eencae | 9:893189072e89 | 76 | */ |
eencae | 10:a13d2f9d8a14 | 77 | void led3(float val); |
eencae | 9:893189072e89 | 78 | |
eencae | 9:893189072e89 | 79 | /** Set LED to duty-cycle |
eencae | 9:893189072e89 | 80 | *@param value in range 0.0 to 1.0 |
eencae | 9:893189072e89 | 81 | */ |
eencae | 10:a13d2f9d8a14 | 82 | void led4(float val); |
eencae | 9:893189072e89 | 83 | |
eencae | 9:893189072e89 | 84 | /** Set LED to duty-cycle |
eencae | 9:893189072e89 | 85 | *@param value in range 0.0 to 1.0 |
eencae | 9:893189072e89 | 86 | */ |
eencae | 10:a13d2f9d8a14 | 87 | void led5(float val); |
eencae | 9:893189072e89 | 88 | |
eencae | 9:893189072e89 | 89 | /** Set LED to duty-cycle |
eencae | 9:893189072e89 | 90 | *@param value in range 0.0 to 1.0 |
eencae | 9:893189072e89 | 91 | */ |
eencae | 10:a13d2f9d8a14 | 92 | void led6(float val); |
eencae | 1:6d25cd49059b | 93 | |
eencae | 8:7eaf26f4b5f2 | 94 | /** Read potentiometer |
eencae | 9:893189072e89 | 95 | *@returns potentiometer value in range 0.0 to 1.0 |
eencae | 8:7eaf26f4b5f2 | 96 | */ |
eencae | 1:6d25cd49059b | 97 | float read_pot(); |
eencae | 8:7eaf26f4b5f2 | 98 | |
eencae | 8:7eaf26f4b5f2 | 99 | /** Play tone on piezo |
eencae | 9:893189072e89 | 100 | * @param frequency in Hz |
eencae | 9:893189072e89 | 101 | * @param duration of tone in seconds |
eencae | 8:7eaf26f4b5f2 | 102 | */ |
eencae | 1:6d25cd49059b | 103 | void tone(float frequency, float duration); |
eencae | 1:6d25cd49059b | 104 | |
eencae | 8:7eaf26f4b5f2 | 105 | /** Check if A button pressed |
eencae | 9:893189072e89 | 106 | * @returns true if yes, false if no |
eencae | 8:7eaf26f4b5f2 | 107 | */ |
eencae | 1:6d25cd49059b | 108 | bool a_pressed(); |
eencae | 8:7eaf26f4b5f2 | 109 | |
eencae | 8:7eaf26f4b5f2 | 110 | /** Check if B button pressed |
eencae | 9:893189072e89 | 111 | * @returns true if yes, false if no |
eencae | 8:7eaf26f4b5f2 | 112 | */ |
eencae | 1:6d25cd49059b | 113 | bool b_pressed(); |
eencae | 8:7eaf26f4b5f2 | 114 | |
eencae | 8:7eaf26f4b5f2 | 115 | /** Check if X button pressed |
eencae | 9:893189072e89 | 116 | * @returns true if yes, false if no |
eencae | 8:7eaf26f4b5f2 | 117 | */ |
eencae | 1:6d25cd49059b | 118 | bool x_pressed(); |
eencae | 8:7eaf26f4b5f2 | 119 | |
eencae | 8:7eaf26f4b5f2 | 120 | /** Check if Y button pressed |
eencae | 9:893189072e89 | 121 | * @returns true if yes, false if no |
eencae | 8:7eaf26f4b5f2 | 122 | */ |
eencae | 1:6d25cd49059b | 123 | bool y_pressed(); |
eencae | 8:7eaf26f4b5f2 | 124 | |
eencae | 8:7eaf26f4b5f2 | 125 | /** Check if L button pressed |
eencae | 9:893189072e89 | 126 | * @returns true if yes, false if no |
eencae | 8:7eaf26f4b5f2 | 127 | */ |
eencae | 1:6d25cd49059b | 128 | bool l_pressed(); |
eencae | 8:7eaf26f4b5f2 | 129 | |
eencae | 8:7eaf26f4b5f2 | 130 | /** Check if R button pressed |
eencae | 9:893189072e89 | 131 | * @returns true if yes, false if no |
eencae | 8:7eaf26f4b5f2 | 132 | */ |
eencae | 1:6d25cd49059b | 133 | bool r_pressed(); |
eencae | 8:7eaf26f4b5f2 | 134 | |
eencae | 8:7eaf26f4b5f2 | 135 | /** Check if Back button pressed |
eencae | 9:893189072e89 | 136 | * @returns true if yes, false if no |
eencae | 8:7eaf26f4b5f2 | 137 | */ |
eencae | 1:6d25cd49059b | 138 | bool back_pressed(); |
eencae | 8:7eaf26f4b5f2 | 139 | |
eencae | 8:7eaf26f4b5f2 | 140 | /** Check if Start button pressed |
eencae | 9:893189072e89 | 141 | * @returns true if yes, false if no |
eencae | 8:7eaf26f4b5f2 | 142 | */ |
eencae | 1:6d25cd49059b | 143 | bool start_pressed(); |
eencae | 8:7eaf26f4b5f2 | 144 | |
eencae | 8:7eaf26f4b5f2 | 145 | /** Check if Joystick button pressed |
eencae | 9:893189072e89 | 146 | * @returns true if yes, false if no |
eencae | 8:7eaf26f4b5f2 | 147 | */ |
eencae | 3:964a6d95acdd | 148 | bool joystick_pressed(); |
eencae | 8:7eaf26f4b5f2 | 149 | |
eencae | 8:7eaf26f4b5f2 | 150 | /** Get magnitude of joystick movement |
eencae | 9:893189072e89 | 151 | * @returns value in range 0.0 to 1.0 |
eencae | 8:7eaf26f4b5f2 | 152 | */ |
eencae | 8:7eaf26f4b5f2 | 153 | |
eencae | 8:7eaf26f4b5f2 | 154 | float get_mag(); |
eencae | 9:893189072e89 | 155 | |
eencae | 8:7eaf26f4b5f2 | 156 | /** Get angle of joystick movement |
eencae | 9:893189072e89 | 157 | * @returns value in range 0.0 to 359.9. 0.0 corresponds to N, 180.0 to S. -1.0 is central |
eencae | 8:7eaf26f4b5f2 | 158 | */ |
eencae | 3:964a6d95acdd | 159 | float get_angle(); |
eencae | 9:893189072e89 | 160 | |
eencae | 8:7eaf26f4b5f2 | 161 | /** Gets joystick direction |
eencae | 9:893189072e89 | 162 | * @returns an enum: CENTRE, N, NE, E, SE, S, SW, W, NW, |
eencae | 8:7eaf26f4b5f2 | 163 | */ |
eencae | 3:964a6d95acdd | 164 | Direction get_direction(); // N,NE,E,SE etc. |
eencae | 9:893189072e89 | 165 | |
eencae | 8:7eaf26f4b5f2 | 166 | /** Gets raw cartesian co-ordinates of joystick |
eencae | 9:893189072e89 | 167 | * @returns a struct with x,y members, each in the range 0.0 to 1.0 |
eencae | 8:7eaf26f4b5f2 | 168 | */ |
eencae | 5:ce5eae9ee934 | 169 | Vector2D get_coord(); // cartesian co-ordinates x,y |
eencae | 9:893189072e89 | 170 | |
eencae | 8:7eaf26f4b5f2 | 171 | /** Gets cartesian coordinates mapped to circular grid |
eencae | 9:893189072e89 | 172 | * @returns a struct with x,y members, each in the range 0.0 to 1.0 |
eencae | 8:7eaf26f4b5f2 | 173 | */ |
eencae | 5:ce5eae9ee934 | 174 | Vector2D get_mapped_coord(); // x,y mapped to circle |
eencae | 9:893189072e89 | 175 | |
eencae | 8:7eaf26f4b5f2 | 176 | /** Gets polar coordinates of the joystick |
eencae | 9:893189072e89 | 177 | * @returns a struct contains mag and angle |
eencae | 8:7eaf26f4b5f2 | 178 | */ |
eencae | 5:ce5eae9ee934 | 179 | Polar get_polar(); // mag and angle in struct form |
eencae | 3:964a6d95acdd | 180 | |
eencae | 0:a6288c29b936 | 181 | private: |
eencae | 0:a6288c29b936 | 182 | |
eencae | 10:a13d2f9d8a14 | 183 | PwmOut *_led1; |
eencae | 10:a13d2f9d8a14 | 184 | PwmOut *_led2; |
eencae | 10:a13d2f9d8a14 | 185 | PwmOut *_led3; |
eencae | 10:a13d2f9d8a14 | 186 | PwmOut *_led4; |
eencae | 10:a13d2f9d8a14 | 187 | PwmOut *_led5; |
eencae | 10:a13d2f9d8a14 | 188 | PwmOut *_led6; |
eencae | 0:a6288c29b936 | 189 | |
eencae | 1:6d25cd49059b | 190 | InterruptIn *button_A; |
eencae | 1:6d25cd49059b | 191 | InterruptIn *button_B; |
eencae | 1:6d25cd49059b | 192 | InterruptIn *button_X; |
eencae | 3:964a6d95acdd | 193 | InterruptIn *button_Y; |
eencae | 1:6d25cd49059b | 194 | InterruptIn *button_back; |
eencae | 1:6d25cd49059b | 195 | InterruptIn *button_start; |
eencae | 1:6d25cd49059b | 196 | InterruptIn *button_L; |
eencae | 1:6d25cd49059b | 197 | InterruptIn *button_R; |
eencae | 3:964a6d95acdd | 198 | InterruptIn *button_joystick; |
eencae | 3:964a6d95acdd | 199 | |
eencae | 3:964a6d95acdd | 200 | AnalogIn *vert; |
eencae | 3:964a6d95acdd | 201 | AnalogIn *horiz; |
eencae | 1:6d25cd49059b | 202 | |
eencae | 1:6d25cd49059b | 203 | PwmOut *buzzer; |
eencae | 1:6d25cd49059b | 204 | AnalogIn *pot; |
eencae | 1:6d25cd49059b | 205 | |
eencae | 1:6d25cd49059b | 206 | Timeout *timeout; |
eencae | 1:6d25cd49059b | 207 | |
eencae | 1:6d25cd49059b | 208 | void init_buttons(); |
eencae | 1:6d25cd49059b | 209 | void tone_off(); |
eencae | 3:964a6d95acdd | 210 | |
eencae | 1:6d25cd49059b | 211 | void a_isr(); |
eencae | 1:6d25cd49059b | 212 | void b_isr(); |
eencae | 1:6d25cd49059b | 213 | void x_isr(); |
eencae | 1:6d25cd49059b | 214 | void y_isr(); |
eencae | 1:6d25cd49059b | 215 | void l_isr(); |
eencae | 1:6d25cd49059b | 216 | void r_isr(); |
eencae | 1:6d25cd49059b | 217 | void back_isr(); |
eencae | 1:6d25cd49059b | 218 | void start_isr(); |
eencae | 3:964a6d95acdd | 219 | void joy_isr(); |
eencae | 8:7eaf26f4b5f2 | 220 | |
eencae | 3:964a6d95acdd | 221 | bool a_flag,b_flag,x_flag,y_flag,l_flag,r_flag,back_flag,start_flag,joy_flag; |
eencae | 8:7eaf26f4b5f2 | 222 | |
eencae | 8:7eaf26f4b5f2 | 223 | // centred x,y values |
eencae | 3:964a6d95acdd | 224 | float _x0; |
eencae | 3:964a6d95acdd | 225 | float _y0; |
eencae | 0:a6288c29b936 | 226 | }; |
eencae | 0:a6288c29b936 | 227 | |
eencae | 0:a6288c29b936 | 228 | #endif |