Library for Sparkfun analog joystick
Fork of SparkfunAnalogJoystick by
SparkfunAnalogJoystick.cpp
- Committer:
- happinesstaker
- Date:
- 2015-03-09
- Revision:
- 3:2b40241a7675
- Parent:
- 2:4761030c1a7d
- Child:
- 4:98f381ce9b3a
File content as of revision 3:2b40241a7675:
/** Analog Joystick APIs * Used as a user interface for Sparkfun Analog Joystick Module * @file SparkfunAnalogJoystick.cpp * @author Yuan,ZHANG; Jiajie,YANG */ #include "SparkfunAnalogJoystick.h" #include "math.h" #define M_PI 3.14159265358979323846 /** Constructor of Joystick object */ SparkfunAnalogJoystick::SparkfunAnalogJoystick(PinName vert, PinName horz, PinName sel): VERT(vert), HORZ(horz), SEL(sel) { SEL.mode(PullUp); } //! Get the button status int SparkfunAnalogJoystick::button(){ return 1-SEL; } //! X axis value, reverse the value to get the x value in a normal Cartesian coordinate system float SparkfunAnalogJoystick::xAxis(){ return -(HORZ-0.5)*2; } //! Y axis value float SparkfunAnalogJoystick::yAxis(){ return (VERT-0.5)*2; } //! Calculate the angle value in a polar coordinate system float SparkfunAnalogJoystick::angle(){ float horz=-(HORZ-0.5)*2; float vert=(VERT-0.5)*2; float angle=0; if (vert==0&&horz>0) return 0; if (vert==0&&horz<0) return 180; if (horz==0&&vert>0) return 90; if (horz==0&&vert<0) return 270; if (horz>0) angle=atan(vert/horz)*180/M_PI; else angle=180+atan(vert/horz)*180/M_PI; if (angle<0) angle+=360; return angle; } //! Calculate the normalized distance value in a polar coordinate system float SparkfunAnalogJoystick::distance(){ float horz=-(HORZ-0.5)*2; float vert=(VERT-0.5)*2; float angle=SparkfunAnalogJoystick::angle(); float oneAxis=tan(angle*M_PI/180.0); if (oneAxis<0) oneAxis=-oneAxis; if (oneAxis>1) oneAxis=1/oneAxis; float maxdistance=sqrt(1+oneAxis*oneAxis); float temp=horz*horz+vert*vert; return sqrt(temp)/maxdistance; }