扬声器(speaker)和蜂鸣器(piezo transducer)
piezoelectric(压电感应)
音频:振动的频率
音高(pitch):声音的频率(音频)高低
tone()指令:
tone(输出端口, 频率, 持续时间);
或 tone(输出端口, 频率),若不指定时间,Arduino将持续发声,直到执行noTone()为止。
程序代码:
const byte SP_PIN = 11;
void setup() {
pinMode(SP_PIN, OUTPUT);
}
void loop() {
tone(SP_PIN, 659, 150); //弹出一个E5音高的四分音符
delay(150);
tone(SP_PIN, 659, 150);
delay(150);
tone(SP_PIN, 659, 150);
delay(300);
tone(SP_PIN, 523, 150);
delay(150);
tone(SP_PIN, 659, 150);
delay(150);
tone(SP_PIN, 784, 150);
delay(3000);
}
在上面的程序加入如下:
#define E5 659
#define C5 523
#define G5 784
#define和const都能用一个名称来代表数值
const byte LED_PIN = 13;
#define LED_PIN 13
当定义数组常量时,只能用const。
自然界或乐器所发出的声音,是由多种不同频率的正弦波组成的复合波,而tone()指令仅能输出固定的方波,音质无法媲美乐器,可参考几个扩展模块。
实验说明: 本节将采用红外线传感器当做“琴键”通过感应纸张上的黑白条纹,让Arduino发出对应的音调。
MIDI外设以31.25kbps的速率来发送TTL形式(也就是5V代表高电位)的串行数据。一个MIDI信息通常由3个字节数据构成,分别代表状态(status)、音高(pitch)和强弱(velocity,按下按键时的力量强弱)。MIDI信息的3个字节数据:MIDI的频道号从00001111共16组,音高编号与强弱的数据字节的最高位始终为0,因此有效的数值范围是0127
实验说明: 制作一个MIDI OUT(输出)接口,从Arduino板传输MIDI信息给电脑音源发出音乐。
实验电路: MIDI接口采用5针DIN插座,此元器件的引脚比较不易插入面包板,建议先在它的引脚焊接导线
实验程序: 程序采用SoftwareSerial(软件串口)扩展库,将从中央C的前一个八度音到它的后一个八度音,依序弹奏每一个音符。
#include //
byte note;
SoftwareSerial MIDI(2, 3); //
void midiMsg(byte cmd, byte pitch, byte velocity) {
MIDI.write(cmd); //状态信息,write()指令用于在
MIDI.write(pitch); //音高值
MIDI.write(velocity); //强弱值
}
void setup() {
MIDI.begin(31250); //串口连线要设置成MIDI的传输速率
}
void loop() {
for (note = 48; note < 84; note ++) {
midiMsg(0x90, note, 0x40); //送出“按下琴键”及其他信息。
delay(100);
midiMsg(0x80, note, 0x00); //
delay(1000);
}
}
实验结果: 编译并下载程序之后,将Arduino的MIDI输出接口与电脑的MIDI 转接线的“IN”相连,再打开“虚拟MIDI键盘”软件。
**实验说明:**想必读者一定感到纳闷,既然MIDI接口采用串行联机,那为何我们不直接通过既有的接口,把MIDI信息传给电脑,通过音源软件发声呢?没问题!只要在电脑上安装“串口转MIDI桥接器”软件,让电脑把指定的串口看待成MIDI适配卡就可以了!当然,如果要将Arduino直接和其他MIDI乐器相连
实验软件: