Library for Sparkfun analog joystick
Fork of SparkfunAnalogJoystick by
SparkfunAnalogJoystick.cpp@1:ed0057aa2e31, 2015-03-08 (annotated)
- Committer:
- ryanzhang1994
- Date:
- Sun Mar 08 05:43:45 2015 +0000
- Revision:
- 1:ed0057aa2e31
- Parent:
- 0:ed9ee35481a9
- Child:
- 2:4761030c1a7d
Sparkfun Analog Joystick Library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ryanzhang1994 | 0:ed9ee35481a9 | 1 | #include "SparkfunAnalogJoystick.h" |
ryanzhang1994 | 0:ed9ee35481a9 | 2 | #include "math.h" |
ryanzhang1994 | 0:ed9ee35481a9 | 3 | |
ryanzhang1994 | 0:ed9ee35481a9 | 4 | #define M_PI 3.14159265358979323846 |
ryanzhang1994 | 0:ed9ee35481a9 | 5 | |
ryanzhang1994 | 1:ed0057aa2e31 | 6 | // Constructor |
ryanzhang1994 | 0:ed9ee35481a9 | 7 | SparkfunAnalogJoystick::SparkfunAnalogJoystick(PinName vert, PinName horz, PinName sel): VERT(vert), HORZ(horz), SEL(sel) |
ryanzhang1994 | 0:ed9ee35481a9 | 8 | { |
ryanzhang1994 | 0:ed9ee35481a9 | 9 | SEL.mode(PullUp); |
ryanzhang1994 | 0:ed9ee35481a9 | 10 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 11 | |
ryanzhang1994 | 1:ed0057aa2e31 | 12 | // Get the button status |
ryanzhang1994 | 0:ed9ee35481a9 | 13 | int SparkfunAnalogJoystick::button(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 14 | return 1-SEL; |
ryanzhang1994 | 0:ed9ee35481a9 | 15 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 16 | |
ryanzhang1994 | 1:ed0057aa2e31 | 17 | // X axis value, reverse the value to get the x value in a normal Cartesian coordinate system |
ryanzhang1994 | 0:ed9ee35481a9 | 18 | float SparkfunAnalogJoystick::xAxis(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 19 | return -(HORZ-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 20 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 21 | |
ryanzhang1994 | 1:ed0057aa2e31 | 22 | // Y axis value |
ryanzhang1994 | 0:ed9ee35481a9 | 23 | float SparkfunAnalogJoystick::yAxis(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 24 | return (VERT-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 25 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 26 | |
ryanzhang1994 | 1:ed0057aa2e31 | 27 | // Calculate the angle value in a polar coordinate system |
ryanzhang1994 | 0:ed9ee35481a9 | 28 | float SparkfunAnalogJoystick::angle(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 29 | float horz=-(HORZ-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 30 | float vert=(VERT-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 31 | float angle=0; |
ryanzhang1994 | 0:ed9ee35481a9 | 32 | if (vert==0&&horz>0) return 0; |
ryanzhang1994 | 0:ed9ee35481a9 | 33 | if (vert==0&&horz<0) return 180; |
ryanzhang1994 | 0:ed9ee35481a9 | 34 | if (horz==0&&vert>0) return 90; |
ryanzhang1994 | 0:ed9ee35481a9 | 35 | if (horz==0&&vert<0) return 270; |
ryanzhang1994 | 0:ed9ee35481a9 | 36 | if (horz>0) angle=atan(vert/horz)*180/M_PI; |
ryanzhang1994 | 0:ed9ee35481a9 | 37 | else angle=180+atan(vert/horz)*180/M_PI; |
ryanzhang1994 | 0:ed9ee35481a9 | 38 | if (angle<0) angle+=360; |
ryanzhang1994 | 0:ed9ee35481a9 | 39 | return angle; |
ryanzhang1994 | 0:ed9ee35481a9 | 40 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 41 | |
ryanzhang1994 | 1:ed0057aa2e31 | 42 | // Calculate the normalized distance value in a polar coordinate system |
ryanzhang1994 | 0:ed9ee35481a9 | 43 | float SparkfunAnalogJoystick::distance(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 44 | float horz=-(HORZ-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 45 | float vert=(VERT-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 46 | float angle=SparkfunAnalogJoystick::angle(); |
ryanzhang1994 | 0:ed9ee35481a9 | 47 | float oneAxis=tan(angle*M_PI/180.0); |
ryanzhang1994 | 0:ed9ee35481a9 | 48 | if (oneAxis<0) oneAxis=-oneAxis; |
ryanzhang1994 | 0:ed9ee35481a9 | 49 | if (oneAxis>1) oneAxis=1/oneAxis; |
ryanzhang1994 | 0:ed9ee35481a9 | 50 | float maxdistance=sqrt(1+oneAxis*oneAxis); |
ryanzhang1994 | 0:ed9ee35481a9 | 51 | float temp=horz*horz+vert*vert; |
ryanzhang1994 | 0:ed9ee35481a9 | 52 | return sqrt(temp)/maxdistance; |
ryanzhang1994 | 0:ed9ee35481a9 | 53 | |
ryanzhang1994 | 0:ed9ee35481a9 | 54 | } |