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

Dependencies:   mbed

Committer:
legstar85
Date:
Fri Feb 04 09:20:18 2022 +0000
Revision:
18:fc63b51a0302
Parent:
13:5ad65a688f3f
Final tidy of code following installation of new sensor, more comments added prior to submission

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