Library for Sparkfun analog joystick
Fork of SparkfunAnalogJoystick by
SparkfunAnalogJoystick.cpp@2:4761030c1a7d, 2015-03-09 (annotated)
- Committer:
- happinesstaker
- Date:
- Mon Mar 09 21:01:23 2015 +0000
- Revision:
- 2:4761030c1a7d
- Parent:
- 1:ed0057aa2e31
- Child:
- 3:2b40241a7675
add Doxygen test
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 | 2:4761030c1a7d | 12 | /** My HelloWorld class. |
happinesstaker | 2:4761030c1a7d | 13 | * Used for printing "Hello World" on USB serial. |
happinesstaker | 2:4761030c1a7d | 14 | */ |
ryanzhang1994 | 0:ed9ee35481a9 | 15 | SparkfunAnalogJoystick::SparkfunAnalogJoystick(PinName vert, PinName horz, PinName sel): VERT(vert), HORZ(horz), SEL(sel) |
ryanzhang1994 | 0:ed9ee35481a9 | 16 | { |
ryanzhang1994 | 0:ed9ee35481a9 | 17 | SEL.mode(PullUp); |
ryanzhang1994 | 0:ed9ee35481a9 | 18 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 19 | |
ryanzhang1994 | 1:ed0057aa2e31 | 20 | // Get the button status |
ryanzhang1994 | 0:ed9ee35481a9 | 21 | int SparkfunAnalogJoystick::button(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 22 | return 1-SEL; |
ryanzhang1994 | 0:ed9ee35481a9 | 23 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 24 | |
ryanzhang1994 | 1:ed0057aa2e31 | 25 | // X axis value, reverse the value to get the x value in a normal Cartesian coordinate system |
ryanzhang1994 | 0:ed9ee35481a9 | 26 | float SparkfunAnalogJoystick::xAxis(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 27 | return -(HORZ-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 28 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 29 | |
ryanzhang1994 | 1:ed0057aa2e31 | 30 | // Y axis value |
ryanzhang1994 | 0:ed9ee35481a9 | 31 | float SparkfunAnalogJoystick::yAxis(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 32 | return (VERT-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 33 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 34 | |
ryanzhang1994 | 1:ed0057aa2e31 | 35 | // Calculate the angle value in a polar coordinate system |
ryanzhang1994 | 0:ed9ee35481a9 | 36 | float SparkfunAnalogJoystick::angle(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 37 | float horz=-(HORZ-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 38 | float vert=(VERT-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 39 | float angle=0; |
ryanzhang1994 | 0:ed9ee35481a9 | 40 | if (vert==0&&horz>0) return 0; |
ryanzhang1994 | 0:ed9ee35481a9 | 41 | if (vert==0&&horz<0) return 180; |
ryanzhang1994 | 0:ed9ee35481a9 | 42 | if (horz==0&&vert>0) return 90; |
ryanzhang1994 | 0:ed9ee35481a9 | 43 | if (horz==0&&vert<0) return 270; |
ryanzhang1994 | 0:ed9ee35481a9 | 44 | if (horz>0) angle=atan(vert/horz)*180/M_PI; |
ryanzhang1994 | 0:ed9ee35481a9 | 45 | else angle=180+atan(vert/horz)*180/M_PI; |
ryanzhang1994 | 0:ed9ee35481a9 | 46 | if (angle<0) angle+=360; |
ryanzhang1994 | 0:ed9ee35481a9 | 47 | return angle; |
ryanzhang1994 | 0:ed9ee35481a9 | 48 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 49 | |
ryanzhang1994 | 1:ed0057aa2e31 | 50 | // Calculate the normalized distance value in a polar coordinate system |
ryanzhang1994 | 0:ed9ee35481a9 | 51 | float SparkfunAnalogJoystick::distance(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 52 | float horz=-(HORZ-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 53 | float vert=(VERT-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 54 | float angle=SparkfunAnalogJoystick::angle(); |
ryanzhang1994 | 0:ed9ee35481a9 | 55 | float oneAxis=tan(angle*M_PI/180.0); |
ryanzhang1994 | 0:ed9ee35481a9 | 56 | if (oneAxis<0) oneAxis=-oneAxis; |
ryanzhang1994 | 0:ed9ee35481a9 | 57 | if (oneAxis>1) oneAxis=1/oneAxis; |
ryanzhang1994 | 0:ed9ee35481a9 | 58 | float maxdistance=sqrt(1+oneAxis*oneAxis); |
ryanzhang1994 | 0:ed9ee35481a9 | 59 | float temp=horz*horz+vert*vert; |
ryanzhang1994 | 0:ed9ee35481a9 | 60 | return sqrt(temp)/maxdistance; |
ryanzhang1994 | 0:ed9ee35481a9 | 61 | |
ryanzhang1994 | 0:ed9ee35481a9 | 62 | } |