Program to control Electret Microphone Amplifier - MAX9814 from adafruit. Allows: To sample analogue voltage to transform into rough sound level. Transfer sound level to visual indicator, volume bar such as 4 LEDs on LPC11U24.

Dependencies:   MAX9814_Electret_Microphone_LED_Volume_Indicator mbed

main.cpp

Committer:
andcor02
Date:
2014-11-02
Revision:
0:d096ca2ffef0
Child:
1:380e6ab41172

File content as of revision 0:d096ca2ffef0:

#include "mbed.h"
//#include "Hammer_MicrophoneSensor.h"
Serial pc (USBTX, USBRX);




class MAX9814 {
    
public:

    MAX9814(PinName pin): _pin(pin), _led1(LED1), _led2(LED2), _led3(LED3), _led4(LED4) {
    }


void led_array(float x ) {

    if (_value<x+0.05) {
            _led1=0;
            _led2=0;
            _led3=0;
            _led4=0;
    }
    if (_value>x+0.05&&_value<0.5+x) {
            _led1=1;
            _led2=0;
            _led3=0;
            _led4=0;
    }
    if (_value>0.5+x&&_value<1+x) {
            _led1=1;
            _led2=1;
            _led3=0;
            _led4=0;
    }
    if (_value>1+x&&_value<1.2+x) {
            _led1=1;
            _led2=1;
            _led3=1;
            _led4=0;
    }
    if (_value>1.2+x&&_value<2.8+x) {
            _led1=1;
            _led2=1;
            _led3=1;
            _led4=1;
    }
}

float calibration() {
    
    _t.start();
    _t1.start();
    float peakToPeak=0, signalMax=0, signalMin=1024;

    while (_t1.read()<1) {
        while (_t.read_ms()<50) {
            _sample=_pin.read();

            if (_sample<1024) {
                if (_sample>signalMax)
                    signalMax=_sample;

                else if (_sample<signalMin)
                    signalMin=_sample;
            }
        }
     _t.reset();
     peakToPeak=signalMax-signalMin;
     _value= (peakToPeak*3.3);
     _value = floor(_value * 100) / 100;
     _sum+=_value;
     _count++;
    }
    _average=_sum/_count;
    _t1.reset();

    return _average;
}

float sound_level() {

    _t.start();
    float peakToPeak=0, signalMax=0, signalMin=1024;

    while (_t.read_ms()<50) {
        _sample=_pin.read();

        if (_sample<1024) {
            if (_sample>signalMax)
                signalMax=_sample;

            else if (_sample<signalMin)
                signalMin=_sample;
        }
    }
    _t.reset();
    peakToPeak=signalMax-signalMin;
    _value= (peakToPeak*3.3);
    _value = floor(_value * 100) / 100;
    _sum+=_value;
    _count++;

    return _value;
}


void volume_indicator() {
        led_array(_average);
        sound_level();
}

protected:
    AnalogIn _pin;
    BusOut _led1, _led2, _led3, _led4;
    float _value,_sum,_average;
    int _count;
    float _sample;
    Timer _t,_t1;

};




MAX9814 mic(p20);

int main()
{
    mic.calibration();
    while (1) {
        mic.volume_indicator();
        mic.sound_level();
        pc.printf("\n\r Level is %f", mic.sound_level());
    }
}