Since our code is based on lab 6 code and we also used the joystick to test movement initially. So joystick still existed tough we haven't use that eventually

Fork of Joystick_skeleton by Carter Sharer

Revision:
0:46523bf02e61
Child:
1:c42a77267f7b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Joystick.cpp	Tue Oct 18 20:26:41 2016 +0000
@@ -0,0 +1,100 @@
+#include "Joystick.h"
+#include "mbed.h"
+
+//Member function definitions including constructor
+Joystick::Joystick(PinName pinA, PinName pinB) : horiz(pinA), vert(pinB) {
+    //Wait 1 second for voltage to settle
+    wait(1); 
+    
+    //Set Raw Center Values, this is where the joystick sits naturaly 
+    raw_hc = (horiz.read() + horiz.read() + horiz.read() + horiz.read() + horiz.read()) / 5.0;
+    raw_vc = (vert.read() + vert.read() + vert.read() + vert.read() + vert.read()) / 5.0;
+    
+    //Initalize the Rax Max to some value less then then real max value.  
+    //We dont know what the max value will be until we read it. 
+    //But we can assume it will be greater then 0.8 (center + 0.3)
+    //Now do the same for the the Raw Min
+    float delta = 0.3;
+    rawMinH = raw_hc - delta; rawMaxH = raw_hc + delta;
+    rawMinV = raw_hc - delta; rawMaxV = raw_hc + delta;
+}
+
+//Returns the scaled vertial value of joystick
+float Joystick::horizontal(void) {
+    //Get average val (5 samples)
+    float avg = (horiz.read() + horiz.read() + horiz.read() + horiz.read() + horiz.read()) / 5.0;
+    
+    //Watch for Max and Min Values if we see a new max/min update Raw Max/Min
+    if(avg > rawMaxH)
+        rawMaxH = avg;
+    if(avg < rawMinH)
+        rawMinH = avg;
+    
+    
+    //Here we will calculate the total range (Travel) of the joystick 
+    //using the rawMax/rawMin values we have seen thus far
+    //Calculate the range from [center, max] and [center, min]
+    float range_pos = rawMaxH - raw_hc;
+    float range_neg = raw_hc - rawMinH;
+    
+    //Here we will calculate how much our current reading is in one 
+    //of the ranges to get a percentage
+    //Then we can scale this by multiplying it by our scale (_max/_min)
+    float val;
+    if(avg >= raw_hc) 
+        val = ((avg - raw_hc) / range_pos) * _max; // percent to max * max
+    else 
+        val = ((raw_hc - avg) / range_neg) * _min; //percent to min * min
+         
+    
+    //Here we will apply a dead zone
+    if((val <= DEAD_ZONE/2) && (val >= -DEAD_ZONE/2)) {
+        return 0;
+    }
+    else if(val > DEAD_ZONE/2) {//posotive vals
+        return val - DEAD_ZONE/2;
+    }
+    else { //negative vals
+        return val + DEAD_ZONE/2; 
+    }
+}
+
+//Returns the scaled horizontal value of joystick
+float Joystick::vertical(void) {
+    //Get average value
+    float avg = (vert.read() + vert.read() + vert.read() + vert.read() + vert.read()) / 5.0;
+    
+    //Watch for Max and Min Values
+    if(avg > rawMaxV)
+        rawMaxV = avg;
+    if(avg < rawMinV)
+        rawMinV = avg;
+    
+    //Calculate Range (Total Travel of joystick)
+    float range_pos = rawMaxV - raw_vc;
+    float range_neg = raw_vc - rawMinV;
+    
+    float val;
+    if(avg >= raw_vc) //find scaled pot value
+        val = (((avg - raw_vc) / range_pos) * _max); 
+    else 
+        val = (((raw_vc - avg) / range_neg) * _min);
+    
+    //If val is in dead zone range return 0
+    if((val <= DEAD_ZONE/2) && (val >= -DEAD_ZONE/2)) {
+        return 0;
+    }
+    //Else return val minus dead zone / 2 
+    else if(val > DEAD_ZONE/2) {//posotive vals
+        return val - DEAD_ZONE/2;
+    }
+    else { //negative vals
+        return val + DEAD_ZONE/2; 
+    }
+}
+
+//Set the Min and Max Values of joystick ex: -100, +100
+void Joystick::setScale(float min, float max) {
+       _min = min; 
+       _max = max;
+}
\ No newline at end of file