ArduinoUNO实战-第五章-有源蜂鸣器实验

目录
理论学习
有源蜂鸣器和无源蜂鸣器的区别
- 有无震荡源:有源蜂鸣器内部带震荡源,所以只要一通电就会叫,而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K-5K的方波去驱动它。
- 价格不同:有源蜂鸣器要比无源蜂鸣器贵,贵在里面多了震荡源。
- 高度不同:有源蜂鸣器和无源蜂鸣器的高度不同。
- 声音大小:如果要让有源蜂鸣器声音大一点,可以撕开蜂鸣器上的贴纸。
有源蜂鸣器的线路图
如果接入了一个有源蜂鸣器:
- 红色表示正,黑色表示负
- 红色我们接入到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,然后停止鸣叫