查看: 793|回复: 1

Arduino音乐频谱灯,动次打次

[复制链接]
  • TA的每日心情
    擦汗
    2019-10-12 10:42
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2019-10-1 23:24 | 显示全部楼层 |阅读模式
    本帖最后由 carlbeven 于 2019-10-2 12:04 编辑

    利用音频模拟信号值范围对比来控制LED灯的闪烁,达到频谱灯的效果.

    材料:arduino uno led二极管 电阻 杜邦线 3.5mm耳机插头 AUX线  耳机母座




    int si = 0;
    int mas = 5;
    int mis = 500;
    ////////////////////////////初始一个峰值和谷值

    void sigch()
    {
      ////////////////unsigned long nowtime = millis();
      //////////////////unsigned long steptime = nowtime + 10000;


      int sig = analogRead(A0);
      if (sig > mas)
      {
        mas = sig;
      }
      if (sig < mis)
      {
        mis = sig;
      }
      int eql = (mas + mis) / 2;
      //Serial.print("sig");
      //Serial.println(eql);
      //Serial.print("  ");
      //Serial.println(eql);
      // Serial.print("  case  ");
      //delay(50);
    //////////////////////////////////////灵敏度调试

      if (  (eql * 0.93 < sig && sig  < eql * 0.96) || (eql * 1.03 < sig && sig < eql * 1.06))
      {
        si = 1;
      }
      if (( eql * 0.87 < sig && sig  < eql * 0.93) || (eql * 1.06 < sig && sig  < eql * 1.12))
      {
        si = 2;

      }

      if (  (eql * 0.81 < sig && sig  < eql * 0.87) || (eql * 1.12 < sig && sig  < eql * 1.18))
      {
        si = 3;

      }
      if (  (eql * 0.69 < sig && sig  < eql * 0.75) || (eql * 1.18 < sig && sig  < eql * 1.24))
      {
        si = 4;

      }
      if ( (eql * 0.63 < sig && sig  < eql * 0.69) || (eql * 1.24 < sig && sig  < eql * 1.3))
      {
        si = 5;

      }
      if ((eql * 0.4 < sig && sig  < eql * 0.63) || (eql * 1.3 < sig && sig  < eql * 1.6))
      {
        si = 6;

      }
    }

    void setup() {

      Serial.begin(9600);
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(7, OUTPUT);
      pinMode(8, OUTPUT);
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
    }
    void alloff()
    {
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
    }
    // the loop routine runs over and over again forever:
    void loop() {
      sigch();

      switch (si)
      {
        case 1:
          digitalWrite(5, HIGH);
          digitalWrite(6, LOW);
          digitalWrite(7, LOW);
          digitalWrite(8, LOW);
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 2:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, LOW);
          digitalWrite(8, LOW);
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 3:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(8, LOW);
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 4:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(8, HIGH);
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 5:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(8, HIGH);
          digitalWrite(9, HIGH);
          digitalWrite(10, LOW);
          delay(50);
          break;
        case 6:
          digitalWrite(5, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(8, HIGH);
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          delay(50);
          break;

        default:
          alloff();
    break;
      }
    }






    可以用废弃的耳机剪开得到插头,引出左或右声道作为模拟信号输入(小白一个,不太懂这些,谅解);


    IMG_20191001_232140.jpg

    我用的AUX线、耳机插头、耳机母座方便些,引出其中一声道作为A0模拟信号读取,然后母座接上音响就可以同时播放音乐和灯光效果。



    IMG_20191002_112754.jpg



    LED的接线的话不说了。
    IMG_20191002_111842.jpg

    重点是获取eql平均值:

    eql.png
    摸索后发现eql是静音时的输出数值,我用的计算方法是找出峰值和谷值求平均。但是每首歌的谷值mis会变,上一首歌的mis可能会保留到下一首歌,所以这个部分的程序还在摸索中。eql和音量,切歌灯有关系,也求大神指点解决方法。

    自带水泥,村口集合!!!!!!!!!!!!!!
    #在抖音,记录美好生活#
    http://v.douyin.com/ubnx4c/
    复制此链接,打开【抖音短视频】,直接观看视频!
    (视频时后来的配音,鼓点对不上)




    eql.png
  • TA的每日心情
    开心
    2019-7-18 17:49
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2019-10-3 21:38 | 显示全部楼层
    很酷哦,很酷哦很酷哦很酷哦很酷哦
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Blynk与m5stack basic以及uiflow的交互玩法
    Blynk与m5stack basic以及
    Blynk与m5stack basic以及uiflow的交互玩法 [准备工作我们假设玩家已经熟悉下面的准备
    【Arduino】108种传感器模块系列实验(45)---红外避障传感器
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    中文 字库 的8针 OLED 12864模块 arduino
    中文 字库 的8针 OLED 128
    屏幕电路SPI连线: 中文字库OLED Arduino UNO GND GND
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表