Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Lab4 4180final_receiver 4180final_sender DuelingTanks ... more
Fork of SparkfunAnalogJoystick by
SparkfunAnalogJoystick.cpp
- Committer:
- ryanzhang1994
- Date:
- 2015-03-08
- Revision:
- 1:ed0057aa2e31
- Parent:
- 0:ed9ee35481a9
- Child:
- 2:4761030c1a7d
File content as of revision 1:ed0057aa2e31:
#include "SparkfunAnalogJoystick.h"
#include "math.h"
#define M_PI 3.14159265358979323846
// Constructor
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;
}
