1. Home
  2. Docs
  3. 磁力电子学电路实验套件编程版(实验指南)
  4. 三、电路实验
  5. 3.3 编奏电子音乐

3.3 编奏电子音乐

实验名称: 编奏电子音乐
实验难度: ★★★★☆
实验简述: 使用蜂鸣器开发一个编程音乐盒是一件非常有趣的事情,我们可以通过不同的脉冲信号改变蜂鸣器发声的频率从而控制器发出的声调。以往使用纯代码进行开发时,歌曲的编辑是一项十分抽象的工作,从而要求开发者有良好的空间想象能力。本次实验中,我们将使用Buddy++提供谱曲插件以“可见即所得” 的方式进行创作。
实验过程: 本实验我们以Buddy++提供的蜂鸣器演奏例程为参考,仅需要简单改动代码即可实现功能。拼接电路并连接好数据线,启动Buddy++,点击上方菜单栏右侧的“预设置”按钮,选择对应版型“Arduino Nano w / ATmega328”和当前连接的串口序号。

点击菜单栏中“例子”按钮,选择“Modular” —> “BD_Buzzer” —> “BuzzerPlaying”打开参考例程。

也可以使用Buddy++直接打开“Example-03.ino”源码文件。

同样地在setup()函数中加入以下一行代码:pinMode(5, OUTPUT);

选中tune[]durt[]数组,点击左侧“辅助工具栏”最底下的“扩展工具”,打开“谱曲工具”。

通过“可见即所得”的方法完成谱曲,以下是《小星星》歌曲返利,红色图形是“音调”对应源码中tune[]数组中的内容,黑色图形是“节拍”对应源码中durt[]数组中的内容。

完成谱曲后点击“生成”按钮,新的曲谱数据将会覆盖原来选中的曲谱数据。

确认无误后点击菜单栏中的“烧录”按钮,程序完成编译后将自动烧录到开发板当中,操作无误后程序将开始执行。

实验电路:  
程序代码:Example-03.ino
#include <BD.h>
#include <BD_Tune.h>
#include <BD_Buzzer.h>

BD_Buzzer buzzer;

// 设定乐谱
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,
};

void setup()
{
	buzzer.Init(D9);
	
	// 磁力电子积木案例添加这行    
    pinMode(5, OUTPUT); 
}

void loop()
{
	// play music.
	buzzer.Music(tune, durt, sizeof(tune) / sizeof(tune[0]));
 
	// 延时2秒
	delay(2000);
}

 

图  实验电路实拍