Capstone project files

Dependencies:   mbed-dsp mbed capstone_display_2

Revision:
8:dcc69fc6d88b
Parent:
7:fc55813f823e
Child:
9:4aa641641420
--- a/main.cpp	Thu Apr 24 21:35:49 2014 +0000
+++ b/main.cpp	Thu Apr 24 22:59:51 2014 +0000
@@ -37,7 +37,9 @@
 //-------------------for distance calculation and calibration
 bool adjusting = true; //whether the user is still adjusting the beacon's distance
 float minThreshold;
-float maxThreshold;
+float maxThresholds[numGainStages];
+float average = 0;
+float pastAverage = 0;
 int callibrationStep;
 int state;
 int gainStage;
@@ -285,7 +287,7 @@
 {
     //if outside range, then alert to try to adjust the gain settings
     if (value < minThreshold*1.10) return 999;
-    if (value > maxThreshold*.97) return -1;
+    if (value > maxThresholds[gainStage]*.97) return -1;
     
     switch (gainStage)
     {
@@ -334,7 +336,7 @@
 
 void enforceGainStage()
 {
-    setGain( gainCutoffs[gainStage] * gainMultiplier);
+    setGain( gainCutoffs[gainStage] );
 }
 
 /**
@@ -342,24 +344,65 @@
 */
 void callibratePoint(float value)
 {
-    if (adjusting)
+    if (callibrationStep%3 == 1) //this looks for the gain stage thresholds
     {
-        gainStage = (callibrationStep) / 3;
-        snprintf(outputString, 32, "%i in.", callibrationPoints[ callibrationStep-1 ]); 
-        lcd.calibrationdist(outputString);
-        waitForButton();
-        adjusting = false;
-        state = 2;
+       if (adjusting)
+        {
+            //outputString = "Turn off the beacon.  Press the button when done.";
+            gainStage = callibrationStep/3;
+            snprintf(outputString, 32, "%i in.", callibrationPoints[ callibrationStep-1 ]); 
+            lcd.calibrationdist(outputString);
+            waitForButton();
+            adjusting = false;
+            state = 2;
+            gainMultiplier = .2;
+            gainCutoffs[ gainStage ] *= .2;
+            enforceGainStage();
+        }
+        else
+        {
+            pc.printf("Av=%f gainStage=%d\n\r", gainMultiplier, gainStage);
+            if (pastAverage*1.15 < average || pastAverage < minThreshold*3) //not yet maxed, so bump up gainMultiplier
+            {
+                gainMultiplier *= 1.2;
+                gainCutoffs[ gainStage ] *= 1.2;
+                enforceGainStage();
+                pastAverage = average;
+            }
+            else //move onto next callibration step
+            {
+                adjusting = true;
+                linearSamples[ callibrationStep-1 ] = pastAverage; //record the intensity
+                maxThresholds[ gainStage ] = average;
+                gainCutoffs[ gainStage ] /= 1.2;
+                enforceGainStage();
+                pastAverage = minThreshold;
+                callibrationStep++;
+            }
+            state = 1;
+        }        
+    }    
+    else //----------regular point-------------------------------
+    {
+        if (adjusting)
+        {
+            gainStage = (callibrationStep) / 3;
+            snprintf(outputString, 32, "%i", callibrationPoints[ callibrationStep-1 ]); 
+            lcd.calibrationdist(outputString);
+            waitForButton();
+            adjusting = false;
+            state = 2;
+        }
+        else
+        {
+            enforceGainStage();
+            linearSamples[ callibrationStep - 1] = value;
+            callibrationStep++; //move to next callibration step
+            //get ready for next callibration step
+            adjusting = true;
+            state = 1;
+        }   
     }
-    else
-    {
-        enforceGainStage();
-        linearSamples[ callibrationStep - 1] = value;
-        callibrationStep++; //move to next callibration step
-        //get ready for next callibration step
-        adjusting = true;
-        state = 1;
-    }    
 }
 
 int main() {
@@ -375,7 +418,6 @@
     //char* outputString = newString(30); //string to be printed to the LCD display (or other output)
     //char* strength = newString(32);
     //char* dist = newString(32);
-    float average = 0;
     float32_t estimate = 0;
     float RMS = 0;
     int index_h = 0;
@@ -417,24 +459,13 @@
                 {
 
                     minThreshold = average; //the average RMS of background noise
-                    maxThreshold = .400;
+                    //maxThreshold = .400;
                     callibrationStep = 1; //move to next callibration step
                     //get ready for next callibration step
                     adjusting = true;
                     state = 1;
                 }
-            }
-            else if (callibrationStep == 1) //at 6in, adjust gain scaling and take one datapoint
-            {       
-                /*
-                gain1 = 20.0;
-                gain0 = 1.0;
-                setPot(1, gain1);
-                setPot(0, gain0);
-                */
-                setGain( 20 );
-                callibratePoint(average);
-            }
+            }            
             else if (callibrationStep <= numCallibrationSteps)
             {
                 callibratePoint(average);
@@ -449,7 +480,7 @@
                     mUpper[i] = (callibrationPoints[i*3+2] - callibrationPoints[i*3+1]) / (linearSamples[i*3+2] - linearSamples[i*3+1]) ;
                     bLower[i] = callibrationPoints[i*3+0] - mLower[i]*linearSamples[i*3+0];
                     bUpper[i] = callibrationPoints[i*3+1] - mUpper[i]*linearSamples[i*3+1];
-                    //pc.printf("mL=%f mU=%f bL=%f, bU=%f, mid=%f\n\r", mLower[i], mUpper[i], bLower[i], bUpper[i], mid[i]);
+                    pc.printf("mL=%f mU=%f bL=%f, bU=%f, mid=%f, cutoff=%f\n\r", mLower[i], mUpper[i], bLower[i], bUpper[i], mid[i], gainCutoffs[i]);
                 }                
                 callibrationStep = -1;
                 state = 2;
@@ -457,7 +488,7 @@
                 
                 for (int i = 0; i < numCallibrationSteps; i++)
                 {
-                    //pc.printf("linear(x)=%f callibration(y)=%d \n\r", linearSamples[i], callibrationPoints[i]);
+                    pc.printf("linear(x)=%f callibration(y)=%d \n\r", linearSamples[i], callibrationPoints[i]);
                 }
                 //pc.printf("End of callibration.\n\r");
             }
@@ -655,63 +686,5 @@
 
 
 
-void callibratePoint(float value)
-{
-    if (callibrationStep%3 == 1) //this looks for the gain stage thresholds
-    {
-       if (adjusting)
-        {
-            //outputString = "Turn off the beacon.  Press the button when done.";
-            snprintf(outputString, 32, "%i in.", callibrationPoints[ callibrationStep-1 ]); 
-            lcd.calibrationdist(outputString);
-            waitForButton();
-            adjusting = false;
-            state = 2;
-            gainMultiplier = .5;
-            enforceGainStage();
-        }
-        else
-        {
-            //pc.printf("Av=%f\n\r", gainMultiplier);
-            if (pastAverage*1.1 < average || pastAverage < minThreshold*3) //not yet maxed, so bump up gainMultiplier
-            {
-                gainMultiplier *= 1.3;
-                enforceGainStage();
-                pastAverage = average;
-                callibrationStep = 1; //stay here until fining gainMultiplier
-            }
-            else //move onto next callibration step
-            {
-                callibrationStep++;
-                adjusting = true;
-                linearSamples[ gainStage ] = average; //record the intensity
-                maxThresholds[ gainStage ] = average;
-                gainCutoffs[ gainStage ] *=  gainMultiplier;
-                pastAverage = minThreshold;
-            }
-            state = 1;
-        }        
-    }    
-    else //
-    {
-        if (adjusting)
-        {
-            gainStage = (callibrationStep) / 3;
-            snprintf(outputString, 32, "%i", callibrationPoints[ callibrationStep-1 ]); 
-            lcd.calibrationdist(outputString);
-            waitForButton();
-            adjusting = false;
-            state = 2;
-        }
-        else
-        {
-            enforceGainStage();
-            linearSamples[ callibrationStep - 1] = value;
-            callibrationStep++; //move to next callibration step
-            //get ready for next callibration step
-            adjusting = true;
-            state = 1;
-        }   
-    }
-}
+
 */