mid

Dependencies:   mbed

Revision:
0:9a525a0d1d3f
diff -r 000000000000 -r 9a525a0d1d3f Joystick/Joystick.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Joystick/Joystick.h	Mon Apr 27 12:01:16 2020 +0000
@@ -0,0 +1,108 @@
+#ifndef JOYSTICK_H
+#define JOYSTICK_H
+
+#include "mbed.h"
+
+// this value can be tuned to alter tolerance of joystick movement
+#define TOL 0.1f
+#define RAD2DEG 57.2957795131f
+
+enum Direction {
+    CENTRE,  // 0
+    N,       // 1
+    NE,      // 2
+    E,       // 3
+    SE,      // 4
+    S,       // 5
+    SW,      // 6
+    W,       // 7
+    NW      // 8
+};
+
+struct Vector2D {
+  float x;
+  float y;  
+};
+
+struct Polar {
+    float mag;
+    float angle;
+};
+
+/** Joystick Class
+@author Dr Craig A. Evans, University of Leeds
+@brief  Library for interfacing with analogue joystick
+
+Example:
+
+@code
+
+#include "mbed.h"
+#include "Joystick.h"
+
+//                  y     x     button
+Joystick joystick(PTB10,PTB11,PTC16);
+
+int main() {
+    
+    joystick.init();
+    
+    while(1) {
+    
+        Vector2D coord = joystick.get_coord();
+        printf("Coord = %f,%f\n",coord.x,coord.y);
+        
+        Vector2D mapped_coord = joystick.get_mapped_coord(); 
+        printf("Mapped coord = %f,%f\n",mapped_coord.x,mapped_coord.y); 
+        
+        float mag = joystick.get_mag();
+        float angle = joystick.get_angle();
+        printf("Mag = %f Angle = %f\n",mag,angle);
+        
+        Direction d = joystick.get_direction();
+        printf("Direction = %i\n",d);
+        
+        if (joystick.button_pressed() ) {
+            printf("Button Pressed\n");  
+        }
+          
+        wait(0.5);
+    }
+    
+    
+}
+
+* @endcode
+*/
+class Joystick
+{
+public:
+    
+    //              y-pot              x-pot            button
+    Joystick(PinName vertPin,PinName horizPin,PinName clickPin);
+    
+    void init();  // needs to be called at start with joystick centred
+    float get_mag();              // polar
+    float get_angle();            // polar
+    Vector2D get_coord();         // cartesian co-ordinates x,y
+    Vector2D get_mapped_coord();  // x,y mapped to circle
+    Direction get_direction();    // N,NE,E,SE etc.
+    Polar get_polar();            // mag and angle in struct form
+    bool button_pressed();        // read button flag set in ISR when button pressed
+    
+private:
+
+    AnalogIn *vert;
+    AnalogIn *horiz;
+    InterruptIn *click;
+    
+    int _click_flag;    // flag set in ISR
+    void click_isr();   // ISR on button press
+       
+    // centred x,y values    
+    float _x0;
+    float _y0;
+    
+};
+
+#endif
\ No newline at end of file