【花雕动手做】看见声音,基于Arduino系列音乐可视器(7)

2021-11-032.3万
精华项目
AI 快速预览详细 收起
本文介绍了基于Arduino的大方格频谱灯项目,通过FFT和FHT算法实现声音频谱的可视化。适合初学者,逐步积累有用的音乐频谱可视化资料。
偶然心血来潮,想要做一个声音可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累些有用的音乐频谱可视化的资料,也会争取成型一些实用好玩的音乐可视器项目。

【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯

【花雕动手做】看见声音,基于Arduino系列音乐可视器(7)图1


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(26)
驴友花雕
驴友花雕
作者
【花雕动手做】看见声音,基于Arduino系列音乐可视器(1)---LED节奏灯
https://mc.dfrobot.com.cn/thread-311167-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(2)---OLED频谱灯
https://mc.dfrobot.com.cn/thread-311174-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(3)---RGB律动灯
https://mc.dfrobot.com.cn/thread-311183-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(4)---WS2812条灯
https://mc.dfrobot.com.cn/thread-311190-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(5)---WS2812柱跳灯
https://mc.dfrobot.com.cn/thread-311192-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(6)---点阵频谱灯
https://mc.dfrobot.com.cn/thread-311201-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(7)---大方格频谱灯
https://mc.dfrobot.com.cn/thread-311364-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(8)---四位32段点阵屏
https://mc.dfrobot.com.cn/thread-311490-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(9)---X Music Spectrum
https://mc.dfrobot.com.cn/thread-311627-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(10)---WS2812硬板屏
https://mc.dfrobot.com.cn/thread-311641-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(11)---WS2812幻彩灯带
https://mc.dfrobot.com.cn/thread-313648-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(12)---米管快速节奏灯
https://mc.dfrobot.com.cn/thread-313708-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(13)---有机棒立柱灯
https://mc.dfrobot.com.cn/thread-313723-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(14)---水杯水瓶灯
https://mc.dfrobot.com.cn/thread-313803-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(15)--横排LED方管灯
https://mc.dfrobot.com.cn/thread-313811-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(16)--热干胶棒棒灯
https://mc.dfrobot.com.cn/thread-313844-1-1.html
【花雕动手做】有趣好玩音乐可视化系列(17)--光导纤维灯
https://mc.dfrobot.com.cn/thread-313867-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(18)--LED平面板灯
https://mc.dfrobot.com.cn/thread-313951-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(19)--通体光纤灯
https://mc.dfrobot.com.cn/thread-313962-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(20)--首饰盒镜子灯
https://mc.dfrobot.com.cn/thread-313969-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(21)--CD 光盘灯
https://mc.dfrobot.com.cn/thread-313984-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(22)--LED无限魔方
https://mc.dfrobot.com.cn/thread-313994-1-1.html
【花雕动手做】有趣好玩的音乐可视化(23)--3合1闪点光纤
https://mc.dfrobot.com.cn/thread-314168-1-1.html
【花雕动手做】有趣好玩的音乐可视化(24)--无限LED镜子灯
https://mc.dfrobot.com.cn/thread-314180-1-1.html
【花雕动手做】有趣好玩音乐可视化(25)--水龙卷旋涡灯
https://mc.dfrobot.com.cn/thread-314231-1-1.html
【花雕动手做】有趣好玩音乐可视化系列(26)--LED 超立方体
https://mc.dfrobot.com.cn/thread-314244-1-1.html
【花雕动手做】有趣好玩的音乐可视化(27)--磁搅LED水旋灯
https://mc.dfrobot.com.cn/thread-314273-1-1.html
驴友花雕
驴友花雕
作者
[backcolor=rgb(255, 255, 255)][font="] 实验场景动态图 [/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="]
[/font][/backcolor]

驴友花雕
驴友花雕
作者

【花雕动手做】有趣好玩的音乐可视化系列小项目
项目之四:FFT算法的双点阵屏的动态频谱仪
实验视频剪辑
https://v.youku.com/v_show/id_XNTgyMjEwNjcwMA==.html?spm=a2hcb.playlsit.page.1
[media=x,500,375]https://v.youku.com/v_show/id_XNTgyMjEwNjcwMA==.html?spm=a2hcb.playlsit.page.1[/media]
驴友花雕
驴友花雕
作者
实验场景动态图

驴友花雕
驴友花雕
作者
[align=left][font="] 【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯[/font][/align][align=left][font="] 项目之五:红白绿三色24段三级联频谱大方格灯(FFT算法)[/font][/align]
[align=left][font="] 实验视频剪辑[/font][/align]
[align=left][font="]https://v.youku.com/v_show/id_XNTgyMDAwMjE5Mg==.html?spm=a2hcb.playlsit.page.1[/font][/align]
[align=left][font="][media=x,500,375]https://v.youku.com/v_show/id_XNTgyMDAwMjE5Mg==.html?spm=a2hcb.playlsit.page.1[/media][/font][/align]
驴友花雕
驴友花雕
作者

【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
项目之五:红白绿三色24段三级联频谱大方格灯(FFT算法)
实验开源代码
[code]/*
【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
项目之五:红白绿三色24段三级联频谱大方格灯(FFT算法)
*/
#include
#include
#include
MD_MAX72XX disp = MD_MAX72XX(MD_MAX72XX::FC16_HW, 10, 3);
arduinoFFT FFT = arduinoFFT();
double realComponent[64];
double imagComponent[64];
int spectralHeight[] = {0b00000000, 0b10000000, 0b11000000,
0b11100000, 0b11110000, 0b11111000,
0b11111100, 0b11111110, 0b11111111
};
int index, c, value;
void setup()
{
disp.begin();
Serial.begin(9600);
}
void loop()
{
int sensitivity = map(analogRead(A0), 0, 1023, 50, 100);
Serial.println (analogRead(A0));
for (int i = 0; i < 64; i++)
{
realComponent[i] = analogRead(A0) / sensitivity;
imagComponent[i] = 0;
}
FFT.Windowing(realComponent, 64, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(realComponent, imagComponent, 64, FFT_FORWARD);
FFT.ComplexToMagnitude(realComponent, imagComponent, 64);
for (int i = 0; i < 32; i++)
{
realComponent[i] = constrain(realComponent[i], 0, 80);
realComponent[i] = map(realComponent[i], 0, 80, 0, 8);
index = realComponent[i];
value = spectralHeight[index];
c = 31 - i;
disp.setColumn(c, value);
}
}[/code]
驴友花雕
驴友花雕
作者
【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
项目之四:24段三级联FFT浮点多色频谱灯
实验视频剪辑
https://v.youku.com/v_show/id_XNTgxOTk4MjkzMg==.html?spm=a2hcb.playlsit.page.1
[media=x,500,375]https://v.youku.com/v_show/id_XNTgxOTk4MjkzMg==.html?spm=a2hcb.playlsit.page.1[/media]
驴友花雕
驴友花雕
作者
[backcolor=rgb(255, 255, 255)][font="]实验场景动态图[/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="]
[/font][/backcolor]

驴友花雕
驴友花雕
作者
实验开源代码
[code]/*
【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
项目之四:24段三级联FFT浮点多色频谱灯
*/
#include
#include
#include
#define SAMPLES 64
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 3
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
#define xres 24
#define yres 8
int MY_ARRAY[] = {0, 128, 192, 224, 240, 248, 252, 254, 255};
int MY_MODE_1[] = {0, 128, 192, 224, 240, 248, 252, 254, 255};
int MY_MODE_2[] = {0, 128, 64, 32, 16, 8, 4, 2, 1};
int MY_MODE_3[] = {0, 128, 192, 160, 144, 136, 132, 130, 129};
int MY_MODE_4[] = {0, 128, 192, 160, 208, 232, 244, 250, 253};
int MY_MODE_5[] = {0, 1, 3, 7, 15, 31, 63, 127, 255};
double vReal[SAMPLES];
double vImag[SAMPLES];
char data_avgs[xres];
int yvalue;
int displaycolumn , displayvalue;
int peaks[xres];
const int buttonPin = 2;
int state = HIGH;
int previousState = LOW;
int displaymode = 1;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
arduinoFFT FFT = arduinoFFT();
void setup() {
ADCSRA = 0b11100101;
ADMUX = 0b00000000;
pinMode(buttonPin, INPUT);
mx.begin();
delay(50);
}
void loop() {
// ++ Sampling
for (int i = 0; i < SAMPLES; i++)
{
while (!(ADCSRA & 0x10));
ADCSRA = 0b11110101 ;
int value = ADC - 512 ;
vReal[i] = value / 8;
vImag[i] = 0;
}
FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
int step = (SAMPLES / 2) / xres;
int c = 0;
for (int i = 0; i < (SAMPLES / 2); i += step)
{
data_avgs[c] = 0;
for (int k = 0 ; k < step ; k++) {
data_avgs[c] = data_avgs[c] + vReal[i + k];
}
data_avgs[c] = data_avgs[c] / step;
c++;
}
for (int i = 0; i < xres; i++)
{
data_avgs[i] = constrain(data_avgs[i], 0, 80);
data_avgs[i] = map(data_avgs[i], 0, 80, 0, yres);
yvalue = data_avgs[i];
peaks[i] = peaks[i] - 1;
if (yvalue > peaks[i])
peaks[i] = yvalue ;
yvalue = peaks[i];
displayvalue = MY_ARRAY[yvalue];
displaycolumn = 15 - i;
mx.setColumn(displaycolumn, displayvalue);
}
displayModeChange ();
}
void displayModeChange() {
int reading = digitalRead(buttonPin);
if (reading == HIGH && previousState == LOW && millis() - lastDebounceTime > debounceDelay)
{
switch (displaymode) {
case 1:
displaymode = 2;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_2[i];
}
break;
case 2:
displaymode = 3;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_3[i];
}
break;
case 3:
displaymode = 4;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_4[i];
}
break;
case 4:
displaymode = 5;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_5[i];
}
break;
case 5:
displaymode = 1;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_1[i];
}
break;
}
lastDebounceTime = millis();
}
previousState = reading;
}[/code]
驴友花雕
驴友花雕
作者
【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
项目之四:24段三级联FFT浮点多色频谱灯
实验场景图

驴友花雕
驴友花雕
作者
【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
项目之三:多档arduinoFFT浮点频谱灯
实验视频剪辑
https://v.youku.com/v_show/id_XNTgxNzc4MzAzMg==.html?firsttime=0
[media=x,500,375]https://v.youku.com/v_show/id_XNTgxNzc4MzAzMg==.html?firsttime=0[/media]
驴友花雕
驴友花雕
作者
实验场景动态图

驴友花雕
驴友花雕
作者
【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
项目之三:多档arduinoFFT浮点频谱灯
实验开源代码
[code]/*
【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
项目之三:多档arduinoFFT浮点频谱灯
*/
#include
#include
#include
#define SAMPLES 64
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
#define xres 32
#define yres 8
int MY_ARRAY[] = {0, 128, 192, 224, 240, 248, 252, 254, 255};
int MY_MODE_1[] = {0, 128, 192, 224, 240, 248, 252, 254, 255};
int MY_MODE_2[] = {0, 128, 64, 32, 16, 8, 4, 2, 1};
int MY_MODE_3[] = {0, 128, 192, 160, 144, 136, 132, 130, 129};
int MY_MODE_4[] = {0, 128, 192, 160, 208, 232, 244, 250, 253};
int MY_MODE_5[] = {0, 1, 3, 7, 15, 31, 63, 127, 255};
double vReal[SAMPLES];
double vImag[SAMPLES];
char data_avgs[xres];
int yvalue;
int displaycolumn , displayvalue;
int peaks[xres];
const int buttonPin = 2;
int state = HIGH;
int previousState = LOW;
int displaymode = 1;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
arduinoFFT FFT = arduinoFFT();
void setup() {
ADCSRA = 0b11100101;
ADMUX = 0b00000000;
pinMode(buttonPin, INPUT);
mx.begin();
delay(50);
}
void loop() {
// ++ Sampling
for (int i = 0; i < SAMPLES; i++)
{
while (!(ADCSRA & 0x10));
ADCSRA = 0b11110101 ;
int value = ADC - 512 ;
vReal[i] = value / 8;
vImag[i] = 0;
}
FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
int step = (SAMPLES / 2) / xres;
int c = 0;
for (int i = 0; i < (SAMPLES / 2); i += step)
{
data_avgs[c] = 0;
for (int k = 0 ; k < step ; k++) {
data_avgs[c] = data_avgs[c] + vReal[i + k];
}
data_avgs[c] = data_avgs[c] / step;
c++;
}
for (int i = 0; i < xres; i++)
{
data_avgs[i] = constrain(data_avgs[i], 0, 80);
data_avgs[i] = map(data_avgs[i], 0, 80, 0, yres);
yvalue = data_avgs[i];
peaks[i] = peaks[i] - 1;
if (yvalue > peaks[i])
peaks[i] = yvalue ;
yvalue = peaks[i];
displayvalue = MY_ARRAY[yvalue];
displaycolumn = 15 - i;
mx.setColumn(displaycolumn, displayvalue);
}
displayModeChange ();
}
void displayModeChange() {
int reading = digitalRead(buttonPin);
if (reading == HIGH && previousState == LOW && millis() - lastDebounceTime > debounceDelay)
{
switch (displaymode) {
case 1:
displaymode = 2;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_2[i];
}
break;
case 2:
displaymode = 3;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_3[i];
}
break;
case 3:
displaymode = 4;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_4[i];
}
break;
case 4:
displaymode = 5;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_5[i];
}
break;
case 5:
displaymode = 1;
for (int i = 0 ; i <= 8 ; i++ ) {
MY_ARRAY[i] = MY_MODE_1[i];
}
break;
}
lastDebounceTime = millis();
}
previousState = reading;
}[/code]
驴友花雕
驴友花雕
作者
[align=left][font="] 【花雕动手做】音乐可视化系列小项目(07)---大方格频谱灯[/font][/align][align=left][font="] 项目之二:八段音乐可视化动态频谱仪(FFT算法)[/font][/align]
[align=left][font="] 实验视频剪辑[/font][/align]
[align=left][font="]https://v.youku.com/v_show/id_XNTgxNzg5NzEzNg==.html?firsttime=0[/font][/align]
[align=left][font="][media=x,500,375]https://v.youku.com/v_show/id_XNTgxNzg5NzEzNg==.html?firsttime=0[/media][/font][/align]
驴友花雕
驴友花雕
作者
[backcolor=rgb(255, 255, 255)][font="]实验场景动态图[/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="]
[/font][/backcolor]

驴友花雕
驴友花雕
作者
【花雕动手做】音乐可视化系列小项目(07)---大方格频谱灯
项目之二:八段音乐可视化动态频谱仪(FFT算法)
实验开源代码
[code]/*
【花雕动手做】音乐可视化系列小项目(07)---大方格频谱灯
项目之二:FFT算法,八段音乐可视化动态频谱仪
*/
#include
#include
#include
MD_MAX72XX disp = MD_MAX72XX(MD_MAX72XX::FC16_HW, 10, 1);
arduinoFFT FFT = arduinoFFT();
double realComponent[64];
double imagComponent[64];
int spectralHeight[] = {0b00000000, 0b10000000, 0b11000000,
0b11100000, 0b11110000, 0b11111000,
0b11111100, 0b11111110, 0b11111111
};
int index, c, value;
void setup()
{
disp.begin();
Serial.begin(9600);
}
void loop()
{
int sensitivity = map(analogRead(A0), 0, 1023, 50, 100);
Serial.println (analogRead(A0));
for (int i = 0; i < 64; i++)
{
realComponent[i] = analogRead(A7) / sensitivity;
imagComponent[i] = 0;
}
FFT.Windowing(realComponent, 64, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(realComponent, imagComponent, 64, FFT_FORWARD);
FFT.ComplexToMagnitude(realComponent, imagComponent, 64);
for (int i = 0; i < 32; i++)
{
realComponent[i] = constrain(realComponent[i], 0, 80);
realComponent[i] = map(realComponent[i], 0, 80, 0, 8);
index = realComponent[i];
value = spectralHeight[index];
c = 31 - i;
disp.setColumn(c, value);
}
}[/code]
驴友花雕
驴友花雕
作者
[backcolor=rgb(255, 255, 255)][font="]实验场景动态图[/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="]
[/font][/backcolor]

驴友花雕
驴友花雕
作者
【花雕动手做】音乐可视化系列小项目(07)---大方格频谱灯
项目之一:动态音乐频谱仪
实验视频剪辑
https://v.youku.com/v_show/id_XNTgxMDQ2OTc2MA==.html?spm=a2hcb.playlsit.page.1
[media=x,500,375]https://v.youku.com/v_show/id_XNTgxMDQ2OTc2MA==.html?spm=a2hcb.playlsit.page.1[/media]
驴友花雕
驴友花雕
作者
实验场景图

驴友花雕
驴友花雕
作者
[backcolor=rgb(255, 255, 255)][font="] 【花雕动手做】音乐可视化系列小项目(07)---大方格频谱灯[/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="] 项目之一:动态音乐频谱仪[/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="] 实验开源代码[/font][/backcolor]
[backcolor=rgb(255, 255, 255)][font="]
[/font][/backcolor]
[code]/*
【花雕动手做】音乐可视化系列小项目(07)---大方格频谱灯
项目之一:动态音乐频谱仪
接脚连线:MAX9814 接A0
MAX7219 UNO
VCC →→→→→ 5V
GND →→→→→ GND
DIN →→→→→ D12(数据,数据接收引脚)
CS →→→→→ D11(负载,命令接收引脚)
CLK →→→→→ D10(时钟,时钟引脚)
*/
#include "LedControl.h"
/* Led matrix - Max7219 Declared */
LedControl lc = LedControl(12, 11, 10, 1);
const int maxScale = 11;
/* Sensor - Max9812 Declared */
const int sensorPin = A4;
const int sampleWindow = 50; // 50ms = 20Hz
unsigned int sample;
unsigned long startMillis;
unsigned long timeCycle;
unsigned int signalMax = 0;
unsigned int signalMin = 1024;
unsigned char index = 0;
unsigned int peakToPeak[8];
unsigned int displayPeak[8];
unsigned int temp[8] = {0, 0, 0, 0, 0, 0, 0, 0};
unsigned int signalMaxBuff[8];
unsigned int signalMinBuff[8];
void setup() {
// Led matrix
lc.shutdown(0, false); // bật hiện thị
lc.setIntensity(0, 1); // chỉnh độ sáng
lc.clearDisplay(0); // tắt tất cả led
Serial.begin(9600);
}
void loop() {
startMillis = millis();
//peakToPeak = 0;
signalMax = 0;
signalMin = 1024;
// Get data in 50ms
while (millis() - startMillis < sampleWindow) {
sample = analogRead(sensorPin);
if (sample < 1024) {
if (sample > signalMax) {
signalMax = sample;
}
if (sample < signalMin) {
signalMin = sample;
}
}
// 20Hz - 64Hz - 125Hz - 250Hz - 500Hz - 1kHz (timeCycle = 1/F)(ms)
timeCycle = millis() - startMillis;
if (timeCycle == 1 || timeCycle == 2 || timeCycle == 4 || timeCycle == 8
|| timeCycle == 16 || timeCycle == 32 || timeCycle == 40 || timeCycle == 50) {
signalMaxBuff[index] = signalMax;
signalMinBuff[index] = signalMin;
index = (index + 1) % 8;
delay(1);
//Serial.println(timeCycle);
}
}
// Delete pointer to array
index = 0;
// Calculation after get samples
for (int i = 0; i < 8; i++) { // i = row (led matrix)
// sound level
peakToPeak[i] = signalMaxBuff[i] - signalMinBuff[i];
// Map 1v p-p level to the max scale of the display
displayPeak[i] = map(peakToPeak[i], 0, 1023, 0, maxScale);
// Show to led matrix
displayLed(displayPeak[i], i);
// Led drop down
if (displayPeak[i] >= temp[i]) {
temp[i] = displayPeak[i];
}
else {
temp[i]--;
}
lc.setLed(0, i, temp[i], true);
delayMicroseconds(250);
}
}
void displayLed(int displayPeak, int row) {
switch (displayPeak) {
case 0 : lc.setRow(0, row, 0x80); break;
case 1 : lc.setRow(0, row, 0xC0); break;
case 2 : lc.setRow(0, row, 0xE0); break;
case 3 : lc.setRow(0, row, 0xF0); break;
case 4 : lc.setRow(0, row, 0xF8); break;
case 5 : lc.setRow(0, row, 0xFC); break;
case 6 : lc.setRow(0, row, 0xFE); break;
case 7 : lc.setRow(0, row, 0xFF); break;
}
}[/code]