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
Revision 0:d096ca2ffef0, committed 2014-11-02
- Comitter:
- andcor02
- Date:
- Sun Nov 02 17:00:16 2014 +0000
- Child:
- 1:380e6ab41172
- Commit message:
- Made into class system, not into seperate h or c though.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Hammer_MicrophoneSensor.c Sun Nov 02 17:00:16 2014 +0000
@@ -0,0 +1,103 @@
+//#include "mbed.h"
+//#include "Hammer_MicrophoneSensor.h"
+//
+//MAX9814::MAX9814(PinName pin): _pin(pin), _led1(LED1), _led2(LED2), _led3(LED3), _led4(LED4) {
+//}
+//
+//
+//void MAX9814::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 MAX9814::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 MAX9814::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 MAX9814::volume_indicator() {
+// led_array(_average);
+// sound_level();
+//}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Hammer_MicrophoneSensor.h Sun Nov 02 17:00:16 2014 +0000
@@ -0,0 +1,27 @@
+//#ifndef MBED_MIC_H
+//#define MBED_MIC_H
+//
+//#include "mbed.h"
+//
+//class MAX9814 {
+//
+//public:
+//
+// MAX9814(PinName pin);
+//
+// void led_array(float x);
+//
+// float calibration();
+//
+// float sound_level();
+//
+//protected:
+// AnalogIn _pin;
+// BusOut _led1, _led2, _led3, _led4;
+// float _value,_sum,_average;
+// int _count;
+// float _sample;
+// Timer _t,_t1;
+//};
+//
+//#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sun Nov 02 17:00:16 2014 +0000
@@ -0,0 +1,136 @@
+#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());
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Nov 02 17:00:16 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/031413cf7a89 \ No newline at end of file
Andrea Corrado
Electret Microphone Amplifier - MAX9814