查看: 1494|回复: 0

[评测分享] [Wio Terminal开发板测评]+蜂鸣器的功能测试

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2021-7-13 11:05:36 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 jinglixixi 于 2021-7-13 11:17 编辑

    蜂鸣器可分为无源蜂鸣器和有源蜂鸣器这2类,其中的有源蜂鸣器因其自身具有信号源,故通电即可工作;而无源蜂鸣器则需要外部提供信号源才能工作。
    在开发板上配置的是无源蜂鸣器,因此它可以在外部信号源的控制下产生不同频率的蜂鸣声,甚至可以演奏出MIDI音乐。
    蜂鸣器的电路原理图见图1所示:
                                  
    a.jpg
    图1 蜂鸣器原理图

    1. 蜂鸣声
    在蜂鸣器的输入端,接入不同频率的脉冲信号即可产生蜂鸣声,按照频率与周期呈反比关系的性质,可使用相应的延时函数来产生相应频率的脉冲信号。
    延时值越小,则频率值越高,产生的声音也越尖锐。
    产生蜂鸣声的程序如图2所示,经程序的编译和上传即可通道弱弱的蜂鸣声。

    b.jpg
    图2 程序及上传

    2.MIDI音乐
    通过设置蜂鸣器发声的频率及时长,即可演奏出简单的MIDI音乐。
    在例程中,提供了一个演奏“天上星星亮晶晶,满天都是小星星。”的MIDI示例,为便于理解,在所附的程序上添加了相应的注释,具体的内容如下:
    #define BUZZER_PIN WIO_BUZZER /* sig pin of the buzzer */

    int length = 15;    /* 音调值 */
    char notes[] ="ccggaagffeeddc ";                 // 音调
    int beats[] = { 1, 1, 1, 1,1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };   // 节拍
    int tempo = 300;                               // 速度

    voidsetup() {
        //set buzzer pin as output
        pinMode(BUZZER_PIN,OUTPUT);
    }

    voidloop() {
        for(int i = 0; i < length; i++) {
            if(notes == ' ') {
                delay(beats* tempo);
            } else {
                playNote(notes, beats *tempo);
            }
            delay(tempo / 2);    /* delay between notes */
        }

    }

    //Play tone
    void playTone(int tone, intduration) {
        for (long i = 0; i < duration * 1000L; i+= tone * 2) {
            digitalWrite(BUZZER_PIN, HIGH);
            delayMicroseconds(tone);
            digitalWrite(BUZZER_PIN, LOW);
            delayMicroseconds(tone);
        }
    }

    void playNote(char note, int duration) {
        char names[] = { 'c', 'd', 'e', 'f', 'g','a', 'b', 'C' };
        int tones[] = { 1915, 1700, 1519, 1432,1275, 1136, 1014, 956 };

        // play the tone corresponding to the notename
        for (int i = 0; i < 8; i++) {
            if (names == note) {
                playTone(tones, duration);
            }
        }
    }

    如果感兴趣的话,也可以找到自己喜欢的乐谱,并将其转换成相应的数据来播放。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 10:11 , Processed in 0.121705 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.