adon001 发表于 2022-8-16 16:28:51

有关频谱灯的实现

请问有没有频谱灯的案例?或者用天问实现的方案和思路,谢谢。

lijunren 发表于 2022-8-18 19:57:45

可以用ASRPRO芯片的一路AD接脚输入信号,使用多线程编程,语音开启后从不关闭,使用WS2812串行做为频谱显示, 用多路IO口每一路连接你想要的频谱灯的个数,然后分时对各路WS2812送AD采集的数据高度。

枫之豪 发表于 2023-5-18 23:37:06

lijunren 发表于 2022-8-18 19:57
可以用ASRPRO芯片的一路AD接脚输入信号,使用多线程编程,语音开启后从不关闭,使用WS2812串行做为频谱显示 ...

请教AD怎么分频呢?

lhh942 发表于 2023-5-22 08:38:41

同问,大神出个天问频谱例程

曹柏青 发表于 2023-11-26 17:33:33

我也卡在AD分频。

13702752353 发表于 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; // 定义音频采样数组
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]
查看完整版本: 有关频谱灯的实现