This library sets up and LED volume indication function and reading values from the Electret Microphone - MAX4466 Amplifier

Dependents:   MAX4466_Hello_World

Committer:
mgolino
Date:
Fri Oct 23 19:37:07 2015 +0000
Revision:
1:76c72cf9ae2b
Parent:
0:712373b300a2
Added more comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mgolino 0:712373b300a2 1 #include "mbed.h"
mgolino 0:712373b300a2 2 #include "MAX4466.h"
mgolino 0:712373b300a2 3
mgolino 0:712373b300a2 4 MAX4466::MAX4466(PinName pin): _pin(pin), _led1(LED1), _led2(LED2), _led3(LED3), _led4(LED4) {
mgolino 0:712373b300a2 5 calibration();
mgolino 0:712373b300a2 6 }
mgolino 0:712373b300a2 7
mgolino 0:712373b300a2 8 //CALIBRATION FUNCTION:
mgolino 0:712373b300a2 9 //Find average sound level at the intialization of the microphone
mgolino 0:712373b300a2 10 //Use this in the calculation of the LED indication array values
mgolino 0:712373b300a2 11 float MAX4466::calibration() {
mgolino 0:712373b300a2 12
mgolino 0:712373b300a2 13 _t.start();
mgolino 0:712373b300a2 14 _t1.start();
mgolino 0:712373b300a2 15 float peakToPeak=0, signalMax=0, signalMin=1024;
mgolino 0:712373b300a2 16
mgolino 0:712373b300a2 17 while (_t1.read()<1) {
mgolino 0:712373b300a2 18 while (_t.read_ms()<50) {
mgolino 0:712373b300a2 19 _sample=_pin.read();
mgolino 0:712373b300a2 20
mgolino 0:712373b300a2 21 if (_sample<1024) {
mgolino 0:712373b300a2 22 if (_sample>signalMax)
mgolino 0:712373b300a2 23 signalMax=_sample;
mgolino 0:712373b300a2 24
mgolino 0:712373b300a2 25 else if (_sample<signalMin)
mgolino 0:712373b300a2 26 signalMin=_sample;
mgolino 0:712373b300a2 27 }
mgolino 0:712373b300a2 28 }
mgolino 0:712373b300a2 29 _t.reset();
mgolino 0:712373b300a2 30 peakToPeak=signalMax-signalMin;
mgolino 0:712373b300a2 31 _value= (peakToPeak*3.3);
mgolino 0:712373b300a2 32 _value = floor(_value * 100) / 100;
mgolino 0:712373b300a2 33 _sum+=_value;
mgolino 0:712373b300a2 34 _count++;
mgolino 0:712373b300a2 35 }
mgolino 0:712373b300a2 36 _average=_sum/_count;
mgolino 0:712373b300a2 37 _t1.reset();
mgolino 0:712373b300a2 38
mgolino 0:712373b300a2 39 return _average;
mgolino 0:712373b300a2 40 }
mgolino 0:712373b300a2 41
mgolino 0:712373b300a2 42 //LED ARRAY FUNCTION:
mgolino 1:76c72cf9ae2b 43 //Setup array of 4 LEDs
mgolino 1:76c72cf9ae2b 44 //The input to this function is the average from the calibration function
mgolino 1:76c72cf9ae2b 45 //The variable _value which indicates the current value from the microphone is a global variable updated in the sound_level function
mgolino 1:76c72cf9ae2b 46 //As different threshholds of volume are met more LEDs will light up
mgolino 0:712373b300a2 47 void MAX4466::led_array(float x ) {
mgolino 0:712373b300a2 48
mgolino 0:712373b300a2 49 if (_value<x+0.05) {
mgolino 0:712373b300a2 50 _led1=0;
mgolino 0:712373b300a2 51 _led2=0;
mgolino 0:712373b300a2 52 _led3=0;
mgolino 0:712373b300a2 53 _led4=0;
mgolino 0:712373b300a2 54 }
mgolino 0:712373b300a2 55 if (_value>x+0.05&&_value<0.5+x) {
mgolino 0:712373b300a2 56 _led1=1;
mgolino 0:712373b300a2 57 _led2=0;
mgolino 0:712373b300a2 58 _led3=0;
mgolino 0:712373b300a2 59 _led4=0;
mgolino 0:712373b300a2 60 }
mgolino 0:712373b300a2 61 if (_value>0.5+x&&_value<1+x) {
mgolino 0:712373b300a2 62 _led1=1;
mgolino 0:712373b300a2 63 _led2=1;
mgolino 0:712373b300a2 64 _led3=0;
mgolino 0:712373b300a2 65 _led4=0;
mgolino 0:712373b300a2 66 }
mgolino 0:712373b300a2 67 if (_value>1+x&&_value<1.2+x) {
mgolino 0:712373b300a2 68 _led1=1;
mgolino 0:712373b300a2 69 _led2=1;
mgolino 0:712373b300a2 70 _led3=1;
mgolino 0:712373b300a2 71 _led4=0;
mgolino 0:712373b300a2 72 }
mgolino 0:712373b300a2 73 if (_value>1.2+x&&_value<2.8+x) {
mgolino 0:712373b300a2 74 _led1=1;
mgolino 0:712373b300a2 75 _led2=1;
mgolino 0:712373b300a2 76 _led3=1;
mgolino 0:712373b300a2 77 _led4=1;
mgolino 0:712373b300a2 78 }
mgolino 0:712373b300a2 79 }
mgolino 0:712373b300a2 80
mgolino 0:712373b300a2 81 //SOUND LEVEL FUNCTIOM:
mgolino 1:76c72cf9ae2b 82 //Read in current sound level from the microphone
mgolino 1:76c72cf9ae2b 83 //Update the global variable _value which will in turn be read by the LED array function
mgolino 0:712373b300a2 84 float MAX4466::sound_level() {
mgolino 0:712373b300a2 85
mgolino 0:712373b300a2 86 _t.start();
mgolino 0:712373b300a2 87 float peakToPeak=0, signalMax=0, signalMin=1024;
mgolino 0:712373b300a2 88
mgolino 0:712373b300a2 89 while (_t.read_ms()<50) {
mgolino 0:712373b300a2 90 _sample=_pin.read();
mgolino 0:712373b300a2 91
mgolino 0:712373b300a2 92 if (_sample<1024) {
mgolino 0:712373b300a2 93 if (_sample>signalMax)
mgolino 0:712373b300a2 94 signalMax=_sample;
mgolino 0:712373b300a2 95
mgolino 0:712373b300a2 96 else if (_sample<signalMin)
mgolino 0:712373b300a2 97 signalMin=_sample;
mgolino 0:712373b300a2 98 }
mgolino 0:712373b300a2 99 }
mgolino 0:712373b300a2 100 _t.reset();
mgolino 0:712373b300a2 101 peakToPeak=signalMax-signalMin;
mgolino 0:712373b300a2 102 _value= (peakToPeak*3.3);
mgolino 0:712373b300a2 103 _value = floor(_value * 100) / 100;
mgolino 0:712373b300a2 104 _sum+=_value;
mgolino 0:712373b300a2 105 _count++;
mgolino 0:712373b300a2 106
mgolino 0:712373b300a2 107 return _value;
mgolino 0:712373b300a2 108 }
mgolino 0:712373b300a2 109
mgolino 0:712373b300a2 110 //VOLUME INDICATOR FUNCTION:
mgolino 0:712373b300a2 111 //To be called in main function
mgolino 1:76c72cf9ae2b 112 //Updates the led array
mgolino 1:76c72cf9ae2b 113 //outputs current numerical value
mgolino 0:712373b300a2 114 void MAX4466::volume_indicator() {
mgolino 0:712373b300a2 115 led_array(_average);
mgolino 0:712373b300a2 116 sound_level();
mgolino 0:712373b300a2 117 }