Arduino使用蜂鸣器

我买的37款传感器套件中包含一个有源蜂鸣器和一个无源蜂鸣器,关于这两者的区别可以参考文献1。根据参考文献中的介绍,无源蜂鸣器没有振荡源,通过接收外部的方波发声,而有源蜂鸣器自带振荡源,只要接通电源就能发声,但实际测试中我把Arduino的5V和GND接到有源蜂鸣器的正负极时并没有发声,有可能是卖给我的有源蜂鸣器有问题。本文仅介绍无源蜂鸣器。
无源蜂鸣器的实物图如下所示,它有三个引脚,上面是接地引脚,中间是vcc引脚,下面是信号输入引脚。
Arduino使用蜂鸣器 - gc_2299 - gc_2299的博客
  采用卖家给的代码和参考文献中分别进行测试,测试代码如下:
卖家给的代码,这段代码就是发出两种不同频率的声音:

int buzzer = 9; //设置控制蜂鸣器的数字IO脚
void setup()
{
pinMode(buzzer, OUTPUT); //设置数字IO脚模式,OUTPUT为辒出
}
void loop()
{
unsigned char i, j; //定义变量
while (1)
{
for (i = 0; i < 80; i++) //辒出一个频率的声音
{
digitalWrite(buzzer, HIGH); //发声音
delay(1);//延时1ms
digitalWrite(buzzer, LOW); //不发声音
delay(1);//延时ms
}
for (i = 0; i < 100; i++) //辒出另一个频率癿声音
{
digitalWrite(buzzer, HIGH); //发声音
delay(2);//延时2ms
digitalWrite(buzzer, LOW); //不发声音
delay(2);//延时2ms
}
}
}

参考文献中的代码是给的一段音乐的节奏,代码如下:

int speakerPin = 9;

int length = 15; // the number of notes
char notes[] = "ccggaagffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}

void playNote(char note, int duration) {
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

// play the tone corresponding to the note name
for (int i = 0; i < 8; i++) {
if (names[i] == note) {
playTone(tones[i], duration);
}
}
}

void setup() {
pinMode(speakerPin, OUTPUT);
}

void loop() {
for (int i = 0; i < length; i++) {
if (notes[i] == ' ') {
delay(beats[i] * tempo); // rest
} else {
playNote(notes[i], beats[i] * tempo);
}

// pause between notes
delay(tempo / 2);
}
}

实物连接图如下:
Arduino使用蜂鸣器 - gc_2299 - gc_2299的博客
最后是一个演示视频:



参考文献:
[1]http://www.geek-workshop.com/forum.php?mod=viewthread&tid=71
[2]http://www.arduino.cn/thread-1513-1-1.html
[3]http://www.geek-workshop.com/thread-288-1-1.html
[4]http://scout-jj.blogspot.jp/2014/09/arduino.html
[5]http://www.itdadao.com/articles/c15a303471p0.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值