Попытка работы с микрофоном

Dependencies:   mbed

Committer:
Sergeev
Date:
Sat Sep 27 15:17:51 2014 +0000
Revision:
0:5c44ff47ac5c
??????? ?????? ? ??????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergeev 0:5c44ff47ac5c 1 #include "mbed.h"
Sergeev 0:5c44ff47ac5c 2
Sergeev 0:5c44ff47ac5c 3 #define MAX_QUEUE 512 // Indexed from 0 to 511
Sergeev 0:5c44ff47ac5c 4
Sergeev 0:5c44ff47ac5c 5 AnalogOut speaker(PA_4); // DAC for the speaker/output
Sergeev 0:5c44ff47ac5c 6 AnalogIn mic(A2); // ADC for the microphone/input
Sergeev 0:5c44ff47ac5c 7 //AnalogIn pot(p20); // ADC for the pot
Sergeev 0:5c44ff47ac5c 8
Sergeev 0:5c44ff47ac5c 9 int main()
Sergeev 0:5c44ff47ac5c 10 {
Sergeev 0:5c44ff47ac5c 11 int queue[MAX_QUEUE]; // Will be a circular buffer
Sergeev 0:5c44ff47ac5c 12
Sergeev 0:5c44ff47ac5c 13 int ii = 0; // Queue write position
Sergeev 0:5c44ff47ac5c 14 int jj = 0; // Q read position
Sergeev 0:5c44ff47ac5c 15 int offset = 0; // Delay (number of samples)
Sergeev 0:5c44ff47ac5c 16 int oo; // The analogue data read or written
Sergeev 0:5c44ff47ac5c 17
Sergeev 0:5c44ff47ac5c 18 while(1) // For ever
Sergeev 0:5c44ff47ac5c 19 {
Sergeev 0:5c44ff47ac5c 20 oo = mic.read_u16() - 32767; // Read ADC and remove DC offset
Sergeev 0:5c44ff47ac5c 21
Sergeev 0:5c44ff47ac5c 22 queue[ii] = oo; // Add sample to queue
Sergeev 0:5c44ff47ac5c 23
Sergeev 0:5c44ff47ac5c 24 jj = ii - offset; // Calculate playback position
Sergeev 0:5c44ff47ac5c 25
Sergeev 0:5c44ff47ac5c 26 if (jj < 0) jj = jj + MAX_QUEUE;// If queue pointer is negative, wrap it around.
Sergeev 0:5c44ff47ac5c 27
Sergeev 0:5c44ff47ac5c 28 ii = (ii + 1) % MAX_QUEUE; // Next position in the circular queue
Sergeev 0:5c44ff47ac5c 29
Sergeev 0:5c44ff47ac5c 30 if (ii == 0) // Read the potentiometer
Sergeev 0:5c44ff47ac5c 31 {
Sergeev 0:5c44ff47ac5c 32 offset = MAX_QUEUE * 32767 / 65535; // Scale the reading to fit the queue
Sergeev 0:5c44ff47ac5c 33
Sergeev 0:5c44ff47ac5c 34 if (offset >= MAX_QUEUE) offset = MAX_QUEUE - 1; // Limit the upper value
Sergeev 0:5c44ff47ac5c 35 }
Sergeev 0:5c44ff47ac5c 36
Sergeev 0:5c44ff47ac5c 37 oo = oo + queue[jj]; // Add zero referenced signals: input + delayed_input
Sergeev 0:5c44ff47ac5c 38
Sergeev 0:5c44ff47ac5c 39 oo = oo + 32767; // Restore the DC Offset.
Sergeev 0:5c44ff47ac5c 40
Sergeev 0:5c44ff47ac5c 41 speaker.write_u16(oo); // DAC output
Sergeev 0:5c44ff47ac5c 42 //printf();
Sergeev 0:5c44ff47ac5c 43
Sergeev 0:5c44ff47ac5c 44 if (!(ii % 16)) printf("oo = %5d | ii = %5d | jj = %5d | offset = %5d \n\r", oo, ii, jj, offset);
Sergeev 0:5c44ff47ac5c 45 // FOR DEBUGGING if (!(ii % 16)) printf("oo = %5d | ii = %5d | jj = %5d | offset = %5d \n\r", oo, ii, jj, offset);
Sergeev 0:5c44ff47ac5c 46 }
Sergeev 0:5c44ff47ac5c 47 }