用鍵盤和Piezos構(gòu)建Netduino復(fù)音鋼琴
資料介紹
描述
這個(gè)項(xiàng)目演示了如何構(gòu)建一個(gè)帶有八個(gè)按鈕鍵盤和三個(gè)壓電揚(yáng)聲器的鋼琴,這樣你就可以在同時(shí)按下三個(gè)按鈕時(shí)制作和弦,所有的邏輯都將使用Netduino.Foundation庫編寫。
壓電揚(yáng)聲器(或壓電揚(yáng)聲器)是一種利用壓電效應(yīng)產(chǎn)生聲音的揚(yáng)聲器。最初的機(jī)械運(yùn)動(dòng)是通過向壓電材料施加電壓產(chǎn)生的,并且這種運(yùn)動(dòng)通常使用隔膜和諧振器轉(zhuǎn)換為可聽聲音。
Netduino.Foundation是一個(gè)使用 Netduino 上的 .NET MicroFramework 快速輕松地構(gòu)建連接事物的平臺(tái)。它由 Wilderness Labs 創(chuàng)建,完全開源并由 Netduino 社區(qū)維護(hù)。
如果您是 Netduino 開發(fā)新手,我建議您轉(zhuǎn)到Netduino 入門項(xiàng)目以正確設(shè)置您的開發(fā)環(huán)境。
第 1 步 - 組裝電路
對(duì)于這個(gè)項(xiàng)目,連接你的面包板和 Netduino,如 Fritzing 圖中所示:

第 2 步 - 創(chuàng)建一個(gè) Netduino 項(xiàng)目
在 Visual Studio 2015 for Windows 或最新的 Visual Studio for Mac 中創(chuàng)建 Netduino 項(xiàng)目;將項(xiàng)目命名為Piano 。
第 3 步 - 添加 Netduino.Foundation NuGet 包
視窗
右鍵單擊您的Piano項(xiàng)目,然后單擊Manage Nuget Packages 。在瀏覽選項(xiàng)卡中,搜索Netduino.Foundation;它應(yīng)該是第一個(gè)搜索結(jié)果。單擊安裝按鈕。

蘋果系統(tǒng)
在解決方案資源管理器中按住 Alt 鍵單擊您的Piano項(xiàng)目,然后單擊添加 => 添加 Nuget 包以打開 NuGet 包窗口。搜索Netduino.Foundation包并單擊Add Package將其添加到您的項(xiàng)目中。

第 4 步 - 編寫鋼琴項(xiàng)目的代碼
添加應(yīng)用類
對(duì)于這個(gè)項(xiàng)目,我們實(shí)現(xiàn)了一個(gè)通用的App軟件模式來管理所有的外圍設(shè)備和主要邏輯。
將一個(gè)新的App類添加到您的項(xiàng)目中,然后粘貼以下代碼:
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using N = SecretLabs.NETMF.Hardware.Netduino;
using Netduino.Foundation.Audio;
using System.Threading;
using Netduino.Foundation.LEDs;
namespace Piano
{
public class App
{
Led onboardLed;
PiezoSpeaker[] speakers = new PiezoSpeaker[3];
bool[] isSpeakerPlaying = new bool[3];
InputPort[] pianoKeys = new InputPort[8];
float[] notes = new float[] { 261.6f, 293.7f, 329.6f, 349.2f, 392.0f, 440.0f, 493.9f, 523.3f };
//C4 , D4 , E4 , F4 , G4 , A4 , B4 , C5
public App()
{
InitializePeripherals();
}
private void InitializePeripherals()
{
pianoKeys[0] = new InputPort(N.Pins.GPIO_PIN_D7, true, Port.ResistorMode.PullUp);
pianoKeys[1] = new InputPort(N.Pins.GPIO_PIN_D6, true, Port.ResistorMode.PullUp);
pianoKeys[2] = new InputPort(N.Pins.GPIO_PIN_D5, true, Port.ResistorMode.PullUp);
pianoKeys[3] = new InputPort(N.Pins.GPIO_PIN_D4, true, Port.ResistorMode.PullUp);
pianoKeys[4] = new InputPort(N.Pins.GPIO_PIN_D3, true, Port.ResistorMode.PullUp);
pianoKeys[5] = new InputPort(N.Pins.GPIO_PIN_D2, true, Port.ResistorMode.PullUp);
pianoKeys[6] = new InputPort(N.Pins.GPIO_PIN_D1, true, Port.ResistorMode.PullUp);
pianoKeys[7] = new InputPort(N.Pins.GPIO_PIN_D0, true, Port.ResistorMode.PullUp);
speakers[0] = new PiezoSpeaker(Cpu.PWMChannel.PWM_2);
speakers[1] = new PiezoSpeaker(Cpu.PWMChannel.PWM_3);
speakers[2] = new PiezoSpeaker(Cpu.PWMChannel.PWM_5);
onboardLed = new Led(N.Pins.ONBOARD_LED);
isSpeakerPlaying[0] = isSpeakerPlaying[1] = isSpeakerPlaying[2] = false;
}
protected void Cycle()
{
Thread thread = new Thread(() =>
{
bool[] lastState = new bool[8];
int speakersPlaying = 0;
while (true)
{
Thread.Sleep(50);
bool[] currentState = new bool[8];
currentState[0] = pianoKeys[0].Read();
currentState[1] = pianoKeys[1].Read();
currentState[2] = pianoKeys[2].Read();
currentState[3] = pianoKeys[3].Read();
currentState[4] = pianoKeys[4].Read();
currentState[5] = pianoKeys[5].Read();
currentState[6] = pianoKeys[6].Read();
currentState[7] = pianoKeys[7].Read();
for (int i = 0; i < 8; i++)
{
if (lastState[i] != currentState[i])
{
if (!currentState[i] && speakersPlaying < 3)
{
speakers[speakersPlaying].PlayTone(notes[i]);
speakersPlaying++;
}
else if (speakersPlaying > 0)
{
speakers[speakersPlaying - 1].StopTone();
speakersPlaying--;
}
onboardLed.IsOn = (speakersPlaying > 0);
}
}
for (int i = 0; i < 8; i++)
lastState[i] = currentState[i];
}
});
thread.Start();
}
public void Run()
{
Debug.Print("Welcome to Piano");
Cycle();
}
}
}
在這個(gè)類中發(fā)生的第一件事是調(diào)用InitializePeripherals來實(shí)例化所有連接到Netduino的外圍設(shè)備,在這個(gè)項(xiàng)目中,它是一個(gè)由 8 個(gè)數(shù)字InputPort引腳、板載 LED 和 3 個(gè)壓電揚(yáng)聲器組成的陣列。
完成所有設(shè)置后,在 Run 方法中,它調(diào)用Cycle ,這是該項(xiàng)目中的主要方法。
Cycle方法的工作方式是在無限循環(huán)的每次迭代中獲取每個(gè)按鈕的狀態(tài),并根據(jù)所有這些輸入引腳的狀態(tài),我們調(diào)用PlayNote()壓電方法,該方法將向具有的按鈕播放相應(yīng)的音符被按下,如果還有其他按鈕被按下,我們使用另外兩個(gè)揚(yáng)聲器。當(dāng)按下的按鈕被釋放時(shí),在下一次迭代中,程序?qū)@取該更改,并調(diào)用StopTone()以釋放壓電播放其音符。
在每次迭代結(jié)束時(shí),它還會(huì)檢查是否有任何壓電揚(yáng)聲器在播放以打開或關(guān)閉 Netduino 的板載 LED。
節(jié)目班
最后,創(chuàng)建一個(gè)新的App類對(duì)象并調(diào)用Run方法。您的代碼應(yīng)如下所示:
using System.Threading;
namespace Piano
{
public class Program
{
public static void Main()
{
var app = new App();
app.Run();
Thread.Sleep(Timeout.Infinite);
}
}
}
第 5 步 - 運(yùn)行項(xiàng)目
單擊 Visual Studio 中的運(yùn)行按鈕以查看您的復(fù)調(diào)鋼琴!最多按下三個(gè)按鈕,聆聽您可以使用三個(gè)壓電揚(yáng)聲器制作的和弦。它應(yīng)該看起來像下面的 GIF:
查看 Netduino.Foundation!
就您可以使用Netduino.Foundation做的大量令人興奮的事情而言,這個(gè)項(xiàng)目只是冰山一角。
- 它帶有一個(gè)巨大的外設(shè)驅(qū)動(dòng)程序庫,其中包含市場(chǎng)上最常見的傳感器和外設(shè)的驅(qū)動(dòng)程序。
- 所有外圍驅(qū)動(dòng)程序都通過內(nèi)置功能進(jìn)行了簡化,并由干凈、現(xiàn)代的 API 公開。
- 這個(gè)項(xiàng)目得到了一個(gè)不斷發(fā)展的社區(qū)的支持,該社區(qū)不斷致力于構(gòu)建很酷的互聯(lián)事物,并且總是樂于幫助新人并討論新項(xiàng)目。
參考
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
- 构建单手和弦键盘0次下载
- 迷你电脑键盘的构建0次下载
- 钢琴老师:Arduino+LEDs+MIDI键盘+MuseScore8次下载
- 使用PCB构建宏键盘0次下载
- 基于Arduino UNO的电子钢琴键盘0次下载
- 基于Arduino的钢琴机器人3次下载
- 用Arduino Uno板控制88个螺线管弹钢琴1次下载
- Netduino WiFi锁开源分享0次下载
- 用于姿势校正的Netduino0次下载
- 使用Netduino构建您自己的西蒙游戏0次下载
- Netduino上的立体视觉0次下载
- 带预设歌曲的电子钢琴键盘开源分享0次下载
- 全键盘模拟钢琴32位版源代码及操作0次下载
- 全键盘模拟钢琴64位版源代码及操作0次下载
- 一种复音MIDI键盘控制器的设计36次下载
- HarmonyOS应用自定义键盘解决方案862次阅读
- 磁轴键盘霍尔开关MST-MH481霍尔磁轴机械键盘1488次阅读
- 键盘模组ATE手感测试机:打造舒适键盘的关键利器1365次阅读
- 基于单片机的独立键盘与矩阵键盘检测2994次阅读
- Anydesk的键盘与热键功能介绍1923次阅读
- 基于Raspberry Pi Pico实现的数字键盘设计方案3774次阅读
- 如何设计一个节约单片机端口资源的键盘电路4736次阅读
- 采用ispLSI1016芯片实现4×5键盘控制器设计2665次阅读
- 微雪电子micro:bit钢琴扩展板简介2547次阅读
- 什么是矩阵键盘?4*4键盘的原理软件设计分析40268次阅读
- 矩阵键盘的verilog代码分享7352次阅读
- 如何利用键盘控制一个二极管的发光3183次阅读
- 矩阵键盘有什么用_矩阵键盘有何用途17350次阅读
- 用EL156构建25W单端甲类胆机电路31177次阅读
- 经典案例分享:两种键盘扫描方法比较分析7898次阅读
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論