This Class allows the joystick, buttons and petiometers to be implemented easily and coherently in other classes

Fork of Gamepad by Craig Evans

Committer:
domkay97
Date:
Sat Apr 15 15:39:47 2017 +0000
Revision:
23:34da21dfdfd6
Parent:
21:99ec20695524
Child:
24:7b149f5d4bef
Removed redundant code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
domkay97 21:99ec20695524 1 #ifndef Controller_H
domkay97 21:99ec20695524 2 #define Controller_H
domkay97 21:99ec20695524 3
domkay97 21:99ec20695524 4 #include <bitset>
domkay97 21:99ec20695524 5 #include "mbed.h"
domkay97 23:34da21dfdfd6 6
domkay97 21:99ec20695524 7
domkay97 21:99ec20695524 8
domkay97 21:99ec20695524 9 // Forward declaration of the classes that we use from the mbed library
domkay97 21:99ec20695524 10 // This avoids the need for us to include the huge mbed.h header inside our
domkay97 21:99ec20695524 11 // own library API
domkay97 21:99ec20695524 12 namespace mbed
domkay97 21:99ec20695524 13 {
domkay97 21:99ec20695524 14 class AnalogIn;
domkay97 21:99ec20695524 15 class InterruptIn;
domkay97 21:99ec20695524 16 class PwmOut;
domkay97 21:99ec20695524 17 class Timeout;
domkay97 21:99ec20695524 18 }
domkay97 21:99ec20695524 19
domkay97 21:99ec20695524 20
domkay97 21:99ec20695524 21 /** Controller Class
domkay97 21:99ec20695524 22 @brief Library for interfacing with ELEC2645 Controller PCB, University of Leeds
domkay97 21:99ec20695524 23 @author Dr Craig A. Evans
domkay97 21:99ec20695524 24 @author Dr Alex Valanvanis
domkay97 21:99ec20695524 25 @date Febraury 2017
domkay97 21:99ec20695524 26 */
domkay97 21:99ec20695524 27 class Controller
domkay97 21:99ec20695524 28 {
domkay97 21:99ec20695524 29 public:
domkay97 21:99ec20695524 30 /** Controller events
domkay97 21:99ec20695524 31 * @brief List of events that can be registered on the Controller
domkay97 21:99ec20695524 32 */
domkay97 21:99ec20695524 33 enum ControllerEvent {
domkay97 21:99ec20695524 34 A_PRESSED, ///< Button A has been pressed
domkay97 21:99ec20695524 35 B_PRESSED, ///< Button B has been pressed
domkay97 21:99ec20695524 36 X_PRESSED, ///< Button X has been pressed
domkay97 21:99ec20695524 37 Y_PRESSED, ///< Button Y has been pressed
domkay97 21:99ec20695524 38 L_PRESSED, ///< Button L has been pressed
domkay97 21:99ec20695524 39 R_PRESSED, ///< Button R has been pressed
domkay97 21:99ec20695524 40 BACK_PRESSED, ///< Button "Back" has been pressed
domkay97 21:99ec20695524 41 START_PRESSED, ///< Button "Start" has been pressed
domkay97 21:99ec20695524 42 JOY_PRESSED, ///< Joystick button has been pressed
domkay97 21:99ec20695524 43 N_EVENTS ///< A dummy flag that marks the end of the list
domkay97 21:99ec20695524 44 };
domkay97 21:99ec20695524 45 private:
domkay97 21:99ec20695524 46 mbed::PwmOut *_led1;
domkay97 21:99ec20695524 47 mbed::PwmOut *_led2;
domkay97 21:99ec20695524 48 mbed::PwmOut *_led3;
domkay97 21:99ec20695524 49 mbed::PwmOut *_led4;
domkay97 21:99ec20695524 50 mbed::PwmOut *_led5;
domkay97 21:99ec20695524 51 mbed::PwmOut *_led6;
domkay97 21:99ec20695524 52
domkay97 21:99ec20695524 53 mbed::InterruptIn *_button_A;
domkay97 21:99ec20695524 54 mbed::InterruptIn *_button_B;
domkay97 21:99ec20695524 55 mbed::InterruptIn *_button_X;
domkay97 21:99ec20695524 56 mbed::InterruptIn *_button_Y;
domkay97 21:99ec20695524 57 mbed::InterruptIn *_button_L;
domkay97 21:99ec20695524 58 mbed::InterruptIn *_button_R;
domkay97 21:99ec20695524 59 mbed::InterruptIn *_button_back;
domkay97 21:99ec20695524 60 mbed::InterruptIn *_button_start;
domkay97 21:99ec20695524 61 mbed::InterruptIn *_button_joystick;
domkay97 21:99ec20695524 62
domkay97 21:99ec20695524 63 mbed::AnalogIn *_vert;
domkay97 21:99ec20695524 64 mbed::AnalogIn *_horiz;
domkay97 21:99ec20695524 65
domkay97 21:99ec20695524 66 mbed::PwmOut *_buzzer;
domkay97 21:99ec20695524 67 mbed::AnalogIn *_pot;
domkay97 21:99ec20695524 68
domkay97 21:99ec20695524 69 mbed::Timeout *_timeout;
domkay97 21:99ec20695524 70
domkay97 21:99ec20695524 71 std::bitset<N_EVENTS> _event_state; ///< A binary list of buttons that has been pressed
domkay97 21:99ec20695524 72
domkay97 21:99ec20695524 73 // centred x,y values
domkay97 21:99ec20695524 74 float _x0;
domkay97 21:99ec20695524 75 float _y0;
domkay97 21:99ec20695524 76
domkay97 21:99ec20695524 77 public:
domkay97 21:99ec20695524 78
domkay97 21:99ec20695524 79 /** Constructor */
domkay97 21:99ec20695524 80 Controller();
domkay97 21:99ec20695524 81
domkay97 21:99ec20695524 82 /** Destructor */
domkay97 21:99ec20695524 83 ~Controller();
domkay97 21:99ec20695524 84
domkay97 21:99ec20695524 85 /** Initialise all peripherals and configure interrupts */
domkay97 21:99ec20695524 86 void init();
domkay97 21:99ec20695524 87
domkay97 21:99ec20695524 88 /** Turn all LEDs on */
domkay97 21:99ec20695524 89 void leds_on();
domkay97 21:99ec20695524 90
domkay97 21:99ec20695524 91 /** Turn all LEDs off */
domkay97 21:99ec20695524 92 void leds_off();
domkay97 21:99ec20695524 93
domkay97 21:99ec20695524 94 /** Set all LEDs to duty-cycle
domkay97 21:99ec20695524 95 *@param value in range 0.0 to 1.0
domkay97 21:99ec20695524 96 */
domkay97 21:99ec20695524 97 void leds(float val) const;
domkay97 21:99ec20695524 98
domkay97 21:99ec20695524 99 /** Set LED to duty-cycle
domkay97 21:99ec20695524 100 *@param led number (0 to 5)
domkay97 21:99ec20695524 101 *@param value in range 0.0 to 1.0
domkay97 21:99ec20695524 102 */
domkay97 21:99ec20695524 103 void led(int n,float val) const;
domkay97 21:99ec20695524 104
domkay97 21:99ec20695524 105 /** Read potentiometer
domkay97 21:99ec20695524 106 *@returns potentiometer value in range 0.0 to 1.0
domkay97 21:99ec20695524 107 */
domkay97 21:99ec20695524 108 float read_pot() const;
domkay97 21:99ec20695524 109
domkay97 21:99ec20695524 110 /** Play tone on piezo
domkay97 21:99ec20695524 111 * @param frequency in Hz
domkay97 21:99ec20695524 112 * @param duration of tone in seconds
domkay97 21:99ec20695524 113 */
domkay97 21:99ec20695524 114 void tone(float frequency, float duration);
domkay97 21:99ec20695524 115
domkay97 21:99ec20695524 116 /**
domkay97 21:99ec20695524 117 * @brief Check whether an event flag has been set and clear it
domkay97 21:99ec20695524 118 * @param id[in] The ID of the event to test
domkay97 21:99ec20695524 119 * @return true if the event occurred
domkay97 21:99ec20695524 120 */
domkay97 21:99ec20695524 121 bool check_event(ControllerEvent const id);
domkay97 21:99ec20695524 122
domkay97 21:99ec20695524 123 /** Get magnitude of joystick movement
domkay97 21:99ec20695524 124 * @returns value in range 0.0 to 1.0
domkay97 21:99ec20695524 125 */
domkay97 21:99ec20695524 126 int check_for_buttons();
domkay97 21:99ec20695524 127
domkay97 21:99ec20695524 128
domkay97 21:99ec20695524 129 private:
domkay97 21:99ec20695524 130 void init_buttons();
domkay97 21:99ec20695524 131 void tone_off();
domkay97 21:99ec20695524 132
domkay97 21:99ec20695524 133 void a_isr();
domkay97 21:99ec20695524 134 void b_isr();
domkay97 21:99ec20695524 135 void x_isr();
domkay97 21:99ec20695524 136 void y_isr();
domkay97 21:99ec20695524 137 void l_isr();
domkay97 21:99ec20695524 138 void r_isr();
domkay97 21:99ec20695524 139 void back_isr();
domkay97 21:99ec20695524 140 void start_isr();
domkay97 21:99ec20695524 141 void joy_isr();
domkay97 21:99ec20695524 142 };
domkay97 21:99ec20695524 143
domkay97 21:99ec20695524 144 #endif