資料介紹
描述
這個(gè)項(xiàng)目演示了如何構(gòu)建一個(gè)帶有八個(gè)按鈕鍵盤和三個(gè)壓電揚(yáng)聲器的鋼琴,這樣你就可以在同時(shí)按下三個(gè)按鈕時(shí)制作和弦,所有的邏輯都將使用Netduino.Foundation庫(kù)編寫。
壓電揚(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)程序庫(kù),其中包含市場(chǎng)上最常見的傳感器和外設(shè)的驅(qū)動(dòng)程序。
- 所有外圍驅(qū)動(dòng)程序都通過內(nèi)置功能進(jìn)行了簡(jiǎn)化,并由干凈、現(xiàn)代的 API 公開。
- 這個(gè)項(xiàng)目得到了一個(gè)不斷發(fā)展的社區(qū)的支持,該社區(qū)不斷致力于構(gòu)建很酷的互聯(lián)事物,并且總是樂于幫助新人并討論新項(xiàng)目。
參考
- 構(gòu)建單手和弦鍵盤
- 迷你電腦鍵盤的構(gòu)建
- 鋼琴老師:Arduino+LEDs+MIDI鍵盤+MuseScore
- 使用PCB構(gòu)建宏鍵盤
- 基于Arduino UNO的電子鋼琴鍵盤 0次下載
- 基于Arduino的鋼琴機(jī)器人 0次下載
- 用Arduino Uno板控制88個(gè)螺線管彈鋼琴 0次下載
- Netduino WiFi鎖開源分享
- 用于姿勢(shì)校正的Netduino
- 使用Netduino構(gòu)建您自己的西蒙游戲
- Netduino上的立體視覺
- 帶預(yù)設(shè)歌曲的電子鋼琴鍵盤開源分享
- 全鍵盤模擬鋼琴32位版源代碼及操作 0次下載
- 全鍵盤模擬鋼琴64位版源代碼及操作 0次下載
- 一種復(fù)音MIDI鍵盤控制器的設(shè)計(jì) 35次下載
- 鍵盤模組ATE手感測(cè)試機(jī):打造舒適鍵盤的關(guān)鍵利器 666次閱讀
- Anydesk的鍵盤與熱鍵功能介紹 943次閱讀
- 基于Raspberry Pi Pico實(shí)現(xiàn)的數(shù)字鍵盤設(shè)計(jì)方案 2913次閱讀
- 單片機(jī)鍵盤檢測(cè)與應(yīng)用 5185次閱讀
- 如何設(shè)計(jì)一個(gè)節(jié)約單片機(jī)端口資源的鍵盤電路 4087次閱讀
- 采用ispLSI1016芯片實(shí)現(xiàn)4×5鍵盤控制器設(shè)計(jì) 2198次閱讀
- 微雪電子micro:bit鋼琴擴(kuò)展板簡(jiǎn)介 2026次閱讀
- 5款機(jī)械鍵盤大推薦 6472次閱讀
- 什么是矩陣鍵盤?4*4鍵盤的原理軟件設(shè)計(jì)分析 3.8w次閱讀
- 矩陣鍵盤的verilog代碼分享 7068次閱讀
- 如何利用鍵盤控制一個(gè)二極管的發(fā)光 2954次閱讀
- 矩陣鍵盤有什么用_矩陣鍵盤有何用途 1.6w次閱讀
- 無線鍵盤工作原理 2.2w次閱讀
- 用EL156構(gòu)建25W單端甲類膽機(jī)電路 2.8w次閱讀
- 經(jīng)典案例分享:兩種鍵盤掃描方法比較分析 7320次閱讀
下載排行
本周
- 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)論
查看更多