
sharon look here
src/main.cpp@4:b9b10594a4bb, 2019-11-24 (annotated)
- 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?
User | Revision | Line number | New 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 |