Library for ELEC2645 Gamepad PCB. University of Leeds
Dependents: Project_MaZe1_copy Labirint Game_Controller_Project 200943373MAZE ... more
Diff: Gamepad.h
- Revision:
- 9:893189072e89
- Parent:
- 8:7eaf26f4b5f2
- Child:
- 10:a13d2f9d8a14
diff -r 7eaf26f4b5f2 -r 893189072e89 Gamepad.h --- a/Gamepad.h Tue Feb 07 10:53:46 2017 +0000 +++ b/Gamepad.h Tue Feb 07 11:50:26 2017 +0000 @@ -1,14 +1,3 @@ -/** -@file Gamepad.h - -@brief Library for interfacing with ELEC2645 Gamepad PCB -@brief University of Leeds - -@author Dr Craig A. Evans -@date Febraury 2017 - -*/ - #ifndef GAMEPAD_H #define GAMEPAD_H @@ -17,153 +6,186 @@ #define TOL 0.1f #define RAD2DEG 57.2957795131f +/** Enum for direction */ enum Direction { - CENTRE, // 0 - N, // 1 - NE, // 2 - E, // 3 - SE, // 4 - S, // 5 - SW, // 6 - W, // 7 - NW // 8 + CENTRE, /**< joystick centred */ + N, /**< pushed North (0)*/ + NE, /**< pushed North-East (45) */ + E, /**< pushed East (90) */ + SE, /**< pushed South-East (135) */ + S, /**< pushed South (180) */ + SW, /**< pushed South-West (225) */ + W, /**< pushed West (270) */ + NW /**< pushed North-West (315) */ }; +/** Vector 2D struct */ struct Vector2D { - float x; - float y; + float x; /**< float for x value */ + float y; /**< float for y value */ }; +/** Polar coordinate struct */ struct Polar { - float mag; - float angle; + float mag; /**< float for magnitude */ + float angle; /**< float for angle (in degrees) */ }; +/** Gamepad Class +@brief Library for interfacing with ELEC2645 Gamepad PCB, University of Leeds +@author Dr Craig A. Evans +@date Febraury 2017 +*/ class Gamepad { public: - /** Constructor - */ + /** Constructor */ Gamepad(); - /** Destructor - */ + /** Destructor */ ~Gamepad(); - /** Initialise all peripherals and configure interrupts - */ + /** Initialise all peripherals and configure interrupts */ void init(); - /** Turn all LEDs on - */ + /** Turn all LEDs on */ void leds_on(); - /** Turn all LEDs off - */ + /** Turn all LEDs off */ void leds_off(); - /** Fade all to set duty-cycle - @param value in range 0.0 to 1.0 + /** Set all LEDs to duty-cycle + *@param value in range 0.0 to 1.0 + */ + void set_leds(float val); + + /** Set LED to duty-cycle + *@param value in range 0.0 to 1.0 */ - void fade_leds(float val); + void set_led1(float val); + + /** Set LED to duty-cycle + *@param value in range 0.0 to 1.0 + */ + void set_led2(float val); + + /** Set LED to duty-cycle + *@param value in range 0.0 to 1.0 + */ + void set_led3(float val); + + /** Set LED to duty-cycle + *@param value in range 0.0 to 1.0 + */ + void set_led4(float val); + + /** Set LED to duty-cycle + *@param value in range 0.0 to 1.0 + */ + void set_led5(float val); + + /** Set LED to duty-cycle + *@param value in range 0.0 to 1.0 + */ + void set_led6(float val); /** Read potentiometer - @returns potentiometer value in range 0.0 to 1.0 + *@returns potentiometer value in range 0.0 to 1.0 */ float read_pot(); /** Play tone on piezo - @param frequency in Hz - @param duration of tone in seconds + * @param frequency in Hz + * @param duration of tone in seconds */ void tone(float frequency, float duration); /** Check if A button pressed - @returns true if yes, false if no + * @returns true if yes, false if no */ bool a_pressed(); /** Check if B button pressed - @returns true if yes, false if no + * @returns true if yes, false if no */ bool b_pressed(); /** Check if X button pressed - @returns true if yes, false if no + * @returns true if yes, false if no */ bool x_pressed(); /** Check if Y button pressed - @returns true if yes, false if no + * @returns true if yes, false if no */ bool y_pressed(); /** Check if L button pressed - @returns true if yes, false if no + * @returns true if yes, false if no */ bool l_pressed(); /** Check if R button pressed - @returns true if yes, false if no + * @returns true if yes, false if no */ bool r_pressed(); /** Check if Back button pressed - @returns true if yes, false if no + * @returns true if yes, false if no */ bool back_pressed(); /** Check if Start button pressed - @returns true if yes, false if no + * @returns true if yes, false if no */ bool start_pressed(); /** Check if Joystick button pressed - @returns true if yes, false if no + * @returns true if yes, false if no */ bool joystick_pressed(); /** Get magnitude of joystick movement - @returns value in range 0.0 to 1.0 + * @returns value in range 0.0 to 1.0 */ float get_mag(); - + /** Get angle of joystick movement - @returns value in range 0.0 to 359.9. 0.0 corresponds to N, 180.0 to S. -1.0 is central + * @returns value in range 0.0 to 359.9. 0.0 corresponds to N, 180.0 to S. -1.0 is central */ float get_angle(); - + /** Gets joystick direction - @returns an enum: CENTRE, N, NE, E, SE, S, SW, W, NW, + * @returns an enum: CENTRE, N, NE, E, SE, S, SW, W, NW, */ Direction get_direction(); // N,NE,E,SE etc. - + /** Gets raw cartesian co-ordinates of joystick - @returns a struct with x,y members, each in the range 0.0 to 1.0 + * @returns a struct with x,y members, each in the range 0.0 to 1.0 */ Vector2D get_coord(); // cartesian co-ordinates x,y - + /** Gets cartesian coordinates mapped to circular grid - @returns a struct with x,y members, each in the range 0.0 to 1.0 + * @returns a struct with x,y members, each in the range 0.0 to 1.0 */ Vector2D get_mapped_coord(); // x,y mapped to circle - + /** Gets polar coordinates of the joystick - @returns a struct contains mag and angle + * @returns a struct contains mag and angle */ Polar get_polar(); // mag and angle in struct form private: - PwmOut *led_1; - PwmOut *led_2; - PwmOut *led_3; - PwmOut *led_4; - PwmOut *led_5; - PwmOut *led_6; + PwmOut *led1; + PwmOut *led2; + PwmOut *led3; + PwmOut *led4; + PwmOut *led5; + PwmOut *led6; InterruptIn *button_A; InterruptIn *button_B;