Analog Joystick Library

Fork of SparkfunAnalogJoystick by ECE4180

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?

UserRevisionLine numberNew 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 }