Sparkfun Analog Joystick

Dependents:   Lab4 4180final_receiver 4180final_sender DuelingTanks ... more

Fork of SparkfunAnalogJoystick by ECE4180

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?

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