×

如何连接压电蜂鸣器/扬声器以便在按下按钮时播放铃铛

消耗积分:0 | 格式:zip | 大小:0.27 MB | 2022-11-01

123

分享资料个

描述

专为使用 beta 6.0(2021 年 11 月 4 日发布)而设计的项目。创建于 2022 年 1 月 6 日

在这个项目中,我们将学习如何连接压电蜂鸣器/扬声器,以便在按下按钮时播放铃铛。

如果您没有按钮,该项目应该很容易修改以删除按钮。

Meadow.Foundation是一个在 Meadow 上使用 .NET 快速轻松地构建连接事物的平台。它由Wilderness Labs 创建,完全开源并由 Wilderness Labs 社区维护。

如果您是使用 Meadow 的新手,我建议您通过控制板载 RGB LED 项目来使用 Meadow 入门,以正确设置您的开发环境。

第 1 步 - 组装电路

连接所有组件,如下面的 Fritzing 图中所示:

 

pYYBAGNfLgeAKkHzAAHlmWSaax8490.png
 

 

注意压电扬声器电路上使用的电阻器。这会降低音量。电阻越高,音量越低。

第 2 步 - 创建 Meadow 应用程序项目

在适用于 Windows 或 macOS 的 Visual Studio 2019 或 2022 中创建新的MeadowApplication项目。

第 3 步 - 编写代码

这是从 Meadow F7 Micro 板的旧样本中获取的,并针对最新的基础课程进行了更新。原始项目在这里:https ://github.com/SuavePirate/Meadow-Piezo-JingleBells

类成员和构造函数:

RgbPwmLed onboardLed;
        private IPwmPort pwm;
        PiezoSpeaker speaker;
        PushButton button;

        const string NOTES = "eeeeeeegcdefffffeeeeddedgeeeeeeegcdefffffeeeggfdc ";
        readonly int[] BEATS = { 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
                                 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1};

        const int TEMPO = 300;
        bool playing = false;

        public MeadowApp()
        {
            Initialize();
            PlayNote('c', 50).Wait();
            PlayJingleBells().ConfigureAwait(false);
        }

初始化扬声器、按钮和板载 LED:

void Initialize()
        {
            Console.WriteLine("Initialize hardware...");

            onboardLed = new RgbPwmLed(device: Device,
                redPwmPin: Device.Pins.OnboardLedRed,
                greenPwmPin: Device.Pins.OnboardLedGreen,
                bluePwmPin: Device.Pins.OnboardLedBlue,
                3.3f, 3.3f, 3.3f,
                Meadow.Peripherals.Leds.IRgbLed.CommonType.CommonAnode);

            pwm = Device.CreatePwmPort(Device.Pins.D04, 100, .5f, true);
            speaker = new PiezoSpeaker(pwm);

            button = new PushButton(Device, Device.Pins.D01);

            button.Clicked += (o, e) => { playing = !playing; };
        }

我们使用按钮按下的事件模式,它只是设置一个变量,主歌曲循环查看开始/停止。

您将需要一个功能来播放给定持续时间的音符,我们将使用此功能与音乐同步打开和关闭板载 LED:

private async Task PlayNote(char note, int duration)
        {
            char[] names = { 'c', 'd', 'e', 'f', 'g', 'a', 'b'};
            int[] tones = { 523, 587, 659, 698, 783, 880, 987 };
            Color[] colors = { Color.Red, Color.Green, Color.White, Color.Blue, Color.Yellow, Color.Orange, Color.Purple };
            // play the tone corresponding to the note name
            for (int i = 0; i < names.Length; i++)
            {
                if (names[i] == note)
                {
                    var tone = tones[i];
                    onboardLed.SetColor(colors[i], .25f);
                    onboardLed.IsOn = true;
                    await speaker.PlayTone(tone, duration);
                    onboardLed.IsOn = false;

                    Console.WriteLine($"Playing note {note} tone {tone} for {duration}");
                }
            }
        }

这是播放整首歌曲的功能:

protected async Task PlayJingleBells()
        {
            while (true)
            {
                if (playing)
                {
                    Console.WriteLine("Playing jingle bells!");
                    for (int i = 0; i < NOTES.Length && playing; i++)
                    {
                        if (NOTES[i] == ' ')
                        {
                            await Task.Delay(BEATS[i] * TEMPO); // rest
                        }
                        else
                        {
                            await PlayNote(NOTES[i], BEATS[i] * TEMPO);
                            // pause between notes
                            await Task.Delay(BEATS[i] * TEMPO / 2);
                        }


                    }
                    Console.WriteLine("From the top!");
                }
                else
                {
                    // Slow the infinite loop down or the button interrupt breaks
                    await Task.Delay(TEMPO);
                }
            }
        }

此循环以指定的节拍数播放每个音符并乘以速度。在我们的例子中,300 毫秒是一个节拍。

第 4 步 - 运行项目

单击Visual Studio中的“运行”按钮。它应该像以下视频一样工作:

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !