Library for Sparkfun analog joystick
Fork of SparkfunAnalogJoystick by
SparkfunAnalogJoystick.cpp@0:ed9ee35481a9, 2015-03-07 (annotated)
- Committer:
- ryanzhang1994
- Date:
- Sat Mar 07 23:28:06 2015 +0000
- Revision:
- 0:ed9ee35481a9
- Child:
- 1:ed0057aa2e31
Sparkfun Analog Joystick
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 | 0:ed9ee35481a9 | 6 | SparkfunAnalogJoystick::SparkfunAnalogJoystick(PinName vert, PinName horz, PinName sel): VERT(vert), HORZ(horz), SEL(sel) |
ryanzhang1994 | 0:ed9ee35481a9 | 7 | { |
ryanzhang1994 | 0:ed9ee35481a9 | 8 | SEL.mode(PullUp); |
ryanzhang1994 | 0:ed9ee35481a9 | 9 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 10 | |
ryanzhang1994 | 0:ed9ee35481a9 | 11 | int SparkfunAnalogJoystick::button(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 12 | return 1-SEL; |
ryanzhang1994 | 0:ed9ee35481a9 | 13 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 14 | |
ryanzhang1994 | 0:ed9ee35481a9 | 15 | float SparkfunAnalogJoystick::xAxis(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 16 | return -(HORZ-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 17 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 18 | |
ryanzhang1994 | 0:ed9ee35481a9 | 19 | float SparkfunAnalogJoystick::yAxis(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 20 | return (VERT-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 21 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 22 | |
ryanzhang1994 | 0:ed9ee35481a9 | 23 | float SparkfunAnalogJoystick::angle(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 24 | float horz=-(HORZ-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 25 | float vert=(VERT-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 26 | float angle=0; |
ryanzhang1994 | 0:ed9ee35481a9 | 27 | if (vert==0&&horz>0) return 0; |
ryanzhang1994 | 0:ed9ee35481a9 | 28 | if (vert==0&&horz<0) return 180; |
ryanzhang1994 | 0:ed9ee35481a9 | 29 | if (horz==0&&vert>0) return 90; |
ryanzhang1994 | 0:ed9ee35481a9 | 30 | if (horz==0&&vert<0) return 270; |
ryanzhang1994 | 0:ed9ee35481a9 | 31 | if (horz>0) angle=atan(vert/horz)*180/M_PI; |
ryanzhang1994 | 0:ed9ee35481a9 | 32 | else angle=180+atan(vert/horz)*180/M_PI; |
ryanzhang1994 | 0:ed9ee35481a9 | 33 | if (angle<0) angle+=360; |
ryanzhang1994 | 0:ed9ee35481a9 | 34 | return angle; |
ryanzhang1994 | 0:ed9ee35481a9 | 35 | } |
ryanzhang1994 | 0:ed9ee35481a9 | 36 | |
ryanzhang1994 | 0:ed9ee35481a9 | 37 | float SparkfunAnalogJoystick::distance(){ |
ryanzhang1994 | 0:ed9ee35481a9 | 38 | float horz=-(HORZ-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 39 | float vert=(VERT-0.5)*2; |
ryanzhang1994 | 0:ed9ee35481a9 | 40 | float angle=SparkfunAnalogJoystick::angle(); |
ryanzhang1994 | 0:ed9ee35481a9 | 41 | float oneAxis=tan(angle*M_PI/180.0); |
ryanzhang1994 | 0:ed9ee35481a9 | 42 | if (oneAxis<0) oneAxis=-oneAxis; |
ryanzhang1994 | 0:ed9ee35481a9 | 43 | if (oneAxis>1) oneAxis=1/oneAxis; |
ryanzhang1994 | 0:ed9ee35481a9 | 44 | float maxdistance=sqrt(1+oneAxis*oneAxis); |
ryanzhang1994 | 0:ed9ee35481a9 | 45 | float temp=horz*horz+vert*vert; |
ryanzhang1994 | 0:ed9ee35481a9 | 46 | return sqrt(temp)/maxdistance; |
ryanzhang1994 | 0:ed9ee35481a9 | 47 | |
ryanzhang1994 | 0:ed9ee35481a9 | 48 | } |