Analog Joystick Library

Fork of SparkfunAnalogJoystick by ECE4180

Committer:
happinesstaker
Date:
Mon Mar 09 21:11:22 2015 +0000
Revision:
3:2b40241a7675
Parent:
2:4761030c1a7d
Doxygen Added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
happinesstaker 2:4761030c1a7d 1 /** Analog Joystick APIs
happinesstaker 2:4761030c1a7d 2 * Used as a user interface for Sparkfun Analog Joystick Module
happinesstaker 2:4761030c1a7d 3 * @file SparkfunAnalogJoystick.cpp
happinesstaker 2:4761030c1a7d 4 * @author Yuan,ZHANG; Jiajie,YANG
happinesstaker 2:4761030c1a7d 5 */
happinesstaker 2:4761030c1a7d 6
ryanzhang1994 0:ed9ee35481a9 7 #include "SparkfunAnalogJoystick.h"
ryanzhang1994 0:ed9ee35481a9 8 #include "math.h"
ryanzhang1994 0:ed9ee35481a9 9
ryanzhang1994 0:ed9ee35481a9 10 #define M_PI 3.14159265358979323846
ryanzhang1994 0:ed9ee35481a9 11
happinesstaker 3:2b40241a7675 12 /** Constructor of Joystick object
happinesstaker 2:4761030c1a7d 13 */
ryanzhang1994 0:ed9ee35481a9 14 SparkfunAnalogJoystick::SparkfunAnalogJoystick(PinName vert, PinName horz, PinName sel): VERT(vert), HORZ(horz), SEL(sel)
ryanzhang1994 0:ed9ee35481a9 15 {
ryanzhang1994 0:ed9ee35481a9 16 SEL.mode(PullUp);
ryanzhang1994 0:ed9ee35481a9 17 }
ryanzhang1994 0:ed9ee35481a9 18
happinesstaker 3:2b40241a7675 19 //! Get the button status
ryanzhang1994 0:ed9ee35481a9 20 int SparkfunAnalogJoystick::button(){
ryanzhang1994 0:ed9ee35481a9 21 return 1-SEL;
ryanzhang1994 0:ed9ee35481a9 22 }
ryanzhang1994 0:ed9ee35481a9 23
happinesstaker 3:2b40241a7675 24 //! X axis value, reverse the value to get the x value in a normal Cartesian coordinate system
ryanzhang1994 0:ed9ee35481a9 25 float SparkfunAnalogJoystick::xAxis(){
ryanzhang1994 0:ed9ee35481a9 26 return -(HORZ-0.5)*2;
ryanzhang1994 0:ed9ee35481a9 27 }
ryanzhang1994 0:ed9ee35481a9 28
happinesstaker 3:2b40241a7675 29 //! Y axis value
ryanzhang1994 0:ed9ee35481a9 30 float SparkfunAnalogJoystick::yAxis(){
ryanzhang1994 0:ed9ee35481a9 31 return (VERT-0.5)*2;
ryanzhang1994 0:ed9ee35481a9 32 }
ryanzhang1994 0:ed9ee35481a9 33
happinesstaker 3:2b40241a7675 34 //! Calculate the angle value in a polar coordinate system
ryanzhang1994 0:ed9ee35481a9 35 float SparkfunAnalogJoystick::angle(){
ryanzhang1994 0:ed9ee35481a9 36 float horz=-(HORZ-0.5)*2;
ryanzhang1994 0:ed9ee35481a9 37 float vert=(VERT-0.5)*2;
ryanzhang1994 0:ed9ee35481a9 38 float angle=0;
ryanzhang1994 0:ed9ee35481a9 39 if (vert==0&&horz>0) return 0;
ryanzhang1994 0:ed9ee35481a9 40 if (vert==0&&horz<0) return 180;
ryanzhang1994 0:ed9ee35481a9 41 if (horz==0&&vert>0) return 90;
ryanzhang1994 0:ed9ee35481a9 42 if (horz==0&&vert<0) return 270;
ryanzhang1994 0:ed9ee35481a9 43 if (horz>0) angle=atan(vert/horz)*180/M_PI;
ryanzhang1994 0:ed9ee35481a9 44 else angle=180+atan(vert/horz)*180/M_PI;
ryanzhang1994 0:ed9ee35481a9 45 if (angle<0) angle+=360;
ryanzhang1994 0:ed9ee35481a9 46 return angle;
ryanzhang1994 0:ed9ee35481a9 47 }
ryanzhang1994 0:ed9ee35481a9 48
happinesstaker 3:2b40241a7675 49 //! Calculate the normalized distance value in a polar coordinate system
ryanzhang1994 0:ed9ee35481a9 50 float SparkfunAnalogJoystick::distance(){
ryanzhang1994 0:ed9ee35481a9 51 float horz=-(HORZ-0.5)*2;
ryanzhang1994 0:ed9ee35481a9 52 float vert=(VERT-0.5)*2;
ryanzhang1994 0:ed9ee35481a9 53 float angle=SparkfunAnalogJoystick::angle();
ryanzhang1994 0:ed9ee35481a9 54 float oneAxis=tan(angle*M_PI/180.0);
ryanzhang1994 0:ed9ee35481a9 55 if (oneAxis<0) oneAxis=-oneAxis;
ryanzhang1994 0:ed9ee35481a9 56 if (oneAxis>1) oneAxis=1/oneAxis;
ryanzhang1994 0:ed9ee35481a9 57 float maxdistance=sqrt(1+oneAxis*oneAxis);
ryanzhang1994 0:ed9ee35481a9 58 float temp=horz*horz+vert*vert;
ryanzhang1994 0:ed9ee35481a9 59 return sqrt(temp)/maxdistance;
ryanzhang1994 0:ed9ee35481a9 60
ryanzhang1994 0:ed9ee35481a9 61 }