sharon look here

Committer:
guoxsharon
Date:
Sun Nov 24 22:00:07 2019 +0000
Revision:
4:b9b10594a4bb
Parent:
3:0b8abee5b733
latest 1:59

Who changed what in which revision?

UserRevisionLine numberNew contents of line
guoxsharon 0:973a5bbb2a17 1
guoxsharon 0:973a5bbb2a17 2 #include "mbed.h"
guoxsharon 0:973a5bbb2a17 3 #define u16_max 65526
guoxsharon 0:973a5bbb2a17 4 AnalogIn mic(PB_0);
guoxsharon 0:973a5bbb2a17 5 DigitalOut vcc(GPIO0);
guoxsharon 0:973a5bbb2a17 6 Serial pc(UART_TX, UART_RX, 115200);
guoxsharon 0:973a5bbb2a17 7 const int sampleTime = 50;
guoxsharon 0:973a5bbb2a17 8 int micOut;
guoxsharon 0:973a5bbb2a17 9 // Find the Peak-to-Peak Amplitude Function
guoxsharon 0:973a5bbb2a17 10 int findPTPAmp(float* sampleArr){
guoxsharon 0:973a5bbb2a17 11 // Time variables to find the peak-to-peak amplitude
guoxsharon 0:973a5bbb2a17 12
guoxsharon 0:973a5bbb2a17 13 unsigned int PTPAmp = 0;
guoxsharon 0:973a5bbb2a17 14
guoxsharon 0:973a5bbb2a17 15 // Signal variables to find the peak-to-peak amplitude
guoxsharon 0:973a5bbb2a17 16 unsigned int maxAmp = 0;
guoxsharon 0:973a5bbb2a17 17 unsigned int minAmp = 1023;
guoxsharon 0:973a5bbb2a17 18
guoxsharon 0:973a5bbb2a17 19 // Find the max and min of the mic output within the 50 ms timeframe
guoxsharon 0:973a5bbb2a17 20 for(int i=0; i<8000; i++)
guoxsharon 0:973a5bbb2a17 21 {
guoxsharon 0:973a5bbb2a17 22 if( sampleArr[i] < 1023) //prevent erroneous readings
guoxsharon 0:973a5bbb2a17 23 {
guoxsharon 0:973a5bbb2a17 24 if (sampleArr[i] > maxAmp)
guoxsharon 0:973a5bbb2a17 25 {
guoxsharon 0:973a5bbb2a17 26 maxAmp = sampleArr[i]; //save only the max reading
guoxsharon 0:973a5bbb2a17 27 }
guoxsharon 0:973a5bbb2a17 28 else if (sampleArr[i] < minAmp)
guoxsharon 0:973a5bbb2a17 29 {
guoxsharon 0:973a5bbb2a17 30 minAmp = sampleArr[i]; //save only the min reading
guoxsharon 0:973a5bbb2a17 31 }
guoxsharon 0:973a5bbb2a17 32 }
guoxsharon 0:973a5bbb2a17 33 }
guoxsharon 0:973a5bbb2a17 34
guoxsharon 0:973a5bbb2a17 35 PTPAmp = maxAmp - minAmp; // (max amp) - (min amp) = peak-to-peak amplitude
guoxsharon 0:973a5bbb2a17 36 double micOut_Volts = (PTPAmp * 3.3) / 1024; // Convert ADC into voltage
guoxsharon 0:973a5bbb2a17 37
guoxsharon 0:973a5bbb2a17 38 //Uncomment this line for help debugging (be sure to also comment out the VUMeter function)
guoxsharon 0:973a5bbb2a17 39 //Serial.println(PTPAmp);
guoxsharon 0:973a5bbb2a17 40
guoxsharon 0:973a5bbb2a17 41 //Return the PTP amplitude to use in the soundLevel function.
guoxsharon 0:973a5bbb2a17 42 // You can also return the micOut_Volts if you prefer to use the voltage level.
guoxsharon 0:973a5bbb2a17 43 return PTPAmp;
guoxsharon 0:973a5bbb2a17 44 }
guoxsharon 0:973a5bbb2a17 45
guoxsharon 0:973a5bbb2a17 46 void record(float* sampleArr) {
guoxsharon 4:b9b10594a4bb 47 float val;
guoxsharon 0:973a5bbb2a17 48 //record sound for 1 second
guoxsharon 2:a2aa551a2745 49 for(int i=0; i<800; i++) {
guoxsharon 2:a2aa551a2745 50 val = mic.read();
guoxsharon 2:a2aa551a2745 51 sampleArr[i] = val; //put samples in array
guoxsharon 3:0b8abee5b733 52 pc.printf("%f\n",val);
guoxsharon 0:973a5bbb2a17 53 wait(0.000125f); //sample rate of 8000 Hz
guoxsharon 0:973a5bbb2a17 54 }
guoxsharon 0:973a5bbb2a17 55 }
guoxsharon 0:973a5bbb2a17 56
guoxsharon 0:973a5bbb2a17 57 int main(){
guoxsharon 2:a2aa551a2745 58 //float sampleArr[800]; //used to store sound
guoxsharon 0:973a5bbb2a17 59 pc.printf("\r\n Sparkfun MEM Microphone Test\n");
guoxsharon 0:973a5bbb2a17 60 pc.printf("******************\n");
guoxsharon 0:973a5bbb2a17 61 vcc = 1;
guoxsharon 2:a2aa551a2745 62 int val;
guoxsharon 0:973a5bbb2a17 63 int ptpAmp;
guoxsharon 0:973a5bbb2a17 64 while(1){
guoxsharon 2:a2aa551a2745 65 //wait(0.2);
guoxsharon 2:a2aa551a2745 66 //record(sampleArr);
guoxsharon 4:b9b10594a4bb 67 val = (int)mic.read_u16();
guoxsharon 4:b9b10594a4bb 68 pc.printf("%d\n",val-32768);
guoxsharon 2:a2aa551a2745 69 //ptpAmp=findPTPAmp(sampleArr);
guoxsharon 0:973a5bbb2a17 70 }
guoxsharon 0:973a5bbb2a17 71 }
guoxsharon 0:973a5bbb2a17 72
guoxsharon 0:973a5bbb2a17 73
guoxsharon 0:973a5bbb2a17 74