legionella detector

Dependencies:   mbed

Committer:
lewiscameron
Date:
Wed Aug 24 19:43:57 2022 +0000
Revision:
6:4e8b0d2bbe85
Parent:
0:089b4c4f2b6f
end

Who changed what in which revision?

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