// Подключение библиотек
#include <arduinoFFT.h>
#include <Adafruit_NeoPixel.h>
// Параметры светодиодной ленты
#define LED_PIN 6
#define LED_COUNT 20
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
// Параметры микрофона и аудиоанализа
#define MIC_PIN A0
#define SAMPLES 128
#define SAMPLING_FREQUENCY 10000
arduinoFFT FFT = arduinoFFT();
unsigned int sampling_period_us;
unsigned long microseconds;
double vReal[SAMPLES];
double vImag[SAMPLES];
void setup() {
// Инициализация светодиодной ленты
strip.begin();
strip.show();
// Настройка параметров аудиоанализа
sampling_period_us = round(1000000 * (1.0 / SAMPLING_FREQUENCY));
Serial.begin(9600);
}
void loop() {
// Считывание аудиосигнала с микрофона
for (int i = 0; i < SAMPLES; i++) {
microseconds = micros();
vReal[i] = analogRead(MIC_PIN);
vImag[i] = 0;
while (micros() < (microseconds + sampling_period_us)) {}
}
// Выполнение быстрого преобразования Фурье (FFT)
FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
// Управление светодиодной RGB лентой в зависимости от анализа звука
for (int i = 0; i < LED_COUNT; i++) {
int magnitude = vReal[i] / 10; // Масштабирование амплитуды для управления яркостью
strip.setPixelColor(i, magnitude, 0, 0); // Отображение амплитуды сигнала на красный цвет
}
strip.show();
}