1、有无震荡源,有源蜂鸣器内部带震荡源,所以只要一通电就会叫,而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K-5K的方波去驱动它。
2、价格不同,有源蜂鸣器要比无源蜂鸣器贵,贵在里面多了震荡源。
3、两者其高度不同,有源蜂鸣器高度为9mm,而无源蜂鸣器高度为8mm。
4、优点不同,无源蜂鸣器的优点是:便宜,声音频率可控,可以做出多来米发索拉西的效果,在一些特例中,可以和LED复用一个控制口。有源蜂鸣器的优点是:程序控制方便。
注意:这里的“源”不是指电源,而是指震荡源


没按下一次按键,蜂鸣器嘀一声。
如果想让有源蜂鸣器声音大一点,可以撕开蜂鸣器上的贴纸。
如果接入了一个有源蜂鸣器


/*
测试按键控制led
*/
// 这就是定义的带汉字的专用文件,可以写多个数组哦,这里仅举例
#include "i18n.c"
// led的输出13号引脚
#define LED 13
// 按键输入上拉2号引脚
#define KEY 2
// 定义一个蜂鸣器3号引脚
#define BUZZER 3
// 判断按键按下的标记位,按下时为1
int KEY_NUM = 0;
// the setup function runs once when you press reset or power the board
void setup() {
// 打开串口
Serial.begin(9600);
// LED设置为输出
pinMode(LED, OUTPUT);
// KEY设置为输入
//pinMode(KEY, INPUT);
// 设置KEY使能上拉电阻
pinMode(KEY, INPUT_PULLUP);
// 蜂鸣器BUZZER设置为输出
pinMode(BUZZER, OUTPUT);
// 初始化蜂鸣器不响
digitalWrite(BUZZER, LOW);
}
// the loop function runs over and over again forever
void loop() {
ScanKey();
if(KEY_NUM == 1)
{
Serial.println(cn[0]);
// 让LED电平翻转
digitalWrite(LED, !digitalRead(LED));
// 让蜂鸣器响
BuzzerDi();
}
}
void ScanKey()
{
// 重置标记位
KEY_NUM = 0;
// 判断按键是否按下,是否输入低电平
if(digitalRead(KEY) == LOW)
{
// 为了电波抖动,延时20ms
delay(20);
// 重新读取
if(digitalRead(KEY) == LOW)
{
// 说明按键按下
KEY_NUM = 1;
// 避免led一直在闪,所以循环等待按键松开
while(digitalRead(KEY) == LOW);
}
}
}
void BuzzerDi()
{
// 让蜂鸣器响
digitalWrite(BUZZER, HIGH);
// 延时20ms之后停止响
delay(20);
digitalWrite(BUZZER, LOW);
}