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

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

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

第 4 步 - 編寫鋼琴項目的代碼
添加應(yīng)用類
對于這個項目,我們實現(xiàn)了一個通用的App軟件模式來管理所有的外圍設(shè)備和主要邏輯。
將一個新的App類添加到您的項目中,然后粘貼以下代碼:
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();
}
}
}
在這個類中發(fā)生的第一件事是調(diào)用InitializePeripherals來實例化所有連接到Netduino的外圍設(shè)備,在這個項目中,它是一個由 8 個數(shù)字InputPort引腳、板載 LED 和 3 個壓電揚聲器組成的陣列。
完成所有設(shè)置后,在 Run 方法中,它調(diào)用Cycle ,這是該項目中的主要方法。
Cycle方法的工作方式是在無限循環(huán)的每次迭代中獲取每個按鈕的狀態(tài),并根據(jù)所有這些輸入引腳的狀態(tài),我們調(diào)用PlayNote()壓電方法,該方法將向具有的按鈕播放相應(yīng)的音符被按下,如果還有其他按鈕被按下,我們使用另外兩個揚聲器。當(dāng)按下的按鈕被釋放時,在下一次迭代中,程序?qū)@取該更改,并調(diào)用StopTone()以釋放壓電播放其音符。
在每次迭代結(jié)束時,它還會檢查是否有任何壓電揚聲器在播放以打開或關(guān)閉 Netduino 的板載 LED。
節(jié)目班
最后,創(chuàng)建一個新的App類對象并調(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 步 - 運行項目
單擊 Visual Studio 中的運行按鈕以查看您的復(fù)調(diào)鋼琴!最多按下三個按鈕,聆聽您可以使用三個壓電揚聲器制作的和弦。它應(yīng)該看起來像下面的 GIF:
查看 Netduino.Foundation!
就您可以使用Netduino.Foundation做的大量令人興奮的事情而言,這個項目只是冰山一角。
- 它帶有一個巨大的外設(shè)驅(qū)動程序庫,其中包含市場上最常見的傳感器和外設(shè)的驅(qū)動程序。
- 所有外圍驅(qū)動程序都通過內(nèi)置功能進行了簡化,并由干凈、現(xiàn)代的 API 公開。
- 這個項目得到了一個不斷發(fā)展的社區(qū)的支持,該社區(qū)不斷致力于構(gòu)建很酷的互聯(lián)事物,并且總是樂于幫助新人并討論新項目。
參考
- 構(gòu)建單手和弦鍵盤
- 迷你電腦鍵盤的構(gòu)建
- 鋼琴老師:Arduino+LEDs+MIDI鍵盤+MuseScore
- 使用PCB構(gòu)建宏鍵盤
- 基于Arduino UNO的電子鋼琴鍵盤 0次下載
- 基于Arduino的鋼琴機器人 0次下載
- 用Arduino Uno板控制88個螺線管彈鋼琴 0次下載
- Netduino WiFi鎖開源分享
- 用于姿勢校正的Netduino
- 使用Netduino構(gòu)建您自己的西蒙游戲
- Netduino上的立體視覺
- 帶預(yù)設(shè)歌曲的電子鋼琴鍵盤開源分享
- 全鍵盤模擬鋼琴32位版源代碼及操作 0次下載
- 全鍵盤模擬鋼琴64位版源代碼及操作 0次下載
- 一種復(fù)音MIDI鍵盤控制器的設(shè)計 35次下載
- Anydesk的鍵盤與熱鍵功能介紹 1282次閱讀
- 基于Raspberry Pi Pico實現(xiàn)的數(shù)字鍵盤設(shè)計方案 3158次閱讀
- 單片機鍵盤檢測與應(yīng)用 5394次閱讀
- 如何設(shè)計一個節(jié)約單片機端口資源的鍵盤電路 4339次閱讀
- 采用ispLSI1016芯片實現(xiàn)4×5鍵盤控制器設(shè)計 2373次閱讀
- 微雪電子micro:bit鋼琴擴展板簡介 2182次閱讀
- 5款機械鍵盤大推薦 6629次閱讀
- 什么是矩陣鍵盤?4*4鍵盤的原理軟件設(shè)計分析 3.9w次閱讀
- 矩陣鍵盤的verilog代碼分享 7184次閱讀
- 如何利用鍵盤控制一個二極管的發(fā)光 3047次閱讀
- 矩陣式鍵盤使用方法 2.5w次閱讀
- 矩陣鍵盤有什么用_矩陣鍵盤有何用途 1.6w次閱讀
- 無線鍵盤工作原理 2.2w次閱讀
- 用EL156構(gòu)建25W單端甲類膽機電路 2.9w次閱讀
- 經(jīng)典案例分享:兩種鍵盤掃描方法比較分析 7662次閱讀
下載排行
本周
- 1PFC電路與BOOST電路設(shè)計實例分享
- 1.83 MB | 12次下載 | 4 積分
- 2世平基于靈動微 SPIN560C 的低壓無刷電機應(yīng)用方案
- 10.93 MB | 11次下載 | 免費
- 3電源測試報告-基于 國民技術(shù) N32L406 和杰華特 JW3376+3330 的 BMS 方案
- 6.47 MB | 11次下載 | 免費
- 4PWM控制器的控制方法
- 0.39 MB | 3次下載 | 4 積分
- 5電流檢測芯片F(xiàn)P135應(yīng)用說明
- 1.24 MB | 3次下載 | 免費
- 6全面解讀被動式與主動式PFC電路
- 1.27 MB | 1次下載 | 4 積分
- 7HC88L051F4低功耗芯片規(guī)格書
- 4.76 MB | 1次下載 | 免費
- 8CIU32D655x5數(shù)據(jù)手冊
- 2.14 MB | 1次下載 | 免費
本月
- 1常用電子元器件使用手冊
- 2.40 MB | 52次下載 | 免費
- 2高功率密度碳化硅MOSFET軟開關(guān)三相逆變器損耗分析
- 2.27 MB | 33次下載 | 10 積分
- 3PFC電路與BOOST電路設(shè)計實例分享
- 1.83 MB | 12次下載 | 4 積分
- 4世平基于靈動微 SPIN560C 的低壓無刷電機應(yīng)用方案
- 10.93 MB | 11次下載 | 免費
- 5電源測試報告-基于 國民技術(shù) N32L406 和杰華特 JW3376+3330 的 BMS 方案
- 6.47 MB | 11次下載 | 免費
- 6USB拓展塢PCB圖資料
- 0.57 MB | 11次下載 | 免費
- 7MS1826 HDMI 多功能視頻處理器數(shù)據(jù)手冊
- 4.51 MB | 9次下載 | 免費
- 8HAL9303線性霍爾效應(yīng)傳感器技術(shù)手冊
- 0.70 MB | 9次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935134次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191424次下載 | 10 積分
- 5十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183352次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81600次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73818次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App






創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論