使用ARDUINO UNO和无源蜂鸣器实现音乐-《两只老虎》

1、pin输出使用官方的函数tone,可以产生占空比50的方波,频率(单位Hz)可以根据需求设定,很方便。

简谱中的音符和频率有对应的关系,使用宏进行标识,如下所示:

2、根据两只老虎的简谱编写如下的程序:

case 0: 中音,case 1: 高音,case 2: 低音。

void two_tigers(int type)
{
  byte count = 0;
  switch(type)
  {
    case 0:
    {
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, MID_1);
        delay(500);
        tone(BUZZER, MID_2);
        delay(500);
        tone(BUZZER, MID_3);
        delay(500);
        tone(BUZZER, MID_1);
        delay(500);
        
        noTone(BUZZER);
        delay(500);
      }
      
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, MID_3);
        delay(500);
        tone(BUZZER, MID_4);
        delay(500);
        tone(BUZZER, MID_5);
        delay(1000);
      
        noTone(BUZZER);
        delay(500);
      }
    
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, MID_5);
        delay(350);
        tone(BUZZER, MID_6);
        delay(150); 
        tone(BUZZER, MID_5);
        delay(350);
        tone(BUZZER, MID_4);
        delay(150); 
        tone(BUZZER, MID_3);
        delay(500);
        tone(BUZZER, MID_1);
        delay(500);
      
        noTone(BUZZER);
        delay(500);
      }
    
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, MID_1);
        delay(500);
        tone(BUZZER, MID_5);
        delay(500);
        tone(BUZZER, MID_1);
        delay(1000);
      
        noTone(BUZZER);
        delay(500);
      }
      break;
    }  
    case 1:
    {
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, HIG_1);
        delay(500);
        tone(BUZZER, HIG_2);
        delay(500);
        tone(BUZZER, HIG_3);
        delay(500);
        tone(BUZZER, HIG_1);
        delay(500);
        
        noTone(BUZZER);
        delay(500);
      }
      
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, HIG_3);
        delay(500);
        tone(BUZZER, HIG_4);
        delay(500);
        tone(BUZZER, HIG_5);
        delay(1000);
      
        noTone(BUZZER);
        delay(500);
      }
    
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, HIG_5);
        delay(350);
        tone(BUZZER, HIG_6);
        delay(150); 
        tone(BUZZER, HIG_5);
        delay(350);
        tone(BUZZER, HIG_4);
        delay(150); 
        tone(BUZZER, HIG_3);
        delay(500);
        tone(BUZZER, HIG_1);
        delay(500);
      
        noTone(BUZZER);
        delay(500);
      }
    
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, HIG_1);
        delay(500);
        tone(BUZZER, HIG_5);
        delay(500);
        tone(BUZZER, HIG_1);
        delay(1000);
      
        noTone(BUZZER);
        delay(500);
      }
      break; 
    } 
    case 2:
    {
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, LOW_1);
        delay(500);
        tone(BUZZER, LOW_2);
        delay(500);
        tone(BUZZER, LOW_3);
        delay(500);
        tone(BUZZER, LOW_1);
        delay(500);
        
        noTone(BUZZER);
        delay(500);
      }
      
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, LOW_3);
        delay(500);
        tone(BUZZER, LOW_4);
        delay(500);
        tone(BUZZER, LOW_5);
        delay(1000);
      
        noTone(BUZZER);
        delay(500);
      }
    
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, LOW_5);
        delay(350);
        tone(BUZZER, LOW_6);
        delay(150); 
        tone(BUZZER, LOW_5);
        delay(350);
        tone(BUZZER, LOW_4);
        delay(150); 
        tone(BUZZER, LOW_3);
        delay(500);
        tone(BUZZER, LOW_1);
        delay(500);
      
        noTone(BUZZER);
        delay(500);
      }
    
      for (count = 0; count < 2; count++)
      {
        tone(BUZZER, LOW_1);
        delay(500);
        tone(BUZZER, LOW_5);
        delay(500);
        tone(BUZZER, LOW_1);
        delay(1000);
      
        noTone(BUZZER);
        delay(500);
      }
      break;      
    } 
  }
}

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要利用Processing与Arduino实现蜂鸣器播放《两只老虎》,可以按照以下步骤进行: 1. 连接蜂鸣器Arduino。将蜂鸣器的正极连接到Arduino的数字引脚(例如D4),负极连接到GND。 2. 在Arduino IDE中编写代码,使用Tone库来控制蜂鸣器的音频输出。 示例代码: ```arduino #define BUZZER_PIN 4 void setup() { pinMode(BUZZER_PIN, OUTPUT); } void loop() { // 用数字频率来表示音符 int melody[] = {659, 659, 0, 659, 0, 784, 0, 523, 659, 0, 784, 0, 523, 659, 659, 0, 659, 0, 784, 0, 523, 659, 0, 784, 0, 523, 659, 659, 0, 659, 0, 784, 0, 523, 587, 0, 587, 0, 523, 587, 587, 0, 587, 0, 784, 0, 523}; // 持续时间,以毫秒为单位 int noteDuration = 500; for (int i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) { int note = melody[i]; if (note == 0) { noTone(BUZZER_PIN); } else { tone(BUZZER_PIN, note, noteDuration); } delay(noteDuration); } } ``` 这段代码使用数字频率表示音符,并使用`tone()`函数控制蜂鸣器播放对应的音符。在循环中,通过`noTone()`函数停止播放空音符。每个音符的持续时间都是500毫秒。 3. 在Processing中编写代码,使用Serial库向Arduino发送指令,触发蜂鸣器的播放。 示例代码: ```processing import processing.serial.*; Serial arduino; void setup() { size(400, 400); arduino = new Serial(this, Serial.list()[0], 9600); } void draw() { background(255); text("Click to play 'Two Tigers'", 150, 200); } void mouseClicked() { arduino.write('1'); } ``` 这段代码通过Serial库向Arduino发送指令`'1'`,触发蜂鸣器的播放。 4. 将蜂鸣器连接到Arduino,并将Arduino与计算机相连。然后分别上传Arduino和Processing中的代码。 5. 运行Processing程序,单击窗口,即可触发蜂鸣器播放《两只老虎》。 希望这个示例能帮助你实现蜂鸣器播放《两只老虎》。如果有任何问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值