Final tidy of code following installation of new sensor, more comments added prior to submission

Dependencies:   mbed

Committer:
legstar85
Date:
Fri Jan 21 14:26:56 2022 +0000
Revision:
13:5ad65a688f3f
Updated due to issues with using Start Temp variable later in program now resolved. Doxygen completed and folders in place correctly

Who changed what in which revision?

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