有关频谱灯的实现
请问有没有频谱灯的案例?或者用天问实现的方案和思路,谢谢。可以用ASRPRO芯片的一路AD接脚输入信号,使用多线程编程,语音开启后从不关闭,使用WS2812串行做为频谱显示, 用多路IO口每一路连接你想要的频谱灯的个数,然后分时对各路WS2812送AD采集的数据高度。 lijunren 发表于 2022-8-18 19:57
可以用ASRPRO芯片的一路AD接脚输入信号,使用多线程编程,语音开启后从不关闭,使用WS2812串行做为频谱显示 ...
请教AD怎么分频呢? 同问,大神出个天问频谱例程 我也卡在AD分频。 #include <Arduino.h>
#include <ArduinoFFT.h> // 引入FFT库
const int micPin = A0; // 设置麦克风连接引脚
const int ledCount = 60; // 设置LED灯带数量
const int ledPin = 6; // 设置LED灯带连接引脚
int audioSample; // 定义音频采样数组
byte ledBrightness; // 定义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 = 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 = map(audioSample, 0, 1023, 0, 255); // 将幅度谱值映射为LED亮度值(0-255)
}
// 控制LED灯带显示频谱信息
for (int i = 0; i < ledCount; i++) {
analogWrite(ledPin, ledBrightness); // 控制LED亮度
delayMicroseconds(1000 / ledCount); // 控制LED更新速率
}
}
页:
[1]