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

Files at this revision

API Documentation at this revision

Comitter:
britneyd
Date:
Wed Apr 26 21:00:09 2017 +0000
Parent:
4:aaca0f94b646
Commit message:
Controller code;

Changed in this revision

Joystick.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Joystick.cpp	Tue Oct 25 15:09:06 2016 +0000
+++ b/Joystick.cpp	Wed Apr 26 21:00:09 2017 +0000
@@ -13,8 +13,8 @@
     //(1)Set Raw Center Values, this is where the joystick sits naturaly 
     //set raw horizontal center to current value (average with 5 readings)
     //set raw vertial center to current value (average with 5 readings) 
-    raw_hc = 0;
-    raw_vc = 0; 
+    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; 
     
     //(2)Initalize the Rax Max to some value less then the real max value.  
     //We dont know what the max value will be until we read it, thats ok. 
@@ -22,76 +22,105 @@
     //set it to that for now.  We will update this later if we see a larger value
     //Now do the same for the the Raw Min
     float delta = 0.3;
-    rawMinH = 0;
-    rawMaxH = 0;
-    rawMinV = 0;
-    rawMaxV = 0;
+    rawMinH = raw_hc - delta;
+    rawMaxH = raw_hc + delta;
+    rawMinV = raw_vc - delta;
+    rawMaxV = raw_vc + delta;
 }
 
 //Returns the scaled vertial value of joystick
 float Joystick::horizontal(void) {
     //(3)Get average val (5 samples)
-    float avg = horiz.read();
+    float avg = (horiz.read() + horiz.read() + horiz.read() + horiz.read() + horiz.read()) / 5.0 ;
     
     //(4)Watch for Max and Min Values, if we see a new max/min update Raw Max/Min
-    rawMaxH = avg;    
-    rawMinH = avg;
+    if (avg > rawMaxH) {
+        rawMaxH = avg;
+        }    
+    if (avg < rawMinH) {
+        rawMinH = avg;
+        }
     
     //(5)Here we will calculate the total range (Travel) of the joystick 
     //using the rawMax/rawMin values we have seen thus far
     //Since the joystick is not symetrical we have to calculate two ranges
     //Calculate the range from [center, max] and [center, min]
-    float range_pos = 0;
-    float range_neg = 0;
+    float range_pos = rawMaxH - raw_hc;
+    float range_neg = raw_hc - rawMinH;
     
     //(6)Here we will calculate how much our current reading is in one 
     //of the ranges, this will give us a percentage of our _max value we 
     //set in setScale. Then we can apply the scale by multiplying it by our 
     //scale (_max/_min). 
     float val;
-    if(avg >= raw_hc) //Positive Range
-        val = 0; 
-    else  //Negative Range
-        val = 0; 
+    if(avg >= raw_hc) { //Positive Range
+        val = ((avg - raw_hc) / range_pos) * _max;
+        } 
+    else{  //Negative Range
+        val = (raw_hc - avg) / range_neg * _min;
+        } 
          
     //(7)Here we will apply a dead zone.  If the |value| is <= our deadzone then 
     //set it to 0.  Otherwise we need to shift the value closer to 0 by dead zone
-    
+    if (abs(val) <= DEAD_ZONE) {
+        val = 0;
+        }
+    else if (val > DEAD_ZONE) {
+        val -= DEAD_ZONE;
+        }
+    else if (val < -DEAD_ZONE) {
+        val += DEAD_ZONE;
+        }
     
-    return horiz.read();
+    return val;
 }
 
 //(8) Impliment vertial the same as you did for horizontal
 //Returns the scaled horizontal value of joystick
 float Joystick::vertical(void) {
     //Get average value (5 samples)
-    float avg = vert.read();
+    float avg = (vert.read() + vert.read() + vert.read() + vert.read() + vert.read()) / 5.0;
     
     //(4)Watch for Max and Min Values, if we see a new max/min update Raw Max/Min
-    rawMaxV = avg;
-    rawMinV = avg;
+    if (avg > rawMaxV) {
+        rawMaxV = avg;
+        }    
+    if (avg < rawMinV) {
+        rawMinV = avg;
+        }
     
     //(5)Here we will calculate the total range (Travel) of the joystick 
     //using the rawMax/rawMin values we have seen thus far
     //Since the joystick is not symetrical we have to calculate two ranges
     //Calculate the range from [center, max] and [center, min]
-    float range_pos = 0;
-    float range_neg = 0;
+    float range_pos = rawMaxV - raw_vc;
+    float range_neg = raw_vc - rawMinV;
     
     //(6)Here we will calculate how much our current reading is in one 
     //of the ranges, this will give us a percentage of our _max value we 
     //set in setScale. Then we can apply the scale by multiplying it by our 
     //scale (_max/_min).
     float val;
-    if(avg >= raw_vc) //find scaled pot value
-        val = 0;
-    else 
-        val = 0;
+    if(avg >= raw_vc) { //Positive Range
+        val = ((avg - raw_vc) / range_pos) * _max;
+        } 
+    else{  //Negative Range
+        val = (raw_vc - avg) / range_neg * _min;
+        } 
     
     //(7)Here we will apply a dead zone.  If the |value| is <= our deadzone then 
     //set it to 0.  Otherwise we need to shift the value closer to 0 by dead zone    
-    
-    return vert.read();
+    if (abs(val) <= DEAD_ZONE) {
+        val = 0;
+        }
+    else if (val > DEAD_ZONE) {
+        val -= DEAD_ZONE;
+        }
+    else if (val < -DEAD_ZONE) {
+        val += DEAD_ZONE;
+        }
+        
+    return val;
 }
 
 //Set the Min and Max Values of joystick ex: -100, +100