极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 29280|回复: 3

【更好用的单片机】Stduino学习(十八)无源蜂鸣器模块

[复制链接]
发表于 2020-8-30 22:08:06 | 显示全部楼层 |阅读模式
本帖最后由 Stduino 于 2020-8-30 22:13 编辑

关键词:51;stm32;arduino;stduino单片机;stduino UNO&Nano;无源蜂鸣器模块

说明:
我们已经在第十六讲介绍过有源蜂鸣器,因此这里只介绍无源蜂鸣器。

无源蜂鸣器没有震荡源,因此需要通过脉宽调制(PWM)输入特定的方波电压信号来发声。PWM原理可在其他教程中查找,本系列主要介绍传感器。
演奏一首音乐,最重要的每个音的音调(频率)和节拍(时长)。

C调音符对应的音调频率如下图:(每两个音调频率相差  )
音调

音符

音调
        1        1#        2        2#        3        4        4#        5        5#        6        6#        7
C调低音        262        277        294        311        330        349        370        392        415        440        466        494
C调中音        523        554        587        622        659        698        740        784        831        880        932        988
C调高音        1046        1109        1175        1245        1318        1397        1480        1568        1661        1760        1865        1976
我们可以通过tone(pin,frequnce)函数来控制无源蜂鸣器的振动频率,利用delay()来控制节拍,利用noTone(pin)来终止振动。


实验目的:
控制无源蜂鸣器演奏《天空之城》。天空之城是C调,一拍为四分之一音符长度,每一小节为四拍。
黑点在上为高音,在下为低音,没有为中音乐。而每两个竖杠之间为一小节,每一小节共有四个四分之一拍。下面如果画了一条横线,则是四分之一拍的二分之一,即八分之一拍;画了两条横线,则是四分之一的四分之一,即十六分之一拍。音符后面的横线则是前一音符的延续。


器材:

Stduino UNO/Nano;杜邦线;无源蜂鸣器模块

电路连接:

代码展示:


  1. #define C0 (2)

  2. #define C1_LOW  (262)
  3. #define C2_LOW  (294)
  4. #define C3_LOW  (330)
  5. #define C4_LOW  (349)
  6. #define C5_LOW  (392)
  7. #define C6_LOW  (440)
  8. #define C7_LOW  (494)

  9. #define C1      (523)
  10. #define C2      (587)
  11. #define C3      (659)
  12. #define C4      (698)
  13. #define C4S     (740)//C4#
  14. #define C5      (784)
  15. #define C5S     (831)//C5#
  16. #define C6      (880)
  17. #define C7      (988)

  18. #define C1_HIGH (1046)
  19. #define C2_HIGH (1175)
  20. #define C3_HIGH (1318)
  21. #define C4_HIGH (1397)
  22. #define C5_HIGH (1568)
  23. #define C6_HIGH (1760)
  24. #define C7_HIGH (1976)

  25. #define WHOLE (1)
  26. #define HALF (0.5)
  27. #define QUARTER (0.25)
  28. #define EIGHTH (0.125)
  29. #define SIXTEENTH (0.0625)

  30. int tune[]=                 //根据简谱列出各频率
  31. {
  32.     C6,C7,
  33.    
  34.     C1_HIGH,C7,C1_HIGH,C3_HIGH,//
  35.     C7,C3,C3,
  36.     C6,C5,C6,C1_HIGH,
  37.     C5,C0,C3,C3,
  38.     C4,C3,C4,C1_HIGH,
  39.     C3,C0,C1_HIGH,C1_HIGH,C1_HIGH,
  40.     C7,C4S,C4S,C7,
  41.    
  42.     C7,C0,C6,C7,//
  43.     C1_HIGH,C7,C1_HIGH,C3_HIGH,
  44.     C7,C0,C3,C3,
  45.     C6,C5,C6,C1_HIGH,
  46.     C5,C0,C3,
  47.     C4,C1_HIGH,C7,C7,C1_HIGH,
  48.     C2_HIGH,C2_HIGH,C3_HIGH,C1_HIGH,C0,
  49.    
  50.     C1_HIGH,C7,C6,C6,C7,C5S,//
  51.     C6,C0,C1_HIGH,C2_HIGH,
  52.     C3_HIGH,C2_HIGH,C3_HIGH,C5_HIGH,
  53.     C2_HIGH,C0,C5,C5,
  54.     C1_HIGH,C7,C1_HIGH,C3_HIGH,C0,C0,
  55.     C6,C7,C1_HIGH,C7,C2_HIGH,C2_HIGH,
  56.     C1,C5,C5,C0,
  57.    
  58.     C4_HIGH,C3_HIGH,C2_HIGH,C1_HIGH,//
  59.     C3_HIGH,
  60.     C3_HIGH,C0,C3_HIGH,
  61.     C6_HIGH,C5_HIGH,C5_HIGH,
  62.     C3_HIGH,C2_HIGH,C1_HIGH,C0,C1_HIGH,
  63.     C2_HIGH,C1_HIGH,C2_HIGH,C2_HIGH,C5_HIGH,
  64.     C3_HIGH,C0,C3_HIGH,
  65.     C6_HIGH,C5_HIGH,
  66.     C3_HIGH,C2_HIGH,C1_HIGH,C0,C1_HIGH,
  67.     C2_HIGH,C1_HIGH,C2_HIGH,C2_HIGH,C7,

  68.     C6,C0,C6,C7,
  69.    
  70.     C6
  71. };
  72. float durt[]=                   //根据简谱列出各节拍
  73. {
  74.     EIGHTH,EIGHTH,
  75.    
  76.     QUARTER + EIGHTH,EIGHTH,QUARTER,QUARTER,
  77.     QUARTER + QUARTER + QUARTER,EIGHTH,EIGHTH,
  78.     QUARTER + EIGHTH,EIGHTH,QUARTER,QUARTER,
  79.     QUARTER + QUARTER,QUARTER,EIGHTH,EIGHTH,
  80.     QUARTER + EIGHTH,EIGHTH,EIGHTH,QUARTER+EIGHTH,
  81.     QUARTER + QUARTER,QUARTER,EIGHTH,EIGHTH,EIGHTH,
  82.     QUARTER + EIGHTH,EIGHTH,QUARTER,QUARTER,
  83.    
  84.     QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,
  85.     QUARTER+EIGHTH,EIGHTH,QUARTER,QUARTER,
  86.     QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,
  87.     QUARTER+EIGHTH,EIGHTH,QUARTER,QUARTER,
  88.     QUARTER+QUARTER+QUARTER,EIGHTH,EIGHTH,
  89.     QUARTER,EIGHTH,EIGHTH,EIGHTH,QUARTER,
  90.     EIGHTH,EIGHTH,EIGHTH,QUARTER,QUARTER,
  91.    
  92.     QUARTER,EIGHTH,EIGHTH,EIGHTH,QUARTER,QUARTER,
  93.     QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,
  94.     QUARTER+EIGHTH,QUARTER,QUARTER,QUARTER,
  95.     QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,
  96.     EIGHTH,EIGHTH,QUARTER,QUARTER,
  97.     QUARTER+QUARTER,QUARTER,QUARTER,
  98.     EIGHTH,EIGHTH,QUARTER,QUARTER,EIGHTH,EIGHTH,
  99.     QUARTER+EIGHTH,EIGHTH,QUARTER,QUARTER,
  100.    
  101.     QUARTER,QUARTER,QUARTER,QUARTER,
  102.     QUARTER+QUARTER+QUARTER,
  103.     QUARTER+QUARTER,QUARTER,QUARTER,
  104.     QUARTER+QUARTER,QUARTER,QUARTER,
  105.     EIGHTH,EIGHTH,QUARTER,EIGHTH,EIGHTH,
  106.     QUARTER,EIGHTH,EIGHTH,EIGHTH,QUARTER,
  107.     QUARTER+QUARTER,QUARTER,QUARTER,
  108.     QUARTER+QUARTER,QUARTER+QUARTER,
  109.     EIGHTH,EIGHTH,QUARTER+QUARTER,EIGHTH,EIGHTH,
  110.     QUARTER,EIGHTH,EIGHTH,EIGHTH,QUARTER,
  111.     QUARTER+QUARTER,QUARTER,EIGHTH,EIGHTH,
  112.    
  113.     QUARTER+QUARTER+QUARTER
  114.    
  115. };

  116. int Time = 2000;
  117. int BUZZER = A0;

  118. int length;

  119. void setup()
  120. {
  121.   // put your setup code here, to run once:

  122.     length=sizeof(tune)/sizeof(tune[0]);   //计算长度
  123. }

  124. void loop()
  125. {
  126.   // put your main code here, to run repeatedly:
  127.     for(int i=0;i<length;i++)
  128.     {
  129.         if(tune[i]!=0)
  130.         {
  131.             tone(BUZZER,tune[i]);
  132.         }  
  133.         else
  134.         {
  135.             noTone(BUZZER);
  136.         }
  137.         delay(Time*durt[i]); //这里用来乐曲速度。
  138.     }
  139.     delay(2000);
  140. }
复制代码


Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。IDE当前支持的功能有:

    GDB调试
    封装库下载安装
    代码自动补全提示
    中英文模式
    UTF-8\GBK编码格式
    代码快速格式化
    SWD\串口程序下载&调试(已验证)
    DFU程序下载方式(待验证)
    USB HID程序下载方式(待验证)
    maple DFU程序下载方式(待验证)
    maple DFU2程序下载方式(待验证)
    MassStorage程序下载方式(待验证)

更多功能细节请点击图片上水印显示的网址进行了解

已经支持的芯片&板型列表:

    Stduino UNO&Nano
    Nucleo 144 boards
    Nucleo 64 boards
    Nucleo 32 boards
    Discovery boards
    Eval boards
    STM32MP1 series coprocessor boards
    Generic STM32F0 boards
    Generic STM32F1 boards
    Generic STM32F3 boards
    Generic STM32F4 boards
    Generic STM32H7 boards
    Generic STM32L0 boards
    3D printer boards
    LoRa boards
    Electronic Speed Controller boards
    Generic flight controllers
    Garatronics boards
    Midatronics boards

更多功能集成正在进行中~
回复

使用道具 举报

发表于 2021-1-14 16:19:01 | 显示全部楼层
你好,能出一份STM32duino驱动PCA9685的用法吗,研究了很久都搞不懂
回复 支持 反对

使用道具 举报

发表于 2021-10-21 12:11:01 | 显示全部楼层
无源蜂鸣器模块
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 12:16 , Processed in 0.040370 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表