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


    理论学习

    有源蜂鸣器和无源蜂鸣器的区别

    • 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,然后停止鸣叫
  • 相关阅读:
    力扣98. 验证二叉搜索树
    美团面试:说说Netty的零拷贝技术?
    NSS [西湖论剑 2022]real_ez_node
    【Linux】exec函数族及进程控制相关
    STM32智能健康监测系统教程
    【LeetCode:2512. 奖励最顶尖的 K 名学生 | 模拟+哈希表+堆】
    XSS攻击(2), XSS分类, 测试方法, 防御方法, 绕过方法
    计算机网络那些事之 MTU 篇
    【数学建模】“一口价”的战略(博弈模型)
    HTML基础笔记
  • 原文地址:https://blog.csdn.net/Blueeyedboy521/article/details/127114951