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:
Sun Apr 16 21:18:08 2017 +0000
Revision:
26:ccdf299b26c4
Parent:
25:edb07ff38749
Child:
28:7c0dbbd90c2e
Created Players seelction

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 24:7b149f5d4bef 22 @brief This Library allows interrupts and petiometers to be implimented easily and coherently in other classes
domkay97 24:7b149f5d4bef 23 @author Dominic KAy
domkay97 24:7b149f5d4bef 24
domkay97 24:7b149f5d4bef 25 @date April 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 24:7b149f5d4bef 31 * @brief List of all events which are triggered by an interrupt.
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 26:ccdf299b26c4 72 float _x0;
domkay97 26:ccdf299b26c4 73
domkay97 21:99ec20695524 74 public:
domkay97 21:99ec20695524 75
domkay97 21:99ec20695524 76 /** Constructor */
domkay97 21:99ec20695524 77 Controller();
domkay97 21:99ec20695524 78
domkay97 21:99ec20695524 79 /** Destructor */
domkay97 21:99ec20695524 80 ~Controller();
domkay97 21:99ec20695524 81
domkay97 24:7b149f5d4bef 82 /** Clear all the interrupt flags and turn off all LEDs */
domkay97 21:99ec20695524 83 void init();
domkay97 21:99ec20695524 84
domkay97 24:7b149f5d4bef 85 /** Turn on all the LEDs */
domkay97 24:7b149f5d4bef 86 void ledsON();
domkay97 21:99ec20695524 87
domkay97 24:7b149f5d4bef 88 /** Turn off all the LEDs */
domkay97 24:7b149f5d4bef 89 void ledsOFF();
domkay97 21:99ec20695524 90
domkay97 24:7b149f5d4bef 91 /** Set all LEDs to duty-cycle EDIT
domkay97 24:7b149f5d4bef 92 *@param float value varing from 0.0 to 1.0
domkay97 21:99ec20695524 93 */
domkay97 21:99ec20695524 94 void leds(float val) const;
domkay97 21:99ec20695524 95
domkay97 24:7b149f5d4bef 96 /** Set LED to duty-cycle EDIT
domkay97 21:99ec20695524 97 *@param led number (0 to 5)
domkay97 21:99ec20695524 98 *@param value in range 0.0 to 1.0
domkay97 21:99ec20695524 99 */
domkay97 21:99ec20695524 100 void led(int n,float val) const;
domkay97 21:99ec20695524 101
domkay97 21:99ec20695524 102 /** Read potentiometer
domkay97 24:7b149f5d4bef 103 *@returns value from 0.0 to 1.0 to effect other classes
domkay97 21:99ec20695524 104 */
domkay97 24:7b149f5d4bef 105 float pot_value() const;
domkay97 21:99ec20695524 106
domkay97 21:99ec20695524 107 /** Play tone on piezo
domkay97 24:7b149f5d4bef 108 * @param frequency of sound(Hz)
domkay97 24:7b149f5d4bef 109 * @param duration of sound(s)
domkay97 21:99ec20695524 110 */
domkay97 24:7b149f5d4bef 111 void sound(float frequency, float duration);
domkay97 21:99ec20695524 112
domkay97 21:99ec20695524 113 /**
domkay97 24:7b149f5d4bef 114 * @brief Checks if a specific flag has been set.
domkay97 24:7b149f5d4bef 115 * @param id[in] The specific flag ID
domkay97 24:7b149f5d4bef 116 * @return true if the flag occurred
domkay97 21:99ec20695524 117 */
domkay97 21:99ec20695524 118 bool check_event(ControllerEvent const id);
domkay97 21:99ec20695524 119
domkay97 24:7b149f5d4bef 120 /**
domkay97 26:ccdf299b26c4 121 * @brief Checks if joystick is flicked
domkay97 26:ccdf299b26c4 122 * @return x value
domkay97 26:ccdf299b26c4 123 */
domkay97 26:ccdf299b26c4 124
domkay97 26:ccdf299b26c4 125 float get_joy();
domkay97 26:ccdf299b26c4 126
domkay97 26:ccdf299b26c4 127 /**
domkay97 25:edb07ff38749 128 * @brief Allows for a specific integer to be returned if a specific flag has been set
domkay97 25:edb07ff38749 129 * @return interger unique to the flag set.
domkay97 24:7b149f5d4bef 130 */
domkay97 21:99ec20695524 131 int check_for_buttons();
domkay97 21:99ec20695524 132
domkay97 21:99ec20695524 133
domkay97 26:ccdf299b26c4 134
domkay97 21:99ec20695524 135 private:
domkay97 21:99ec20695524 136 void init_buttons();
domkay97 24:7b149f5d4bef 137 void sound_off();
domkay97 21:99ec20695524 138
domkay97 21:99ec20695524 139 void a_isr();
domkay97 21:99ec20695524 140 void b_isr();
domkay97 21:99ec20695524 141 void x_isr();
domkay97 21:99ec20695524 142 void y_isr();
domkay97 21:99ec20695524 143 void l_isr();
domkay97 21:99ec20695524 144 void r_isr();
domkay97 21:99ec20695524 145 void back_isr();
domkay97 21:99ec20695524 146 void start_isr();
domkay97 21:99ec20695524 147 void joy_isr();
domkay97 21:99ec20695524 148 };
domkay97 21:99ec20695524 149
domkay97 21:99ec20695524 150 #endif