Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

[项目] 【花雕动手做】有趣好玩音乐可视化(14)---水杯水瓶灯

[复制链接]
 楼主| 发表于 2022-8-9 09:11 | 显示全部楼层
  【花雕动手做】有趣好玩的音乐可视化系列小项目(14)---水杯水瓶灯
  项目程序之三:Adafruit_NeoPixel音乐可视化水灯

  1. /*
  2.   【花雕动手做】有趣好玩的音乐可视化系列小项目(14)---水杯水瓶灯
  3.   项目程序之三:Adafruit_NeoPixel音乐可视化水灯
  4. */

  5. #include <Adafruit_NeoPixel.h>
  6. #define MIC A0
  7. #define LED_PIN 6
  8. #define N_PIXELS 12
  9. #define N 100
  10. #define fadeDelay 10
  11. #define noiseLevel 10
  12. Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
  13. int samples[N];
  14. int periodFactor = 0;
  15. int t1 = -1;
  16. int T;
  17. int slope;
  18. byte periodChanged = 0;

  19. void setup() {
  20.   strip.begin();
  21.   ledsOff();
  22.   delay(500);
  23.   displayColor(Wheel(100));
  24.   strip.show();
  25.   delay(500);
  26. }

  27. void loop() {
  28.   Samples();
  29. }

  30. void Samples() {
  31.   for (int i = 0; i < N; i++) {
  32.     samples[i] = analogRead(0);
  33.     if (i > 0) {
  34.       slope = samples[i] - samples[i - 1];
  35.     }
  36.     else {
  37.       slope = samples[i] - samples[N - 1];
  38.     }

  39.     if (abs(slope) > noiseLevel) {
  40.       if (slope < 0) {
  41.         calculatePeriod(i);
  42.         if (periodChanged == 1) {
  43.           displayColor(getColor(T));
  44.         }
  45.       }
  46.     }
  47.     else {
  48.       ledsOff();
  49.     }
  50.     periodFactor += 1;
  51.     delay(1);
  52.   }
  53. }

  54. void calculatePeriod(int i) {
  55.   if (t1 == -1) {

  56.     t1 = i;
  57.   }
  58.   else {

  59.     int period = periodFactor * (i - t1);
  60.     periodChanged = T == period ? 0 : 1;
  61.     T = period;

  62.     t1 = i;
  63.     periodFactor = 0;
  64.   }
  65. }

  66. uint32_t getColor(int period) {
  67.   if (period == -1)
  68.     return Wheel(0);
  69.   else if (period > 400)
  70.     return Wheel(5);
  71.   else
  72.     return Wheel(map(-1 * period, -400, -1, 50, 255));
  73. }

  74. void fadeOut(){
  75.   for (int i = 0; i < 5; i++) {
  76.     strip.setBrightness(110 - i * 20);
  77.     strip.show(); // Update strip
  78.     delay(fadeDelay);
  79.     periodFactor += fadeDelay;
  80.   }
  81. }

  82. void fadeIn() {
  83.   strip.setBrightness(100);
  84.   strip.show();

  85.   for (int i = 0; i < 5; i++) {
  86.     delay(fadeDelay);
  87.     periodFactor += fadeDelay;
  88.   }
  89. }

  90. void ledsOff() {
  91.   fadeOut();
  92.   for (int i = 0; i < N_PIXELS; i++) {
  93.     strip.setPixelColor(i, 0, 0, 0);
  94.   }
  95. }

  96. void displayColor(uint32_t color) {
  97.   for (int i = 0; i < N_PIXELS; i++) {
  98.     strip.setPixelColor(i, color);
  99.   }
  100.   fadeIn();
  101. }

  102. uint32_t Wheel(byte WheelPos) {
  103.   if (WheelPos < 85) {

  104.     return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  105.   }
  106.   else if (WheelPos < 170) {
  107.     WheelPos -= 85;
  108.     return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  109.   }
  110.   else {
  111.     WheelPos -= 170;
  112.     return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  113.   }
  114. }
复制代码


 楼主| 发表于 2022-8-9 09:56 | 显示全部楼层
本帖最后由 eagler8 于 2022-8-9 10:00 编辑

实验的视频记录(1分39秒)


https://v.youku.com/v_show/id_XN ... hcb.playlsit.page.3


 楼主| 发表于 2022-8-9 10:04 | 显示全部楼层
本帖最后由 eagler8 于 2022-8-9 10:05 编辑

找到一个其他家用电器上的塑料盒子。


12.jpg
 楼主| 发表于 2022-8-9 10:05 | 显示全部楼层
本帖最后由 eagler8 于 2022-8-9 10:09 编辑

准备用它来做十位120颗LED彩色音乐节奏灯的底座。


13.jpg
 楼主| 发表于 2022-8-9 12:05 | 显示全部楼层
为打这个孔,特意收了几个大规格扩孔器........

14.jpg




 楼主| 发表于 2022-8-9 12:08 | 显示全部楼层
没想到效果比预料的好


15.jpg
 楼主| 发表于 2022-8-10 12:58 | 显示全部楼层

实验场景图  动态图(水杯+水瓶)


 楼主| 发表于 2022-8-10 13:03 | 显示全部楼层
实验的视频记录(1分13秒)

https://v.youku.com/v_show/id_XN ... hcb.playlsit.page.1




 楼主| 发表于 2022-8-10 13:29 | 显示全部楼层
定制的十片灯环,终于到了


16.jpg
 楼主| 发表于 2022-8-13 09:27 | 显示全部楼层
水瓶灯座初步成型了


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

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-12-4 16:16 , Processed in 0.073445 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表