3386

帖子

0

TA的资源

五彩晶圆(中级)

21
 

   实验场景动态图

 

 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

22
 
本帖最后由 eagler8 于 2021-11-5 16:09 编辑

  【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
  项目之三:多档arduinoFFT浮点频谱灯
  
  实验视频剪辑

https://v.youku.com/v_show/id_XNTgxNzc4MzAzMg==.html?firsttime=0

 


 

 
 

回复

1411

帖子

3

TA的资源

版主

23
 

很不错啊

点评

谢谢老师的鼓励  详情 回复 发表于 2021-11-14 15:22
 
 
 

回复

1658

帖子

0

TA的资源

五彩晶圆(初级)

24
 

玩得不错啊,问下为啥顶部的一排LED为啥一直是亮的

感觉关掉的话效果更好

点评

不同风格的,第二种就没有了  详情 回复 发表于 2021-11-14 15:25
 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

25
 

谢谢老师的鼓励

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

26
 
se7ens 发表于 2021-11-8 14:15 玩得不错啊,问下为啥顶部的一排LED为啥一直是亮的 感觉关掉的话效果更好

不同风格的,第二种就没有了

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

27
 

【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
  项目之四:24段三级联FFT浮点多色频谱灯
  
  实验场景图

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

28
 

   实验开源代码

 

/*
  【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
   项目之四:24段三级联FFT浮点多色频谱灯
*/

#include <arduinoFFT.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#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;
}

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

29
 
本帖最后由 eagler8 于 2021-11-14 17:19 编辑

实验场景动态图

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

30
 

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

   项目之四:24段三级联FFT浮点多色频谱灯

 

   实验视频剪辑

 

https://v.youku.com/v_show/id_XNTgxOTk4MjkzMg==.html?spm=a2hcb.playlsit.page.1

 


 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

31
 

  【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
   项目之五:红白绿三色24段三级联频谱大方格灯(FFT算法)

   
   实验开源代码

 

/*
  【花雕动手做】有趣好玩的音乐可视化系列小项目(07)---大方格频谱灯
   项目之五:红白绿三色24段三级联频谱大方格灯(FFT算法)
*/

#include <arduinoFFT.h>

#include <MD_MAX72xx.h>

#include <SPI.h>

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);

  }

}

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

32
 

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

   项目之五:红白绿三色24段三级联频谱大方格灯(FFT算法)

 

   实验视频剪辑

 

https://v.youku.com/v_show/id_XNTgyMDAwMjE5Mg==.html?spm=a2hcb.playlsit.page.1

 


 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

33
 

   实验场景动态图

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

34
 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

35
 

 【花雕动手做】有趣好玩的音乐可视化系列小项目

   项目之四:FFT算法的双点阵屏的动态频谱仪

 

   实验视频剪辑 

 

https://v.youku.com/v_show/id_XNTgyMjEwNjcwMA==.html?spm=a2hcb.playlsit.page.1

 


 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

36
 

   实验场景动态图

 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
射频识别技术原理分析

射频识别(RFID)技术相对于传统的磁卡及IC卡技术具有非接触、阅读速度快、无磨损等特点,在最近几年里得到快速发展。为加强中国工 ...

KOMAT'SU工控触摸屏

有块大芯片查不到DATASHEET,有哪位高人乐意帮忙啊?29844

c2000launchpad仿真器成功连接28030开发板

118443118443118443118443 本帖最后由 sw0605 于 2013-5-28 14:35 编辑 ]

(转)世界被风险连接

转自https://app.boardapp.com/th/141057540577431552 世界被一些事物奇妙地联系到了一起……这其中就包括风险 ...

滤波器的种类及原理

滤波器是一种选频装置,可以使信号中特定的频率成分通过,而极大地衰减其他频率成分。利用滤波器的这种选频作用,可以滤除干扰噪 ...

【Silicon Labs BG22-EK4108A 蓝牙开发评测】一:环境搭建及Bluetooth-SOC Blinky例程

本次搭建电脑环境 以及手机 app,测试Bluetooth-SOC Blinky例程 通过官方文档【qsg169-bluetooth-sdk-v3x-quick-start-guide】 ...

【兆易GD32F310测评】+初品GD32F310开发板

本帖最后由 jinglixixi 于 2022-5-3 21:27 编辑 赶在五一前,GD32F310开发板就被寄到了,实在是一件快事,其外观如图1所示。 ...

DC-DC升压到5V异常

我的升压电路图如下图: 608263 我的BAT输入是三节7号干电池,用的DC-DC升压芯片是PT1311,下图是PT1311部分介绍: 608 ...

#最能打国产芯# 能打入汽车电子这片地的国产芯,有多少啦?

听说现在汽车电子行业,天天卷,各种卷,听说硬件在降本,天天想着哪里能少用个芯片,哪里可以换个便宜的,开发周期也在缩短,各 ...

【Follow me第二季第1期】 进阶任务:不倒翁和创意可穿戴装饰

继续来挑战一下进阶任务和创意任务。 1. 进阶任务(必做):制作不倒翁——展示不倒翁运动过程中的不同灯光效果 ...

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表