精华内容
下载资源
问答
  • arduino蜂鸣器播放音乐
    2020-12-23 12:52:11

    代码:

    #define musicpin 5 //喇叭引脚

    int song[] = { //音乐音频

    392, 392, 440, 392, 523, 493,

    392, 392, 440, 392, 587, 523,

    392, 392, 784, 659, 523, 493, 440,

    698, 698, 659, 523, 587, 523

    };

    int noteDurations[] = { //音节长度

    6, 6, 3, 3, 3, 2,

    6, 6, 3, 3, 3, 2,

    6, 6, 3, 3, 3, 3, 2,

    6, 6, 3, 3, 3, 2

    };

    void play1() //音频播放函数

    {

    for (int thisNote = 0; thisNote < 25; thisNote++)

    {

    int noteDuration = 1000 / noteDurations[thisNote]; // 计算每个节拍的时间,以一个节拍一秒为例,四分之一拍就是1000/4毫秒,八分之一拍就是1000/8毫秒

    tone(musicpin, song[thisNote], noteDuration);

    int pauseBetweenNotes = noteDuration * 1.30; // 每个音符间的停顿间隔,以该音符的130%为佳

    delay(pauseBetweenNotes);

    noTone(musicpin);

    }

    };

    void setup()

    {

    pinMode(musicpin, OUTPUT);//初始化IO

    }

    void loop()

    {

    play1();

    delay(2000); //等待2秒

    }

    更多相关内容
  • 适合于arduino初学者以及arduino的相关课程设计,下载安装arduino程序可直接使用,需要自己动手根据代码接线也可按自己思路改代码接线。
  • 适合于arduino初学者以及arduino的相关课程设计,下载安装arduino程序可直接使用,需要自己动手根据代码接线也可按自己思路改代码接线。
  • Arduino 蜂鸣器播放音乐

    千次阅读 多人点赞 2019-07-08 15:59:15
    蜂鸣器 根据发声原理不同分为电压式蜂鸣器和电磁式蜂鸣器。我们使用的是电磁式蜂鸣器,接通电源后,振动膜片周期性的振动发声。需要注意的一点是,发声是在内部有电流产生磁场,使得膜片振动的一瞬间。 如果内部...

    蜂鸣器

    根据发声原理不同分为电压式蜂鸣器和电磁式蜂鸣器。我们使用的是电磁式蜂鸣器,接通电源后,振动膜片周期性的振动发声。需要注意的一点是,发声是在内部有电流产生磁场,使得膜片振动的一瞬间。 如果内部一直是直流电的话我们只能听到很小的一下的声音,如果需要持续的声音(就像我萌以前过生日的那种唱生日快乐歌的小玩意)应该怎么办呢?需要一个交流的驱动电路就行。最简单的方波就可以驱动。 这里我们使用的是无源蜂鸣器, 这里的源指的是振荡源,自带BUFF的就是有源,也就是直接同直流电就可以发声,无源则需要外部送入方波信号用于驱动才行。

    接线

    arduino蜂鸣器
    5VVCC
    GNDGND
    8S

    第一步 蜂鸣器响起来

    前面我们已经把数字IO连接到了蜂鸣器的正极,让蜂鸣器响起来只需要在数字IO上放入方波即可。

    digitalWrite(buzzerPin,HIGH); //高电平
    delay(100);
    digitalWrite(buzzerPin,LOW);  //低电平
    delay(100);
    

    其中的100指的是100ms,这样算来通电(高电平)占空比就是50%,周期200ms,那么频率就是500Hz,这个频率实际上已经比较高了。

    不同的旋律

    不同的乐音有着不同的频率,下面是一张乐音频率图。
    在这里插入图片描述

    我们知道了音调的频率后,下一步就是控制音符的演奏时间。每个音符都会播放一定的时间,这样才能构成一首优美的曲子,而不是生硬的一个调的把所有的音符一股脑的都播放出来。音符节奏分为一拍、半拍、1/4拍、1/8拍,我们规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,所以我们可以为每个音符赋予这样的拍子播放出来,音乐就成了。

    音符

    #define Do 262  
    #define Re 294  
    #define Mi 330  
    #define Fa 349  
    #define Sol 392  
    #define La 440  
    #define Si 494  
    

    在这里插入图片描述

    以《欢乐颂》为例

    在这里插入图片描述
    从简谱看,该音乐是D调的,这里的各音符对应的频率对应的是上表中D调的部分。另外,该音乐为四分之四拍,每个对应为1拍。几个特殊音符说明如下:
    第一,普通音符。如第一个音符3,对应频率350,占1拍。
    第二,带下划线音符,表示0.5拍。
    第三,有的音符后带一个点,表示多加0.5拍,即1+0.5
    第四,有的音符后带一个—,表示多加1拍,即1+1
    第五,有的两个连续的音符上面带弧线,表示连音,可以稍微改下连音后面那个音的频率,比如减少或增加一些数值(需自己调试),这样表现会更流畅,其实不做处理,影响也不大。

    程序

    #define NTD0 -1
    #define NTD1 294
    #define NTD2 330
    #define NTD3 350
    #define NTD4 393
    #define NTD5 441
    #define NTD6 495
    #define NTD7 556
    
    #define NTDL1 147
    #define NTDL2 165
    #define NTDL3 175
    #define NTDL4 196
    #define NTDL5 221
    #define NTDL6 248
    #define NTDL7 278
    
    #define NTDH1 589
    #define NTDH2 661
    #define NTDH3 700
    #define NTDH4 786
    #define NTDH5 882
    #define NTDH6 990
    #define NTDH7 112
    //列出全部D调的频率
    #define WHOLE 1
    #define HALF 0.5
    #define QUARTER 0.25
    #define EIGHTH 0.25
    #define SIXTEENTH 0.625
    //列出所有节拍
    int tune[]=                 //根据简谱列出各频率
    {
      NTD3,NTD3,NTD4,NTD5,
      NTD5,NTD4,NTD3,NTD2,
      NTD1,NTD1,NTD2,NTD3,
      NTD3,NTD2,NTD2,
      NTD3,NTD3,NTD4,NTD5,
      NTD5,NTD4,NTD3,NTD2,
      NTD1,NTD1,NTD2,NTD3,
      NTD2,NTD1,NTD1,
      NTD2,NTD2,NTD3,NTD1,
      NTD2,NTD3,NTD4,NTD3,NTD1,
      NTD2,NTD3,NTD4,NTD3,NTD2,
      NTD1,NTD2,NTDL5,NTD0,
      NTD3,NTD3,NTD4,NTD5,
      NTD5,NTD4,NTD3,NTD4,NTD2,
      NTD1,NTD1,NTD2,NTD3,
      NTD2,NTD1,NTD1
    };
    float durt[]=                   //根据简谱列出各节拍
    {
      1,1,1,1,
      1,1,1,1,
      1,1,1,1,
      1+0.5,0.5,1+1,
      1,1,1,1,
      1,1,1,1,
      1,1,1,1,
      1+0.5,0.5,1+1,
      1,1,1,1,
      1,0.5,0.5,1,1,
      1,0.5,0.5,1,1,
      1,1,1,1,
      1,1,1,1,
      1,1,1,0.5,0.5,
      1,1,1,1,
      1+0.5,0.5,1+1,
    };
    int length;
    int tonepin=8;   //得用6号接口
    void setup()
    {
      pinMode(tonepin,OUTPUT);
      length=sizeof(tune)/sizeof(tune[0]);   //计算长度
    }
    void loop()
    {
      for(int x=0;x<length;x++)
      {
        tone(tonepin,tune[x]);
        delay(500*durt[x]);   //这里用来根据节拍调节延时,500这个指数可以自己调整,在该音乐中,我发现用500比较合适。
        noTone(tonepin);
      }
      delay(2000);
    }
    

    Despacito

    演奏效果

    arduino用蜂鸣器演奏Despacito

    连线
    在这里插入图片描述

    
    #define Speaker 3      // speaker signal on D3
    #define Drum 5         // relay signal on D5
    #define Interval 160
    #define NoteSpacing 16
    
    const uint16_t Notes[]={0,31,33,35,37,39,41,44,46,49,52,55,58,62,65,69,73,78,82,87,93,98,104,110,117,123,131,139,147,156,165,175,185,196,208,220,233,247,262,277,294,311,330,349,370,392,415,440,466,494,523,554,587,622,659,698,740,784,831,880,932,988,1047,1109,1175,1245,1319,1397,1480,1568,1661,1760,1865,1976,2093,2217,2349,2489,2637,2794,2960,3136,3322,3520,3729,3951,4186,4435,4699,4978};
    const uint16_t SongLength=64;
    //notes to play
    const uint8_t SpeakerTick[]={52,0,0,0,51,0,0,0,49,0,44,0,44,44,44,44,44,49,49,49,49,0,47,49,0,0,45,0,45,45,45,45,45,49,49,49,49,0,51,52,0,0,47,0,47,47,47,47,52,51,52,51,52,0,54,54,0,51,0,0,0,0,0,0};
    //duration of each notes
    const uint8_t NoteLength[]={4,0,0,0,4,0,0,0,2,0,1,0,1,1,1,1,1,1,1,1,2,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,2,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,2,0,1,2,0,3,0,0,0,0,0};
    //duration of each relay tick
    const uint8_t DrumTick[]={0,0,0,0,0,0,0,0,30,0,0,5,5,0,5,0,30,0,0,5,5,0,5,0,30,0,0,5,5,0,5,0,30,0,0,5,5,0,5,0,30,0,0,5,5,0,5,0,30,0,0,5,5,0,5,0,30,0,0,5,5,0,5,0};
    
    void setup() {
      pinMode(Speaker,OUTPUT);
      pinMode(Drum,OUTPUT);
    }
    
    uint16_t ctr=0,t=0;
    
    void loop() {
      t=millis();
      if(NoteLength[ctr]!=0){
        noTone(Speaker);
        if(SpeakerTick[ctr]!=0) tone(Speaker,Notes[SpeakerTick[ctr]],NoteLength[ctr]*Interval-NoteSpacing);
      }
      if(DrumTick[ctr]!=0){
        digitalWrite(Drum,HIGH);
        delay(DrumTick[ctr]);
        digitalWrite(Drum,LOW);
      }
      ctr=(ctr+1) ;
      delay(Interval-(millis()-t));
    }
    
    

    生日快乐歌

    
    int PIN_SPEAKER = 8;
    
    int length = 25;
    
    char notes[] = "ggagCbggagDCggGECbaffECDC";
    
    int beats[] = {1,1,2,2,2,4, 1,1,2,2,2,4, 1,1,2,2,2,2,2, 1,1,2,2,2,4,1};
    
    int tempo = 300;
    
     
    
    void playTone(int tone, int duration) {
    
      for (long i = 0; i < duration * 1000L; i += tone * 2) {
    
        digitalWrite(PIN_SPEAKER, HIGH);
    
        delayMicroseconds(tone);
    
        digitalWrite(PIN_SPEAKER, LOW);
    
        delayMicroseconds(tone);
    
      }
    
    }
    
     
    
    void playNote(char note, int duration) {
    
      char names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C', 'D', 'E', 'F', 'G'};
    
      int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956, 853, 759, 716, 637, 568};
    
     
    
      for (int i = 0; i < 12; i++) {
    
        if (names[i] == note) {
    
          Serial.print("value:");
    
          Serial.println(note);
    
          playTone(tones[i]*2, duration);
    
        }
    
      }
    
    }
    
     
    
    void setup() {
    
      pinMode(PIN_SPEAKER, OUTPUT);
      Serial.begin(115200);
    }
    
     
    
    void loop() {
    
      for (int i = 0; i < length; i++) {
    
        if (notes[i] == ' ') {
    
          delay(beats[i] * tempo); 
    
        } else {
    
          playNote(notes[i], beats[i] * tempo);
    
        }
    
        delay(tempo / 2); 
    
      }
    
    }
    
    

    爱拼才会赢

    在这里插入图片描述

    程序

    
    #define NTC0 -1
    
    #define NTC1 262
    
    #define NTC2 294
    
    #define NTC3 330
    
    #define NTC4 350
    
    #define NTC5 393
    
    #define NTC6 441
    
    #define NTC7 495
    
     
    
    #define NTCL1 131
    
    #define NTCL2 147
    
    #define NTCL3 165
    
    #define NTCL4 175
    
    #define NTCL5 196
    
    #define NTCL6 221
    
    #define NTCL7 248  
    
     
    
    #define NTCH1 525
    
    #define NTCH2 589
    
    #define NTCH3 661
    
    #define NTCH4 700
    
    #define NTCH5 786
    
    #define NTCH6 882
    
    #define NTCH7 990
    
    //列出全部C调的频率
    
    #define WHOLE 1
    
    #define HALF 0.5
    
    #define QUARTER 0.25
    
    #define EIGHTH 0.25
    
    #define SIXTEENTH 0.625
    
    //列出所有节拍
    
    int tune[]=                 //根据简谱列出各频率
    
    {
    
      NTC5,NTC5,NTC6,
    
      NTCH1,NTC6,NTC5,NTC6,NTCH1,NTC6,NTC5,
    
      NTC3,NTC3,NTC3,NTC5,
    
      NTC6,NTC6,NTC5,NTCH3,NTCH3,NTCH2,NTCH1,
    
      NTCH2,NTCH1,NTCH2,
    
      NTCH3,NTCH3,NTCH2,NTCH3,NTCH2,NTCH1,NTCH2,NTCH1,NTC6,
    
     
    
      NTCH2,NTCH2,NTCH2,NTCH1,NTC6,NTC5,
    
      NTC6,NTC5,NTC5,NTCH1,NTC6,NTC5,NTC1,NTC3,
    
      NTC2,NTC1,NTC2,
    
      NTC3,NTC5,NTC5,NTC3,NTCH1,NTC7,
    
      NTC6,NTC5,NTC6,NTCH1,NTCH2,NTCH3,
    
     
    
      NTCH3,NTCH2,NTCH1,NTC5,NTCH1,NTCH2,NTCH3,
    
     
    
      NTCH2,NTC0,NTCH3,NTCH2,
    
      NTCH1,NTC0,NTCH2,NTCH1,NTC6,NTC0,
    
     
    
      NTCH2,NTC6,NTCH1,NTCH1,NTCH1,NTC6,NTC5,NTC3,
    
      NTC5,
    
      NTC5,NTC6,NTCH1,NTC7,NTC6,
    
      NTCH3,NTCH3,NTCH3,NTCH3,NTCH2,NTCH2,NTCH1,
    
      NTC6,NTCH3,NTCH2,NTCH1,NTCH2,NTCH1,NTC6,
    
      NTCH1,
    
    };
    
    float durt[]=                   //根据简谱列出各节拍
    
    {
    
    0.5,0.25,0.25,
    
    1.5,0.5,0.5,0.25,0.25,0.5,0.5,
    
    1+1+1,0.5,0.25,0.25,
    
    1.5,0.5,0.5,0.5,0.25,0.25,0.5,
    
    1+1+1,0.5,0.5,
    
    0.5,0.5,0.5,0.25,0.25,0.5,0.25,0.25,0.5,
    
    0.5,0.5,0.5,0.25,0.25,1+1,
    
    0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,
    
    1+1+1,0.5,0.5,
    
     
    
     
    
    1.5,0.5,0.5,0.5,0.5,0.5,
    
    1.5,0.5,1,0.5,0.25,0.25,
    
    1.5,0.5,0.5,0.5,0.5,0.25,0.25,
    
    1+1+1,0.5,0.25,0.25,
    
    1,0.5,0.25,0.25,1,1,
    
    0.5,0.5,0.5,0.5,1,0.25,0.25,0.5,
    
    1+1+1+1,
    
    0.5,0.5,0.5,0.5,1+1,
    
    0.5,0.5,0.5,0.5,1.5,0.25,0.25,
    
    1.5,0.5,1,0.25,0.25,0.25,0.25,1+1+1+1,
    
     
    
    };
    
    int length;
    
    int tonepin=8;   //得用8号接口
    
    void setup()
    
    {
    
      pinMode(tonepin,OUTPUT);
    
      length=sizeof(tune)/sizeof(tune[0]);   //计算长度
    
    }
    
    void loop()
    
    {
    
      for(int x=0;x<length;x++)
    
      {
    
        tone(tonepin,tune[x]);
    
        delay(500*durt[x]);   //这里用来根据节拍调节延时,500这个指数可以自己调整,在该音乐中,我发现用500比较合适。
    
        noTone(tonepin);
    
      }
    
      delay(2000);
    
    }
    
    

    遇见

    在这里插入图片描述

    程序

    
    #define NOTE_C0   -1 
    #define NOTE_CL1 131 
    #define NOTE_CL2 147 
    #define NOTE_CL3 165 
    #define NOTE_CL4 175 
    #define NOTE_CL5 196 
    #define NOTE_CL6 221 
    #define NOTE_CL7 248 
    
    
    #define NOTE_C1 262 
    #define NOTE_C2 294 
    #define NOTE_C3 330 
    #define NOTE_C4 350 
    #define NOTE_C5 393 
    #define NOTE_C6 441 
    #define NOTE_C7 495 
    
    
    #define NOTE_CH1 525
    #define NOTE_CH2 589 
    #define NOTE_CH3 661 
    #define NOTE_CH4 700 
    #define NOTE_CH5 786 
    #define NOTE_CH6 882 
    #define NOTE_CH7 990 
    
    //该部分是定义是把每个音符和频率值对应起来,全部都打上了,后面可以随意编写,直接调用(也可以用到哪个定义哪个)
    
    #define WHOLE 1 
    #define HALF 0.5 
    #define QUARTER 0.25 
    #define EIGHTH 0.25 
    #define SIXTEENTH 0.625  
    //该部分是对应了节拍
    
    int tune[] =  
    {
    NOTE_C0,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C3,
    NOTE_C3,NOTE_C5,NOTE_C2,NOTE_C2,NOTE_C3,NOTE_C2,
    NOTE_C2,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C1,NOTE_CL7,
    NOTE_CL6,NOTE_CL7,NOTE_C1,NOTE_CL7,NOTE_C1,NOTE_C1,
    
    NOTE_C2,NOTE_C3,
    NOTE_C3,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C3,
    NOTE_C3,NOTE_C5,NOTE_C2,NOTE_C2,NOTE_C3,NOTE_C2,
    NOTE_C2,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C1,NOTE_CL7,
    NOTE_CL6,NOTE_CL7,NOTE_C1,NOTE_CL7,NOTE_CL7,NOTE_C1,NOTE_C1,NOTE_C2,
    NOTE_C1,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
    
    
    NOTE_C4,NOTE_C3,NOTE_C2,NOTE_C1,NOTE_C7,NOTE_C5,NOTE_C3,
    NOTE_C3,NOTE_C5,NOTE_C2,NOTE_C2,NOTE_C3,NOTE_C2,
    NOTE_C2,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C1,NOTE_CL7,
    NOTE_CL6,NOTE_CL7,NOTE_C1,NOTE_CL7,NOTE_CL7,NOTE_C1,NOTE_C1,NOTE_C2,
    NOTE_C3,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C3,
    NOTE_C3,NOTE_C5,NOTE_CH2,NOTE_CH2,NOTE_CH1,NOTE_C7,
    NOTE_C7,NOTE_CH6,NOTE_C0,NOTE_C0,NOTE_C1,NOTE_CL7,
    NOTE_CL6,NOTE_CL7,NOTE_C1,NOTE_CL7,NOTE_CL7,NOTE_C1,NOTE_C1,NOTE_C2,
    NOTE_C1,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
    NOTE_CH1,NOTE_C7,NOTE_CH1,NOTE_C7,NOTE_C6,NOTE_C5,NOTE_C6,
    NOTE_C6,NOTE_C5,NOTE_C5,NOTE_C5,NOTE_C1,NOTE_C2,NOTE_C3,
    NOTE_C4,NOTE_C3,NOTE_C4,NOTE_C5,NOTE_C1,NOTE_C2,NOTE_C3,
    NOTE_C3,NOTE_C3,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
    NOTE_C1,NOTE_C7,NOTE_CH1,NOTE_CH3,NOTE_CH1,NOTE_CH2,NOTE_CH3,
    NOTE_CH3,NOTE_C5,NOTE_C5,NOTE_C5,NOTE_C1,NOTE_C2,NOTE_C3,
    NOTE_C4,NOTE_C3,NOTE_C4,NOTE_C3,NOTE_C2,NOTE_C2,NOTE_C1,
    NOTE_CL7,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
    NOTE_CH1,NOTE_C7,NOTE_CH1,NOTE_CH2,NOTE_CH1,NOTE_C7,NOTE_C6,
    NOTE_C6,NOTE_C5,NOTE_C0,NOTE_C0,NOTE_C1,NOTE_C2,NOTE_C3,
    NOTE_C4,NOTE_C3,NOTE_C4,NOTE_C5,NOTE_C1,NOTE_C1,NOTE_C6,
    NOTE_C6,NOTE_C5,NOTE_C5,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
    NOTE_CH1,NOTE_C7,NOTE_CH1,NOTE_CH2,NOTE_CH1,NOTE_CH2,NOTE_CH3,
    NOTE_CH3,NOTE_C5,NOTE_C5,NOTE_C0,NOTE_C1,NOTE_C2,NOTE_C3,NOTE_C4,
    NOTE_C4,NOTE_C3,NOTE_C4,NOTE_C5,NOTE_C1,NOTE_C2,
    NOTE_C2,NOTE_C3,NOTE_C2,NOTE_C1,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C0,
    NOTE_C0,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
    NOTE_CH1,NOTE_C7,NOTE_CH1,NOTE_C7,NOTE_C6,NOTE_C5,NOTE_C4,
    NOTE_C4,NOTE_C5,NOTE_C5,NOTE_C0,NOTE_C0,
    
    };
    
    float duration[]= 
    { 
    1,1,1,0.5+0.5,//听见
    1,0.5+0.5,1,0.5+0.5,//冬天的离
    0.5+0.5,1,1,0.5+0.5,//开  我在
    0.5+0.5,0.5+0.5,0.5+0.5,0.5+0.5,//某年某月醒过来
    1,1,1,0.5+0.5,//我想
    1,0.5+0.5,1,0.5+0.5,//我等我期
    0.5+0.5,1,1,0.5+0.5,//待未来
    0.5+0.5,0.5+0.5,0.5+0.5,0.5+0.5,//却不能理智安
    1,1,0.5+0.5,0.5+0.5,//排
    0.5+0.5,0.5+0.5,1,0.5+0.5,//阴天
    1,0.5+0.5,1,0.5+0.5,//傍晚车窗
    0.5+0.5,1,1,0.5+0.5,//外  未来
    0.5+0.5,0.5+0.5,0.5+0.5,0.5+0.5,//有一个人在等
    1,1,1,0.5+0.5,//待   向左
    1,0.5+0.5,1,0.5+0.5,//向右向前
    0.5+0.5,1,1,0.5+0.5,//看  爱要
    0.5+0.5,0.5+0.5,0.5+0.5,0.5+0.5,//拐几个弯才
    1,1,0.5+0.5,0.5+0.5,//来  我遇见
    1,0.5+0.5,0.5+0.5,0.5+0.5,//谁会有怎样的对
    0.5+0.5,1,0.5+0.5,0.5+0.5,//白  我等的
    1,0.5+0.5,0.5+0.5,0.5+0.5,//人他在多远的未
    0.5+0.5,1,0.5+0.5,0.5+0.5,//来  我听见 
    1,0.5+0.5,0.5+0.5,0.5+0.5,//风来自地铁和人
    0.5+0.5,1,0.5+0.5,0.5+0.5,//海  我排着
    1,0.5+0.5,0.5+0.5,0.5+0.5,//队  拿着爱的号
    0.5+0.5,1,0.5+0.5,0.5+0.5,//码牌  我往前
    1,0.5+0.5,0.5+0.5,0.5+0.5,//飞  飞过一片时间
    0.5+0.5,1,0.5+0.5,0.5+0.5,//海  我们也
    1,0.5+0.5,0.5+0.5,0.5+0.5,//曾在爱情里受伤
    0.5+0.5,1,0.5+0.5,0.5+0.5,//害   我看着
    1,0.5+0.5,0.5+0.5,0.5+0.5,//路  梦的路口 有点
    0.5+0.5,1,0.5+0.5,0.5+0.5,//窄   我遇见
    1,0.5+0.5,0.5+0.5,1,//你 是最美丽的
    0.25+0.25+0.25+0.25,0.5+0.5,1,1,//意外
    1,1,0.5+0.5,0.5+0.5,//终有一
    1,0.5+0.5,0.5+0.5,0.5+0.5,//天我的谜底会揭
    0.5+0.5,1,1,1,//开
    
    };
    //这部分是整首曲子的节拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应)
    
    int length;//这里定义一个变量,后面用来表示共有多少个音符
    
    int tonePin=8;//蜂鸣器的端口,数字模拟都可以
    
    void setup()
    
    {
    
    pinMode(tonePin,OUTPUT);//设置蜂鸣器的pin为输出模式
    
    length = sizeof(tune)/sizeof(tune[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
    
    }
    
    void loop() 
    
    {  
    
      for(int x=0;x<length;x++)//循环音符的次数
      {  
        tone(tonePin,tune[x]);//此函数依次播放tune序列里的数组,即每个 音符
    
     delay(400*duration[x]);//每个音符持续的时间,即节拍duration,是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
    
    noTone(tonePin);//停止当前音符,进入下一音符
    
      } 
      delay(5000);//等待5秒后,循环重新开始
    }
    

    QQ交流群:247620001 验证信息:arduino

    展开全文
  • 写在前面:首先感谢arduino中文社区的tahoroom,开始做这个的时候在他的这个项目里我学了很多东西:1、Arduino的Tone函数关于arduino播放音乐的原理,可以看上面链接的tahoroom的文章,他讲得相当详细。Arduino官方...

    写在前面:

    首先感谢arduino中文社区的tahoroom,开始做这个的时候在他的这个项目里我学了很多东西:

    1、Arduino的Tone函数

    关于arduino播放音乐的原理,可以看上面链接的tahoroom的文章,他讲得相当详细。

    Arduino官方提供的Tone函数用于驱动蜂鸣器或扬声器发出我们需要的声音,通常的应用如下:

    tone(pin,frequency,duration);//控制pin脚上的音频输出

    //pin:arduino的控制脚位;

    //frequency:输出的声音频率,换到音乐上可理解为旋律音高;

    //duration:旋律持续时间,单位ms;

    noTone(pin);//停止播放;

    详细的tone函数定义也可以参考官方介绍:

    2、pitches.h的添加

    为了避免在主程序里添加太多的定义,我们把音高的定义独立出来放在一个头文件pitches.h里,然后在主程序里引用即可,下次需要同样的功能时,也可以直接拷贝调用该头文件。

    代码如下:

    //pitches.h 音高定义

    //pitches.h 定义了不同音符对应的不同频率

    #define NOTE_B0 31 //B0 ····7

    #define NOTE_C1 33 //C1 ···1

    #define NOTE_CS1 35 //C1#

    #define NOTE_D1 37 //D1 ···2

    #define NOTE_DS1 39 //D1#

    #define NOTE_E1 41 //E1 ···3

    #define NOTE_F1 44 //F1 ···4

    #define NOTE_FS1 46 //F1#

    #define NOTE_G1 49 //G1 ···5

    #define NOTE_GS1 52 //G1#

    #define NOTE_A1 55 //A1 ···6

    #define NOTE_AS1 58 //A1#

    #define NOTE_B1 62 //B1 ···7

    #define NOTE_C2 65 //C2 ··1

    #define NOTE_CS2 69 //C2#

    #define NOTE_D2 73 //D2 ··2

    #define NOTE_DS2 78 //D2#

    #define NOTE_E2 82 //E2 ··3

    #define NOTE_F2 87 //F2 ··4

    #define NOTE_FS2 93 //F2#

    #define NOTE_G2 98 //G2 ··5

    #define NOTE_GS2 104 //G2#

    #define NOTE_A2 110 //A2 ··6

    #define NOTE_AS2 117 //A2#

    #define NOTE_B2 123 //B2 ··7

    #define NOTE_C3 131 //C3 ·1

    #define NOTE_CS3 139 //C3#

    #define NOTE_D3 147 //D3 ·2

    #define NOTE_DS3 156 //D3#

    #define NOTE_E3 165 //E3 ·3

    #define NOTE_F3 175 //F3 ·4

    #define NOTE_FS3 185 //F3#

    #define NOTE_G3 196 //G3 ·5

    #define NOTE_GS3 208 //G3#

    #define NOTE_A3 220 //A3 ·6

    #define NOTE_AS3 233 //A3#

    #define NOTE_B3 247 //B3 ·7

    #define NOTE_C4 262 //C4 1(中央C大调)

    #define NOTE_CS4 277 //C4#

    #define NOTE_D4 294 //D4 2

    #define NOTE_DS4 311 //D4#

    #define NOTE_E4 330 //E4 3

    #define NOTE_F4 349 //F4 4

    #define NOTE_FS4 370 //F4#

    #define NOTE_G4 392 //G4 5

    #define NOTE_GS4 415 //G4#

    #define NOTE_A4 440 //A4 6

    #define NOTE_AS4 466 //A4#

    #define NOTE_B4 494 //B4 7

    #define NOTE_C5 523 //C5 1·

    #define NOTE_CS5 554 //C5#

    #define NOTE_D5 587 //D5 2·

    #define NOTE_DS5 622 //D5#

    #define NOTE_E5 659 //E5 3·

    #define NOTE_F5 698 //F5 4·

    #define NOTE_FS5 740 //F5#

    #define NOTE_G5 784 //G5 5·

    #define NOTE_GS5 831 //G5#

    #define NOTE_A5 880 //A5 6·

    #define NOTE_AS5 932 //A5#

    #define NOTE_B5 988 //B5 7·

    #define NOTE_C6 1047 //C6 1··

    #define NOTE_CS6 1109 //C6#

    #define NOTE_D6 1175 //D6 2··

    #define NOTE_DS6 1245 //D6#

    #define NOTE_E6 1319 //E6 3··

    #define NOTE_F6 1397 //F6 4··

    #define NOTE_FS6 1480 //F6#

    #define NOTE_G6 1568 //G6 5··

    #define NOTE_GS6 1661 //G6#

    #define NOTE_A6 1760 //A6 6··

    #define NOTE_AS6 1865 //A6#

    #define NOTE_B6 1976 //B6 7··

    #define NOTE_C7 2093 //C7 1···

    #define NOTE_CS7 2217 //C7#

    #define NOTE_D7 2349 //D7 2···

    #define NOTE_DS7 2489 //D7#

    #define NOTE_E7 2637 //E7 3···

    #define NOTE_F7 2794 //F7 4···

    #define NOTE_FS7 2960 //F7#

    #define NOTE_G7 3136 //G7 5···

    #define NOTE_GS7 3322 //G7#

    #define NOTE_A7 3520 //A7 6···

    #define NOTE_AS7 3729 //A7#

    #define NOTE_B7 3951 //B7 7···

    #define NOTE_C8 4186 //C8 1····

    #define NOTE_CS8 4435 //C8#

    #define NOTE_D8 4699 //D8 2····

    #define NOTE_DS8 4978 //D8#

    上面大量的宏定义,是用宏的名字代替了频率名,对应到下图的键盘的按键上。同时,在上面宏的注释里,我加了相对应的简谱,方面不懂音乐的我们便于编程应用。

    关于创建Arduino的头文件,在Arduino的IDE界面代码框的右上角的向下小三角处点击创建新标签,然后输入自己的头文件名称,记得加上“.h”扩展名。然后输入内容,再保存,便创建好一个头文件了。

    3、arduino扬声器接线

    注意:因为扬声器(或蜂鸣器)驱动电压要求比较小,远远小于5V,所以最好在扬声器上串联一个大于10uf的电解电容,电解电容负极连接喇叭的正极,电容正极连接另外一端。不接电容长时间使用,会烧毁扬声器。或者串联一个100Ω电阻也可以。

    可以再串联一个电位器来调节电流大小,从而控制音量大小。

    大概接线如下图所示:

    4、音乐编程

    在arduino程序里给音乐编程,重要的旋律函数和持续时间函数。

    下面以《两只老虎》为例,编写一个播放《两只老虎》旋律的程序。

    首先是《两只老虎》的简谱:

    代码如下:

    #include “pitches.h” //含有所有旋律音高宏定义的头文件

    void setup(){

    }

    void loop(){

    play();//播放音乐的命令

    delay(300);

    }

    //旋律函数

    int melody[]={

    NOTE_C4, //1

    NOTE_D4, //2

    NOTE_E4, //3

    NOTE_C4, //1

    NOTE_C4, //1

    NOTE_D4, //2

    NOTE_E4, //3

    NOTE_C4, //1

    NOTE_E4, //3

    NOTE_F4, //4

    NOTE_G4, //5

    NOTE_E4, //3

    NOTE_F4, //4

    NOTE_G4, //5

    NOTE_G4, //5

    NOTE_A4, //6

    NOTE_G4, //5

    NOTE_F4, //4

    NOTE_E4, //3

    NOTE_C4, //1

    NOTE_G4, //5

    NOTE_A4, //6

    NOTE_G4, //5

    NOTE_F4, //4

    NOTE_E4, //3

    NOTE_C4, //1

    NOTE_D4, //2

    NOTE_G3, //.5

    NOTE_C4, //1

    0,

    NOTE_D4, //2

    NOTE_G3, //.5

    NOTE_C4, //1

    0,

    };

    //持续时间函数

    int noteDurations[]={

    8,8,8,8,

    8,8,8,8,

    8,8,4,

    8,8,4,

    8,8,8,8,4,4,

    8,8,8,8,4,4,

    4,4,4,4,

    4,4,4,4,

    };

    //播放命令

    void play()

    {

    for(int thisNote = 0;thisNote<29;thisNote++){

    //计算旋律持续时间

    //1秒(1000ms)除以音符类型

    //比如:四分音符:1000/noteDurations[thisNote],

    //八分音符:1000/noteDurations[thisNote].

    int noteDuration = 1000/noteDurations[thisNote];

    tone(8,melody[thisNote], noteDuration);//播放音乐

    //为了区别不同旋律,设置一个最小的间隔时间

    //一般设置为旋律持续时间的130%比较合适

    int pauseBetweenNotes = noteDuration * 1.30;

    delay(pauseBetweenNotes);

    //停止当前旋律播放

    noTone(8);

    }

    }

    //end

    效果如下:https://www.zhihu.com/video/1200743973633089536

    展开全文
  • Arduino 蜂鸣器播放音乐LED灯闪烁

    千次阅读 2019-06-14 18:23:46
    蜂鸣器实现音乐播放: 控制好频率和节拍,就能演奏出好听的音乐。因此,在实验之前要先弄清楚各音调的频率。可参考各音频的频率表。 之后,控制好音符的演奏时间。音符节奏分为一拍、半拍、1/4拍、1/8拍,可规定一拍...

    一、实验所需组件:

    led灯
    三脚蜂鸣器
    面包板
    Arduino开发板
    杜邦线
    开发板

    二、实验原理

    蜂鸣器实现音乐播放:

    控制好频率和节拍,就能演奏出好听的音乐。因此,在实验之前要先弄清楚各音调的频率。可参考各音频的频率表。
    之后,控制好音符的演奏时间。音符节奏分为一拍、半拍、1/4拍、1/8拍,可规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,以此设计。本实验音乐以《欢乐颂》为例。

    led灯闪烁:

    led灯根据音乐频率和节拍进行闪烁。

    三、 实验过程

    组件连接

    接线方式:
    3脚蜂鸣器:
    GND—开发板的GND
    VCC线—5V开发板5v电源
    I/O—06接口

    LED灯:
    LED接入面包板并在对应接口下方接出两条线,
    分别接入面包板的窄条以及开发板的01接口
    接导线到开发板的GND
    连接实例图如下:
    在这里插入图片描述

    连接主机编译器,编译上传代码

    使用arduino编译器
    在这里插入图片描述
    这样,就可以实现Arduino 蜂鸣器播放音乐LED灯闪烁啦!

    实现效果的代码如下:

    #define NTD0 -1
    #define NTD1 294
    #define NTD2 330
    #define NTD3 350
    #define NTD4 393
    #define NTD5 441
    #define NTD6 495
    #define NTD7 556
    
    #define NTDL1 147
    #define NTDL2 165
    #define NTDL3 175
    #define NTDL4 196
    #define NTDL5 221
    #define NTDL6 248
    #define NTDL7 278
    
    #define NTDH1 589
    #define NTDH2 661
    #define NTDH3 700
    #define NTDH4 786
    #define NTDH5 882
    #define NTDH6 990
    #define NTDH7 112
    
    #define WHOLE 1
    #define HALF 0.5
    #define QUARTER 0.25
    #define EIGHTH 0.25
    #define SIXTEENTH 0.625
    //选取音乐《欢乐颂》
    int tune[]=
    {
      NTD3,NTD3,NTD4,NTD5,
      NTD5,NTD4,NTD3,NTD2,
      NTD1,NTD1,NTD2,NTD3,
      NTD3,NTD2,NTD2,
      NTD3,NTD3,NTD4,NTD5,
      NTD5,NTD4,NTD3,NTD2,
      NTD1,NTD1,NTD2,NTD3,
      NTD2,NTD1,NTD1,
      NTD2,NTD2,NTD3,NTD1,
      NTD2,NTD3,NTD4,NTD3,NTD1,
      NTD2,NTD3,NTD4,NTD3,NTD2,
      NTD1,NTD2,NTDL5,NTD0,
      NTD3,NTD3,NTD4,NTD5,
      NTD5,NTD4,NTD3,NTD4,NTD2,
      NTD1,NTD1,NTD2,NTD3,
      NTD2,NTD1,NTD1
    };
    float durt[]=
    {
      1,1,1,1,
      1,1,1,1,
      1,1,1,1,
      1+0.5,0.5,1+1,
      1,1,1,1,
      1,1,1,1,
      1,1,1,1,
      1+0.5,0.5,1+1,
      1,1,1,1,
      1,0.5,0.5,1,1,
      1,0.5,0.5,1,1,
      1,1,1,1,
      1,1,1,1,
      1,1,1,0.5,0.5,
      1,1,1,1,
      1+0.5,0.5,1+1,
    };
    int length;
    int tonepin=6;
    int ledp=1;
    void setup()
    {
      pinMode(tonepin,OUTPUT);
      pinMode(ledp,OUTPUT);
      length=sizeof(tune)/sizeof(tune[0]);
    }
    void loop()
    {
      for(int x=0;x<length;x++)
      {
        tone(tonepin,tune[x]);
        digitalWrite(ledp, HIGH); 
        delay(400*durt[x]);
        digitalWrite(ledp, LOW);
        delay(100*durt[x]);
        noTone(tonepin);
      }
      delay(2000);
    }
    
    
    展开全文
  • Arduino红外遥控无源蜂鸣器播放音乐

    千次阅读 2021-07-03 16:39:29
    Arduino红外遥控无源蜂鸣器播放音乐 蜂鸣器,按驱动形式来分一般分为两类,一种是有源蜂鸣器,另外一种是无源蜂鸣器。有源蜂鸣器上电就会响,可玩性不高,但无源蜂鸣器是一个很有意思的东西,可以通过改变输入的频率...
  • 微信关注“DLGG创客DIY”设为“星标”,重磅干货,第一时间送达。今天来聊聊用arduino控制蜂鸣器播放音乐的方案,当然必须还是老风格,虽然可能不是最佳方案,但一定是简单粗...
  • 使用AT89C51单片机,无源蜂鸣器,以及LED灯...AT89C51单片机提供定时器用于产生特定的具有一定有规律的频率的方波,从而驱动蜂鸣器,使得蜂鸣器发出声响,频率与音乐的音调相对应。同时带有proteus仿真,以备代码调试。
  • 上两次实验做了有源蜂鸣器的按键响声控制和无源蜂鸣器的报警声控制,这次尝试做Mid音乐播放,还好有点乐理知识,吹拉弹类的乐器都会点,最要做好音符对应的频率,节拍对应的间隔时间,就能做Mid音乐了。
  • 使用aduino产生美妙的音乐,让初学者对arduino产生兴趣~!
  • 直接上程序:Arduino 控制蜂鸣器播放《小星星》int speakerPin = 9;int length = 15; // the number of noteschar notes[] = "ccggaagffeeddc "; // a space represents a restint beats[] = { 1, 1, 1, 1, 1, 1, 2,...
  • 之前在网上看到好多关于用单片机+无源蜂鸣器制作音乐的视频,就挺有意思的,自己就在网上买了一个KC-1206的无源电磁蜂鸣器。今天来跟大家分享一下! 蜂鸣器分为两种:无源蜂鸣器和有源蜂鸣器[a)是有源蜂鸣器、b)...
  • Arduino uno控制蜂鸣器播放音乐(以《大鱼》为例)

    万次阅读 多人点赞 2020-04-19 16:09:19
    最近在学用arduino控制传感器,顺带着就玩儿了一下蜂鸣器。按照简谱写出了《大鱼》对应的代码。 大概思路如下: 定义不同音所对应的频率,按照简谱写出音符对应的常量放在一个数组内,写控制节奏的数组 setup函数,...
  • Arduino控制蜂鸣器播放音乐

    千次阅读 2020-12-13 02:02:08
    2, ),中横线就写0 以下就是欢乐颂简谱转换成的代码,上传到Arduino就可以听到蜂鸣器演奏啦 #include "pitches.h" int melody[] = { NOTE_E4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4, ...
  • 一个很好的实例,实现了STM32单片机PWM驱动无源播放音乐,希望对爱好者在播放音乐的路上有所帮助!
  • 此次实现的功能是(音乐是我们当时在禹州的时候扒的乐谱,歌唱祖国),按一下音乐播放,再按一下暂停,再按一下从刚才暂停的位置播放, 需要一个按键,一个蜂鸣器 按键接开发板2口,蜂鸣器接开发板1口 程序还是...
  • #include "Arduino.h" int EXIT0 = 0;.../*************蜂鸣器音乐的**********************/ int note[21][7] = { /*标准频率对照表*/ /*A-G大调降音*/ {221, 248, 278, 294, 330, 371, 416},
  • Arduino(六)——蜂鸣器唱歌

    千次阅读 2021-11-23 21:13:29
    进行这节课需要了解一个函数 ...该函数可以通过硬件连接蜂鸣器或者扬声器来产生不同音调,来完成音乐 2.我们的音乐自然需要音调表,当然,像我这样的小彩笔咋会呢? 所以接下来我来给大家送上一点操作 #d
  • arduino+无源蜂鸣器制作音乐 这是我们小时候看过的动画片《洛洛历险记》的主题曲《诺言》!!!这里我只展示了一部分! 在开始编程之前需要先识读简乐谱,与音符频率对照表相结合! 先大概普及一下乐理知识: ...
  • 蜂鸣器结合Arduino播放《蜗牛和黄鹂鸟》歌曲首先挑好想做的歌曲的简谱。比如我想做《蜗牛和黄鹂鸟》然后对照音阶对应的频率表来写代码 撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:...
  • 蜂鸣器播放音乐 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器...
  • 老湿说,代码不能检测到按键,怎么改 六端口控制蜂鸣器,九端口控制小灯
  • Arduino 蜂鸣器音乐代码转化程序开发

    千次阅读 2021-01-17 13:25:50
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼最近在做利用蜂鸣器播放音乐的实验,其中环节有以下:1.查找需要播放的音乐简谱。2.对照简谱以及Arduino本身自带库里面的音乐实例toneMelody翻译每个音的代码以及时长3....
  • 昨天简单的介绍了一下蜂鸣器硬件和米思齐上如何演奏音乐(一种非常简单的用arduino控制蜂鸣器播放音乐的方案),今天继续在arduino里用c(c++)语言(以后为了方便就简称c语言了)实现这个功能。单开了个专辑,以后把...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 215
精华内容 86
关键字:

arduino蜂鸣器播放音乐