19171浏览
楼主: 驴友花雕

[项目] 【花雕动手做】看见声音,基于Arduino系列音乐可视器(10)

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2022-10-27 09:56:00

实验的视频记录
优酷:
B站:https://www.bilibili.com/video/B ... 87403d97f8d3cc0b7e5



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-17 19:06:46

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十七:Wemos D1 R32 ESP32开发板
项目之四十六:基于虚拟轮生成颜色的256位音乐可视化


  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验一百七十七:Wemos D1 R32 ESP32开发板
  4.   项目之四十六:基于虚拟轮生成颜色的256位音乐可视化
  5. */
  6. #include <FastLED.h>
  7. // LED LIGHTING SETUP
  8. #define LED_PIN     23
  9. #define NUM_LEDS    256
  10. #define BRIGHTNESS  30
  11. #define LED_TYPE    WS2811
  12. #define COLOR_ORDER GRB
  13. CRGB leds[NUM_LEDS];
  14. #define UPDATES_PER_SECOND 100
  15. // AUDIO INPUT SETUP
  16. int audio = 38;
  17. // STANDARD VISUALIZER VARIABLES
  18. int loop_max = 0;
  19. int k = 255; // COLOR WHEEL POSITION
  20. int decay = 0; // HOW MANY MS BEFORE ONE LIGHT DECAY
  21. int decay_check = 0;
  22. long pre_react = 0; // NEW SPIKE CONVERSION
  23. long react = 0; // NUMBER OF LEDs BEING LIT
  24. long post_react = 0; // OLD SPIKE CONVERSION
  25. // RAINBOW WAVE SETTINGS
  26. int wheel_speed = 4;
  27. void setup()
  28. {
  29.   // LED LIGHTING SETUP
  30.   delay( 3000 ); // power-up safety delay
  31.   FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  32.   FastLED.setBrightness(  BRIGHTNESS );
  33.   // CLEAR LEDS
  34.   for (int i = 0; i < NUM_LEDS; i++)
  35.     leds[i] = CRGB(0, 0, 0);
  36.   FastLED.show();
  37.   // SERIAL AND INPUT SETUP
  38.   Serial.begin(115200);
  39.   pinMode(audio, INPUT);
  40.   Serial.println("\nListening...");
  41. }
  42. CRGB Scroll(int pos) {
  43.   CRGB color (0,0,0);
  44.   if(pos < 85) {
  45.     color.g = 0;
  46.     color.r = ((float)pos / 85.0f) * 255.0f;
  47.     color.b = 255 - color.r;
  48.   } else if(pos < 170) {
  49.     color.g = ((float)(pos - 85) / 85.0f) * 255.0f;
  50.     color.r = 255 - color.g;
  51.     color.b = 0;
  52.   } else if(pos < 256) {
  53.     color.b = ((float)(pos - 170) / 85.0f) * 255.0f;
  54.     color.g = 255 - color.b;
  55.     color.r = 1;
  56.   }
  57.   return color;
  58. }
  59. void rainbow(){
  60.   for(int i = NUM_LEDS - 1; i >= 0; i--) {
  61.     if (i < react)
  62.       leds[i] = Scroll((i * 256 / 50 + k) % 256);
  63.     else
  64.       leds[i] = CRGB(0, 0, 0);      
  65.   }
  66.   FastLED.show();
  67. }
  68. void loop(){
  69.   int audio_input = analogRead(audio)*5.5; // 在此处调整,以获得更多敏感性  
  70.   if (audio_input > 0)
  71.   {
  72.     pre_react = ((long)NUM_LEDS * (long)audio_input) / 1023L; // TRANSLATE AUDIO LEVEL TO NUMBER OF LEDs
  73.     if (pre_react > react) // ONLY ADJUST LEVEL OF LED IF LEVEL HIGHER THAN CURRENT LEVEL
  74.       react = pre_react;
  75.     Serial.print(audio_input);
  76.     Serial.print(" -> ");
  77.     Serial.println(pre_react);
  78.   }
  79.   rainbow(); // APPLY COLOR
  80.   k = k - wheel_speed; // SPEED OF COLOR WHEEL
  81.   if (k < 0) // RESET COLOR WHEEL
  82.     k = 255;
  83.   // REMOVE LEDs
  84.   decay_check++;
  85.   if (decay_check > decay)
  86.   {
  87.     decay_check = 0;
  88.     if (react > 0)
  89.       react--;
  90.   }
  91.   delay(1);
  92. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-17 19:11:37

实验场景图  动态图

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-17 19:20:32

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-17 20:01:51

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百七十七:Wemos D1 R32 ESP32开发板
  项目之四十七:快速傅里叶变换256位频谱仪

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验一百七十七:Wemos D1 R32 ESP32开发板
  4.   项目之四十七:快速傅里叶变换256位频谱仪
  5. */
  6. #include  "arduinoFFT.h"
  7. #include <FastLED.h>   
  8. #define NUM_LEDS 256   
  9. #define LED_TYPE WS2812
  10. #define COLOR_ORDER GRB
  11. arduinoFFT FFT = arduinoFFT();
  12. CRGB leds[NUM_LEDS];           
  13. #define CHANNEL 39
  14. #define DATA_PIN 23
  15. const uint8_t max_bright = 2;         
  16. const uint16_t samples = NUM_LEDS / 4;
  17. const byte halfsamples = samples / 2;  
  18. uint8_t gHue;                          
  19. int value;                             
  20. double vReal[samples];                 
  21. double vImag[samples];                 
  22. char toData[halfsamples];              
  23. int pointJump[halfsamples];
  24. int uJump[halfsamples];     
  25. int dJump[halfsamples];   
  26. int uValue;                 
  27. int dValue;                 
  28. int tValue;                 
  29. int toDown = 0;            
  30. uint8_t toDownSpeed = 3;   
  31. int pointDown = 0;         
  32. uint8_t pointDownSpeed = 9;
  33. void setup(){
  34.   delay(100);              
  35.   Serial.println("Ready");
  36.   FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  37.   FastLED.setBrightness(max_bright);
  38. }
  39. void loop(){
  40.   FastLED.clear();                        
  41.   EVERY_N_MILLISECONDS(10) {
  42.     gHue += 10;  
  43.   }
  44.   for (int i = 0; i < samples; i++)        
  45.   {
  46.     value = analogRead(CHANNEL);
  47.     vReal[i] = value;      
  48.     vImag[i] = 0.0;         
  49.   }
  50.   
  51.   FFT.Windowing(vReal, samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
  52.   FFT.Compute(vReal, vImag, samples, FFT_FORWARD);
  53.   FFT.ComplexToMagnitude(vReal, vImag, samples);
  54.   
  55.   for (int i = 0; i < halfsamples; i++)
  56.   {
  57.     toData[i] = vReal[i + halfsamples / 2];   
  58.     toData[i] = constrain(toData[i], 0, 100);
  59.     toData[i] = map(toData[i], 0, 100, 1, 7);
  60.   }
  61.   for (int i = 0; i < halfsamples; i++)
  62.   {
  63.     uValue = toData[i];   
  64.     uJump[i]++;            
  65.     if (uValue > uJump[i])
  66.     {
  67.       uValue = uJump[i];
  68.     }
  69.     else
  70.     {
  71.       uJump[i] = uValue;
  72.     }
  73.     dValue = uValue;
  74.     toDown++;                     
  75.     if (toDown % toDownSpeed == 0)
  76.     {
  77.       dJump[i]--;
  78.       toDown = 0;
  79.     }
  80.     if (dValue > pointJump[i])
  81.     {
  82.       dJump[i] = dValue;
  83.     }
  84.     else
  85.     {
  86.       dValue = dJump[i];
  87.     }
  88.     tValue = uValue;                     
  89.     pointDown++;                        
  90.     if (pointDown % pointDownSpeed == 0)
  91.     {
  92.       pointJump[i]--;
  93.       pointDown = 0;  
  94.     }
  95.     if (tValue > pointJump[i])
  96.     {
  97.       pointJump[i] = tValue;
  98.     }
  99.     else
  100.     {
  101.       tValue = pointJump[i];
  102.     }
  103.     fill_rainbow(leds + 8 * i, uValue, gHue, 30);
  104.     fill_rainbow(leds + 8 * i, dValue, gHue, 30);
  105.     fill_solid(leds + 8 * i + tValue, 1, CRGB::White);
  106.    
  107.   }
  108.   FastLED.show();
  109.   delay(2);      
  110. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-17 20:19:06

实验场景图

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-17 20:27:01

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-17 20:32:35

实验场景图  动态图

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-17 21:17:12

回复

使用道具 举报

123
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail