理论学习
有源蜂鸣器和无源蜂鸣器的区别
-
1、有无震荡源,有源蜂鸣器内部带震荡源,所以只要一通电就会叫,而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K-5K的方波去驱动它。
-
2、价格不同,有源蜂鸣器要比无源蜂鸣器贵,贵在里面多了震荡源。
-
3、两者其高度不同,有源蜂鸣器高度为9mm,而无源蜂鸣器高度为8mm。
-
4、优点不同,无源蜂鸣器的优点是:便宜,声音频率可控,可以做出多来米发索拉西的效果,在一些特例中,可以和LED复用一个控制口。有源蜂鸣器的优点是:程序控制方便。
注意:这里的“源”不是指电源,而是指震荡源
有源蜂鸣器
两线制
三线制
- 1.VCC 外接3.3V-5V电压(可以直接与5v单片机和3.3v单片机相连)
- 2.GND 外接GND
- 3.I/O 外接单片机IO口
无源蜂鸣器
功能概述
没按下一次按键,蜂鸣器嘀一声。
如果想让有源蜂鸣器声音大一点,可以撕开蜂鸣器上的贴纸。
线路图
如果接入了一个有源蜂鸣器
- 红色表示正,黑色表示负,红色我们接入到3号IO上,黑色接入到地线GND,GND地线也可以接到跟按键一起
- 每按一次按键,我们让led点亮熄灭,同时让蜂鸣器嘀一声
IDE
/*
测试按键控制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);
}
- 先定义3号引脚为BUZZER
- 初始化BUZZER为输出,并且是低电平
- 在led切换的时候输出高电平,并且延时20ms,然后停止鸣叫