Yiming Zhang
/
botton
mid
Joystick/Joystick.h@0:9a525a0d1d3f, 2020-04-27 (annotated)
- Committer:
- sjuzyz
- Date:
- Mon Apr 27 12:01:16 2020 +0000
- Revision:
- 0:9a525a0d1d3f
mid
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sjuzyz | 0:9a525a0d1d3f | 1 | #ifndef JOYSTICK_H |
sjuzyz | 0:9a525a0d1d3f | 2 | #define JOYSTICK_H |
sjuzyz | 0:9a525a0d1d3f | 3 | |
sjuzyz | 0:9a525a0d1d3f | 4 | #include "mbed.h" |
sjuzyz | 0:9a525a0d1d3f | 5 | |
sjuzyz | 0:9a525a0d1d3f | 6 | // this value can be tuned to alter tolerance of joystick movement |
sjuzyz | 0:9a525a0d1d3f | 7 | #define TOL 0.1f |
sjuzyz | 0:9a525a0d1d3f | 8 | #define RAD2DEG 57.2957795131f |
sjuzyz | 0:9a525a0d1d3f | 9 | |
sjuzyz | 0:9a525a0d1d3f | 10 | enum Direction { |
sjuzyz | 0:9a525a0d1d3f | 11 | CENTRE, // 0 |
sjuzyz | 0:9a525a0d1d3f | 12 | N, // 1 |
sjuzyz | 0:9a525a0d1d3f | 13 | NE, // 2 |
sjuzyz | 0:9a525a0d1d3f | 14 | E, // 3 |
sjuzyz | 0:9a525a0d1d3f | 15 | SE, // 4 |
sjuzyz | 0:9a525a0d1d3f | 16 | S, // 5 |
sjuzyz | 0:9a525a0d1d3f | 17 | SW, // 6 |
sjuzyz | 0:9a525a0d1d3f | 18 | W, // 7 |
sjuzyz | 0:9a525a0d1d3f | 19 | NW // 8 |
sjuzyz | 0:9a525a0d1d3f | 20 | }; |
sjuzyz | 0:9a525a0d1d3f | 21 | |
sjuzyz | 0:9a525a0d1d3f | 22 | struct Vector2D { |
sjuzyz | 0:9a525a0d1d3f | 23 | float x; |
sjuzyz | 0:9a525a0d1d3f | 24 | float y; |
sjuzyz | 0:9a525a0d1d3f | 25 | }; |
sjuzyz | 0:9a525a0d1d3f | 26 | |
sjuzyz | 0:9a525a0d1d3f | 27 | struct Polar { |
sjuzyz | 0:9a525a0d1d3f | 28 | float mag; |
sjuzyz | 0:9a525a0d1d3f | 29 | float angle; |
sjuzyz | 0:9a525a0d1d3f | 30 | }; |
sjuzyz | 0:9a525a0d1d3f | 31 | |
sjuzyz | 0:9a525a0d1d3f | 32 | /** Joystick Class |
sjuzyz | 0:9a525a0d1d3f | 33 | @author Dr Craig A. Evans, University of Leeds |
sjuzyz | 0:9a525a0d1d3f | 34 | @brief Library for interfacing with analogue joystick |
sjuzyz | 0:9a525a0d1d3f | 35 | |
sjuzyz | 0:9a525a0d1d3f | 36 | Example: |
sjuzyz | 0:9a525a0d1d3f | 37 | |
sjuzyz | 0:9a525a0d1d3f | 38 | @code |
sjuzyz | 0:9a525a0d1d3f | 39 | |
sjuzyz | 0:9a525a0d1d3f | 40 | #include "mbed.h" |
sjuzyz | 0:9a525a0d1d3f | 41 | #include "Joystick.h" |
sjuzyz | 0:9a525a0d1d3f | 42 | |
sjuzyz | 0:9a525a0d1d3f | 43 | // y x button |
sjuzyz | 0:9a525a0d1d3f | 44 | Joystick joystick(PTB10,PTB11,PTC16); |
sjuzyz | 0:9a525a0d1d3f | 45 | |
sjuzyz | 0:9a525a0d1d3f | 46 | int main() { |
sjuzyz | 0:9a525a0d1d3f | 47 | |
sjuzyz | 0:9a525a0d1d3f | 48 | joystick.init(); |
sjuzyz | 0:9a525a0d1d3f | 49 | |
sjuzyz | 0:9a525a0d1d3f | 50 | while(1) { |
sjuzyz | 0:9a525a0d1d3f | 51 | |
sjuzyz | 0:9a525a0d1d3f | 52 | Vector2D coord = joystick.get_coord(); |
sjuzyz | 0:9a525a0d1d3f | 53 | printf("Coord = %f,%f\n",coord.x,coord.y); |
sjuzyz | 0:9a525a0d1d3f | 54 | |
sjuzyz | 0:9a525a0d1d3f | 55 | Vector2D mapped_coord = joystick.get_mapped_coord(); |
sjuzyz | 0:9a525a0d1d3f | 56 | printf("Mapped coord = %f,%f\n",mapped_coord.x,mapped_coord.y); |
sjuzyz | 0:9a525a0d1d3f | 57 | |
sjuzyz | 0:9a525a0d1d3f | 58 | float mag = joystick.get_mag(); |
sjuzyz | 0:9a525a0d1d3f | 59 | float angle = joystick.get_angle(); |
sjuzyz | 0:9a525a0d1d3f | 60 | printf("Mag = %f Angle = %f\n",mag,angle); |
sjuzyz | 0:9a525a0d1d3f | 61 | |
sjuzyz | 0:9a525a0d1d3f | 62 | Direction d = joystick.get_direction(); |
sjuzyz | 0:9a525a0d1d3f | 63 | printf("Direction = %i\n",d); |
sjuzyz | 0:9a525a0d1d3f | 64 | |
sjuzyz | 0:9a525a0d1d3f | 65 | if (joystick.button_pressed() ) { |
sjuzyz | 0:9a525a0d1d3f | 66 | printf("Button Pressed\n"); |
sjuzyz | 0:9a525a0d1d3f | 67 | } |
sjuzyz | 0:9a525a0d1d3f | 68 | |
sjuzyz | 0:9a525a0d1d3f | 69 | wait(0.5); |
sjuzyz | 0:9a525a0d1d3f | 70 | } |
sjuzyz | 0:9a525a0d1d3f | 71 | |
sjuzyz | 0:9a525a0d1d3f | 72 | |
sjuzyz | 0:9a525a0d1d3f | 73 | } |
sjuzyz | 0:9a525a0d1d3f | 74 | |
sjuzyz | 0:9a525a0d1d3f | 75 | * @endcode |
sjuzyz | 0:9a525a0d1d3f | 76 | */ |
sjuzyz | 0:9a525a0d1d3f | 77 | class Joystick |
sjuzyz | 0:9a525a0d1d3f | 78 | { |
sjuzyz | 0:9a525a0d1d3f | 79 | public: |
sjuzyz | 0:9a525a0d1d3f | 80 | |
sjuzyz | 0:9a525a0d1d3f | 81 | // y-pot x-pot button |
sjuzyz | 0:9a525a0d1d3f | 82 | Joystick(PinName vertPin,PinName horizPin,PinName clickPin); |
sjuzyz | 0:9a525a0d1d3f | 83 | |
sjuzyz | 0:9a525a0d1d3f | 84 | void init(); // needs to be called at start with joystick centred |
sjuzyz | 0:9a525a0d1d3f | 85 | float get_mag(); // polar |
sjuzyz | 0:9a525a0d1d3f | 86 | float get_angle(); // polar |
sjuzyz | 0:9a525a0d1d3f | 87 | Vector2D get_coord(); // cartesian co-ordinates x,y |
sjuzyz | 0:9a525a0d1d3f | 88 | Vector2D get_mapped_coord(); // x,y mapped to circle |
sjuzyz | 0:9a525a0d1d3f | 89 | Direction get_direction(); // N,NE,E,SE etc. |
sjuzyz | 0:9a525a0d1d3f | 90 | Polar get_polar(); // mag and angle in struct form |
sjuzyz | 0:9a525a0d1d3f | 91 | bool button_pressed(); // read button flag set in ISR when button pressed |
sjuzyz | 0:9a525a0d1d3f | 92 | |
sjuzyz | 0:9a525a0d1d3f | 93 | private: |
sjuzyz | 0:9a525a0d1d3f | 94 | |
sjuzyz | 0:9a525a0d1d3f | 95 | AnalogIn *vert; |
sjuzyz | 0:9a525a0d1d3f | 96 | AnalogIn *horiz; |
sjuzyz | 0:9a525a0d1d3f | 97 | InterruptIn *click; |
sjuzyz | 0:9a525a0d1d3f | 98 | |
sjuzyz | 0:9a525a0d1d3f | 99 | int _click_flag; // flag set in ISR |
sjuzyz | 0:9a525a0d1d3f | 100 | void click_isr(); // ISR on button press |
sjuzyz | 0:9a525a0d1d3f | 101 | |
sjuzyz | 0:9a525a0d1d3f | 102 | // centred x,y values |
sjuzyz | 0:9a525a0d1d3f | 103 | float _x0; |
sjuzyz | 0:9a525a0d1d3f | 104 | float _y0; |
sjuzyz | 0:9a525a0d1d3f | 105 | |
sjuzyz | 0:9a525a0d1d3f | 106 | }; |
sjuzyz | 0:9a525a0d1d3f | 107 | |
sjuzyz | 0:9a525a0d1d3f | 108 | #endif |