Library for Sparkfun analog joystick
Fork of SparkfunAnalogJoystick by
SparkfunAnalogJoystick.cpp@3:2b40241a7675, 2015-03-09 (annotated)
- Committer:
- happinesstaker
- Date:
- Mon Mar 09 21:11:22 2015 +0000
- Revision:
- 3:2b40241a7675
- Parent:
- 2:4761030c1a7d
- Child:
- 4:98f381ce9b3a
Doxygen Added
Who changed what in which revision?
User | Revision | Line number | New 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 | } |