Capstone project files
Dependencies: mbed-dsp mbed capstone_display_2
Diff: main.cpp
- 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; - } - } -} + */