// Библиотека для работы с микрофоном #include // Количество аудио каналов constexpr uint8_t channels = 1; // Частота дискретизации constexpr uint32_t frequency = 16000; // Буфер для хранения семплов short sampleBuffer[512]; // Счётчик пришедших семплов volatile int samplesRead; // Границы верхнего и нижнего диапазона выводимого семпла // Для наглядной визуализации звуковой волны в Serial Plotter constexpr int32_t sampleLimitUpper = 3000; constexpr int32_t sampleLimitLower = -3000; void setup() { // Открываем Serial-порт Serial.begin(115200); while (!Serial); // Выполняем конфигурацию PDM.onReceive(onPDMdata); // Устанавливаем усиление сигнала PDM.setGain(1); // Инициализируем PDM if (!PDM.begin(channels, frequency)) { Serial.println("Failed to start PDM!"); while (1); } } void loop() { // Ожидаем семплы для считывания if (samplesRead) { // Печатаем семплы в Serial-порт for (int i = 0; i < samplesRead; i++) { Serial.print(sampleLimitLower); Serial.print("\t"); Serial.print(sampleBuffer[i]); Serial.print("\t"); Serial.println(sampleLimitUpper); } // сбрасываем счётчик семплов samplesRead = 0; } } // Функция для обработки данных с микрофона void onPDMdata() { // Запрашиваем количество пришедших байтов int bytesAvailable = PDM.available(); // Считываем данные в буфер PDM.read(sampleBuffer, bytesAvailable); // 16 бит, 2 байта на семпл samplesRead = bytesAvailable / 2; }