Working Menu with selectable fields yet to add comparison with healthy temperature ranges

Dependencies:   TMP102_02

Committer:
ejh23
Date:
Fri Feb 04 19:10:09 2022 +0000
Revision:
10:62da82b9b6de
Parent:
1:e11018cf2c14
Final code for submission

Who changed what in which revision?

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