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