找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4731|回复: 7
打印 上一主题 下一主题
收起左侧

MAX9814 ws2812拾音灯Arduino程序

  [复制链接]
跳转到指定楼层
楼主


Arduino源程序如下:
  1. /*MAX9814掉落效果版本
  2.    WS2812 灯带*1
  3.    MAX9814模块*1
  4.    公对母杜邦线*6
  5.    ESP8266NODEMCU开发板*1

  6.   开发板选择Wifiduino   《《====================================

  7.   最小系统接线(灯带60灯珠以下)
  8.   MAX9814 WS2812   ES8266
  9.   VCC      +5V     3.3V
  10.   GND      GND     GND
  11.   OUT   /  DIN     A0/GPIO5
  12.   GAIN             3.3
  13. * * QQ群1147147694  《《=====================================
  14. */
  15. //中间扩散效果
  16. #include "FastLED.h"
  17. #define NUM_LEDS 144            // LED灯珠数量
  18. #define LED_DT 5                // 输出控制信号引脚
  19. #define sigPin A0                // ESP8266ADC引脚接MAX9814 OUT信号引脚  GAIN接3.3V
  20. #define LED_TYPE WS2812       // LED灯带型号
  21. #define COLOR_ORDER GRB
  22. CRGB leds[NUM_LEDS];            // 建立光带leds




  23. int sig;//麦克风读取数值
  24. int pre_si;//指示旧值
  25. int si;//指示新值
  26. int sig_min = 1024;//初始读取值最大小值,开机后将重新界定
  27. int sig_max = 0;
  28. double triger_factor = 1.40;//阈值 过滤噪音 该数值调整范围1-2 数值越高要求声音越大才能触发
  29. int drop_dot; //初始掉落位置
  30. unsigned long drop_time;//触发掉落时机
  31. int interval = 30; //每次律动变化的过渡时间
  32. int drop_interval = 100; //掉落点收缩速度
  33. int maxBrightness = 250;
  34. int mid = int(NUM_LEDS / 2);
  35. int delta = int(maxBrightness / mid); //渐变量
  36. unsigned long triger_time = 0;
  37. int randC = 130; //掉落点随机颜色初始
  38. bool raising = true;
  39. void setup() {
  40.   Serial.begin(115200);
  41.   LEDS.addLeds<LED_TYPE, LED_DT, COLOR_ORDER>(leds, NUM_LEDS);
  42.   // .setCorrection(TypicalLEDStrip);//如果灯带未响应,请设置
  43.   FastLED.setBrightness(255);                            // 设置光带亮度
  44.   pinMode(sigPin, INPUT);
  45. }


  46. void loop()
  47. {
  48.   musicV();
  49. }


  50. void musicV()
  51. {
  52.   //计算环境读取最大最小值,所以在上电后循环几次后达到平稳的触发值。
  53.   sig = analogRead(sigPin);

  54.   if (sig < sig_max)//
  55.   {
  56.     sig_max = sig;
  57.   }
  58.   if (sig > sig_min)
  59.   {
  60.     sig_min = sig;
  61.   }

  62.   int mean = (sig_min + sig_max) / 2;

  63.   int _sig = abs(sig - mean ) + mean;


  64.   _sig = constrain(_sig, int(mean * triger_factor), sig_max);
  65.   //Serial.println(_sig);

  66.   si = map(_sig - int(mean * triger_factor), int(mean * triger_factor) - int(mean * triger_factor), int(sig_max) - int(mean * triger_factor), 0, mid - 2);
  67.   si = constrain(si, 0, mid - 2);
  68.   if (si == mid - 2) {
  69.     randC = random(0, 255);

  70.     pre_si = 0;
  71.   }
  72.   Serial.println(randC);
  73.   //===================================================================================================== PART1
  74.   if (si > pre_si)
  75.   {
  76.     if (si > drop_dot)
  77.     {
  78.       if (si * 1.6 < mid - 1) {
  79.         drop_dot = int(si * 1.6);
  80.       }
  81.       else {
  82.         drop_dot = mid - 3;
  83.       }




  84.     }
  85.     for (int j = pre_si - 1; j < si + 1; j++)
  86.     {
  87.       while ( millis() - triger_time < int(interval / (si - pre_si) + 2))
  88.       {

  89.         if ((drop_dot > j + 3 ) && (millis() - drop_time > drop_interval))
  90.         {
  91.           leds [mid + drop_dot + 1] = CRGB::Black;
  92.           leds [mid - 1 - drop_dot - 1] = CRGB::Black;
  93.           leds[mid + drop_dot] = CHSV(int(255 - randC), 255, maxBrightness);
  94.           leds[mid - 1 - drop_dot] = CHSV(int(255 - randC), 255, maxBrightness);

  95.           FastLED.show();
  96.           drop_dot--;
  97.           drop_time = millis();
  98.         }

  99.         leds [mid + j] = CHSV(delta * j, 255, maxBrightness - delta * j);
  100.         leds [mid - 1 - j] = CHSV(delta * j, 255, maxBrightness - delta * j);
  101.         //leds [mid + j] = CHSV(randC, 255, 255 - delta * j);
  102.         //leds [mid - 1 - j] = CHSV(randC, 255, 255 - delta * j);


  103.       }
  104.       FastLED.show();
  105.       triger_time = millis();
  106.     }
  107.   }
  108.   // --------------------------------------------------------------------------------------------------
  109.   //===================================================================================================== PART2
  110.   if (si < pre_si)
  111.   {
  112.     leds [mid + drop_dot + 1] = CRGB::Black;
  113.     leds [mid - 1 - drop_dot - 1] = CRGB::Black;
  114.     leds[mid + drop_dot] = CHSV(int(255 - randC), 255, maxBrightness);
  115.     leds[mid - 1 - drop_dot] = CHSV(int(255 - randC), 255, maxBrightness);
  116.     FastLED.show();
  117.     drop_dot--;
  118.     drop_time = millis();


  119.     for (int k = pre_si + 1; k > si - 1; k--)
  120.     {
  121.       while ( millis() - triger_time < int(interval / (pre_si - si) + 2))
  122.       {
  123.         if ((drop_dot > k + 3 ) && (millis() - drop_time > drop_interval))
  124.         {
  125.           leds [mid + drop_dot + 1] = CRGB::Black;
  126.           leds [mid - 1 - drop_dot - 1] = CRGB::Black;
  127.           leds[mid + drop_dot] = CHSV(int(255 - randC), 255, maxBrightness);
  128.           leds[mid - 1 - drop_dot] = CHSV(int(255 - randC), 255, maxBrightness);
  129.           FastLED.show();
  130.           drop_dot--;
  131.           drop_time = millis();

  132.         }


  133.         leds[mid + k] = CRGB::Black;

  134.         leds[mid - 1 - k] = CRGB::Black;
  135.       }
  136.       FastLED.show();
  137.       triger_time = millis();

  138.     }
  139.   }
  140.   // --------------------------------------------------------------------------------------------------

  141.   if (si == 0 && pre_si == 0 && drop_dot > -1 && (millis() - drop_time > drop_interval))
  142.   {
  143.     leds [mid + drop_dot + 1] = CRGB::Black;
  144.     leds [mid - 1 - drop_dot - 1] = CRGB::Black;

  145.     leds[mid + drop_dot] = CHSV(int(255 - randC), 255, maxBrightness);
  146.     leds[mid - 1 - drop_dot] = CHSV(int(255 - randC), 255, maxBrightness);
  147.     if (drop_dot == 0)
  148.     {
  149.       leds [mid + drop_dot] = CRGB::Black;
  150.       leds [mid - 1 - drop_dot] = CRGB::Black;
  151.     }
  152.     FastLED.show();
  153.     drop_dot--;
  154.     drop_time = millis();

  155.   }
  156.   pre_si = si;
  157. }
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:697622 发表于 2021-10-9 10:24 | 只看该作者
正好手头有这几样东东,花了一会时间就搭建好了电路,烧了程序,调整阀值,效果还可以。
回复

使用道具 举报

板凳
ID:288183 发表于 2021-10-19 09:32 | 只看该作者
#include "FastLED.h"  请问这个头文件有吗?能否分享份完整的代码,谢谢?
回复

使用道具 举报

地板
ID:1041015 发表于 2022-7-30 15:34 | 只看该作者
yanzhuangsongqi 发表于 2021-10-19 09:32
#include "FastLED.h"  请问这个头文件有吗?能否分享份完整的代码,谢谢?

兄弟,你解决了没?
回复

使用道具 举报

5#
ID:482083 发表于 2022-9-4 17:05 | 只看该作者
yanzhuangsongqi 发表于 2021-10-19 09:32
#include "FastLED.h"  请问这个头文件有吗?能否分享份完整的代码,谢谢?

找个梯子,直接arduino里的库能找到的
回复

使用道具 举报

6#
ID:967397 发表于 2022-9-7 10:57 | 只看该作者
楼主,刷了灯带没反应是啥情况?
回复

使用道具 举报

7#
ID:967397 发表于 2022-9-7 10:58 | 只看该作者
楼主,烧录程序后灯带无反应怎么解决?
回复

使用道具 举报

8#
ID:458472 发表于 2022-9-13 13:21 | 只看该作者
fjm0218888 发表于 2022-9-7 10:58
楼主,烧录程序后灯带无反应怎么解决?

你把VCC的电去掉
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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