Sparkfun Analog Joystick

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

Fork of SparkfunAnalogJoystick by ECE4180

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?

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