Sparkfun Analog Joystick

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

Fork of SparkfunAnalogJoystick by ECE4180

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