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

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

第 4 步 - 編寫鋼琴項目的代碼
添加應用類
對于這個項目,我們實現(xiàn)了一個通用的App軟件模式來管理所有的外圍設備和主要邏輯。
將一個新的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的外圍設備,在這個項目中,它是一個由 8 個數(shù)字InputPort引腳、板載 LED 和 3 個壓電揚聲器組成的陣列。
完成所有設置后,在 Run 方法中,它調(diào)用Cycle ,這是該項目中的主要方法。
Cycle方法的工作方式是在無限循環(huán)的每次迭代中獲取每個按鈕的狀態(tài),并根據(jù)所有這些輸入引腳的狀態(tài),我們調(diào)用PlayNote()壓電方法,該方法將向具有的按鈕播放相應的音符被按下,如果還有其他按鈕被按下,我們使用另外兩個揚聲器。當按下的按鈕被釋放時,在下一次迭代中,程序?qū)@取該更改,并調(diào)用StopTone()以釋放壓電播放其音符。
在每次迭代結(jié)束時,它還會檢查是否有任何壓電揚聲器在播放以打開或關(guān)閉 Netduino 的板載 LED。
節(jié)目班
最后,創(chuàng)建一個新的App類對象并調(diào)用Run方法。您的代碼應如下所示:
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 中的運行按鈕以查看您的復調(diào)鋼琴!最多按下三個按鈕,聆聽您可以使用三個壓電揚聲器制作的和弦。它應該看起來像下面的 GIF:
查看 Netduino.Foundation!
就您可以使用Netduino.Foundation做的大量令人興奮的事情而言,這個項目只是冰山一角。
- 它帶有一個巨大的外設驅(qū)動程序庫,其中包含市場上最常見的傳感器和外設的驅(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上的立體視覺
- 帶預設歌曲的電子鋼琴鍵盤開源分享
- 全鍵盤模擬鋼琴32位版源代碼及操作 0次下載
- 全鍵盤模擬鋼琴64位版源代碼及操作 0次下載
- 一種復音MIDI鍵盤控制器的設計 35次下載
- Anydesk的鍵盤與熱鍵功能介紹 1282次閱讀
- 基于Raspberry Pi Pico實現(xiàn)的數(shù)字鍵盤設計方案 3158次閱讀
- 單片機鍵盤檢測與應用 5394次閱讀
- 如何設計一個節(jié)約單片機端口資源的鍵盤電路 4339次閱讀
- 采用ispLSI1016芯片實現(xiàn)4×5鍵盤控制器設計 2373次閱讀
- 微雪電子micro:bit鋼琴擴展板簡介 2182次閱讀
- 5款機械鍵盤大推薦 6629次閱讀
- 什么是矩陣鍵盤?4*4鍵盤的原理軟件設計分析 3.9w次閱讀
- 矩陣鍵盤的verilog代碼分享 7184次閱讀
- 如何利用鍵盤控制一個二極管的發(fā)光 3047次閱讀
- 矩陣式鍵盤使用方法 2.5w次閱讀
- 矩陣鍵盤有什么用_矩陣鍵盤有何用途 1.6w次閱讀
- 無線鍵盤工作原理 2.2w次閱讀
- 用EL156構(gòu)建25W單端甲類膽機電路 2.9w次閱讀
- 經(jīng)典案例分享:兩種鍵盤掃描方法比較分析 7662次閱讀
下載排行
本周
- 1人工智能+消費:技術(shù)賦能與芯片驅(qū)動未來
- 15.25 MB | 4次下載 | 免費
- 2?業(yè)電源&模塊電源產(chǎn)品?冊
- 15.40 MB | 1次下載 | 免費
- 379M15 TO-252三端穩(wěn)壓IC規(guī)格書
- 0.86 MB | 次下載 | 免費
- 4MBRD20150CT TO-252肖特基二極管規(guī)格書
- 0.54 MB | 次下載 | 免費
- 5自動鎖螺絲運動控制系統(tǒng)用戶手冊
- 6.65 MB | 次下載 | 5 積分
- 6奧特光耦產(chǎn)品手冊
- 4.83 MB | 次下載 | 免費
- 7SMA系列10MHz~40GHz同軸檢波器
- 559.60 KB | 次下載 | 免費
- 8CD7388CZ:7W×4 四通道音頻功率放大電路技術(shù)手冊
- 0.39 MB | 次下載 | 10 積分
本月
- 1元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 241次下載 | 免費
- 2元宇宙底層硬件系列報告
- 13.42 MB | 184次下載 | 免費
- 32022 年展望報告 – 半導體產(chǎn)業(yè)
- 1.43 MB | 136次下載 | 免費
- 4晶振與濾波器應用電路《電子工程師必備:元器件應用寶典》
- 1.57 MB | 90次下載 | 免費
- 5汽車電子行業(yè)深度解析:智能化與電動化方興未艾
- 6.47 MB | 71次下載 | 免費
- 6中國DPU行業(yè)白皮書
- 23.80 MB | 37次下載 | 免費
- 7晶科鑫代理線-微盟電子2021年度產(chǎn)品目錄選型手冊
- 14.75 MB | 27次下載 | 免費
- 8SJK晶振產(chǎn)品目錄-簡化版-2022
- 13.77 MB | 20次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935134次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191425次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183352次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App






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