|
发表于 2023-12-4 22:15:38
|
显示全部楼层
#include <Arduino.h>
#include <ArduinoFFT.h> // 引入FFT库
const int micPin = A0; // 设置麦克风连接引脚
const int ledCount = 60; // 设置LED灯带数量
const int ledPin = 6; // 设置LED灯带连接引脚
int audioSample[ledCount]; // 定义音频采样数组
byte ledBrightness[ledCount]; // 定义LED亮度数组
void setup() {
Serial.begin(9600); // 初始化串口通信
pinMode(micPin, INPUT); // 设置麦克风引脚模式
pinMode(ledPin, OUTPUT); // 设置LED引脚模式
digitalWrite(ledPin, LOW); // 关闭LED灯带
}
void loop() {
// 采集音频数据并进行FFT变换
for (int i = 0; i < ledCount; i++) {
audioSample[i] = analogRead(micPin); // 读取麦克风模拟值
delayMicroseconds(100); // 延时以减少采样率
}
ArduinoFFT fft;
fft.Windowing(audioSample, ledCount, ARDUINO_FFT_HAMMING); // 加窗处理
fft.Compute(audioSample, ledCount, true); // 进行FFT变换并计算幅度谱
fft.Magnitude(audioSample, ledCount); // 提取幅度谱信息
// 将幅度谱信息映射为LED亮度值
for (int i = 0; i < ledCount; i++) {
ledBrightness[i] = map(audioSample[i], 0, 1023, 0, 255); // 将幅度谱值映射为LED亮度值(0-255)
}
// 控制LED灯带显示频谱信息
for (int i = 0; i < ledCount; i++) {
analogWrite(ledPin, ledBrightness[i]); // 控制LED亮度
delayMicroseconds(1000 / ledCount); // 控制LED更新速率
}
} |
|