資料介紹
描述
這個項目演示了如何構建一個帶有八個按鈕鍵盤和三個壓電揚聲器的鋼琴,這樣你就可以在同時按下三個按鈕時制作和弦,所有的邏輯都將使用Netduino.Foundation庫編寫。
壓電揚聲器(或壓電揚聲器)是一種利用壓電效應產生聲音的揚聲器。最初的機械運動是通過向壓電材料施加電壓產生的,并且這種運動通常使用隔膜和諧振器轉換為可聽聲音。
Netduino.Foundation是一個使用 Netduino 上的 .NET MicroFramework 快速輕松地構建連接事物的平臺。它由 Wilderness Labs 創建,完全開源并由 Netduino 社區維護。
如果您是 Netduino 開發新手,我建議您轉到Netduino 入門項目以正確設置您的開發環境。
第 1 步 - 組裝電路
對于這個項目,連接你的面包板和 Netduino,如 Fritzing 圖中所示:
第 2 步 - 創建一個 Netduino 項目
在 Visual Studio 2015 for Windows 或最新的 Visual Studio for Mac 中創建 Netduino 項目;將項目命名為Piano 。
第 3 步 - 添加 Netduino.Foundation NuGet 包
視窗
右鍵單擊您的Piano項目,然后單擊Manage Nuget Packages 。在瀏覽選項卡中,搜索Netduino.Foundation;它應該是第一個搜索結果。單擊安裝按鈕。
蘋果系統
在解決方案資源管理器中按住 Alt 鍵單擊您的Piano項目,然后單擊添加 => 添加 Nuget 包以打開 NuGet 包窗口。搜索Netduino.Foundation包并單擊Add Package將其添加到您的項目中。
第 4 步 - 編寫鋼琴項目的代碼
添加應用類
對于這個項目,我們實現了一個通用的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();
}
}
}
在這個類中發生的第一件事是調用InitializePeripherals來實例化所有連接到Netduino的外圍設備,在這個項目中,它是一個由 8 個數字InputPort引腳、板載 LED 和 3 個壓電揚聲器組成的陣列。
完成所有設置后,在 Run 方法中,它調用Cycle ,這是該項目中的主要方法。
Cycle方法的工作方式是在無限循環的每次迭代中獲取每個按鈕的狀態,并根據所有這些輸入引腳的狀態,我們調用PlayNote()壓電方法,該方法將向具有的按鈕播放相應的音符被按下,如果還有其他按鈕被按下,我們使用另外兩個揚聲器。當按下的按鈕被釋放時,在下一次迭代中,程序將獲取該更改,并調用StopTone()以釋放壓電播放其音符。
在每次迭代結束時,它還會檢查是否有任何壓電揚聲器在播放以打開或關閉 Netduino 的板載 LED。
節目班
最后,創建一個新的App類對象并調用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 中的運行按鈕以查看您的復調鋼琴!最多按下三個按鈕,聆聽您可以使用三個壓電揚聲器制作的和弦。它應該看起來像下面的 GIF:
查看 Netduino.Foundation!
就您可以使用Netduino.Foundation做的大量令人興奮的事情而言,這個項目只是冰山一角。
- 它帶有一個巨大的外設驅動程序庫,其中包含市場上最常見的傳感器和外設的驅動程序。
- 所有外圍驅動程序都通過內置功能進行了簡化,并由干凈、現代的 API 公開。
- 這個項目得到了一個不斷發展的社區的支持,該社區不斷致力于構建很酷的互聯事物,并且總是樂于幫助新人并討論新項目。
參考
- 構建單手和弦鍵盤
- 迷你電腦鍵盤的構建
- 鋼琴老師:Arduino+LEDs+MIDI鍵盤+MuseScore
- 使用PCB構建宏鍵盤
- 基于Arduino UNO的電子鋼琴鍵盤 0次下載
- 基于Arduino的鋼琴機器人 0次下載
- 用Arduino Uno板控制88個螺線管彈鋼琴 0次下載
- Netduino WiFi鎖開源分享
- 用于姿勢校正的Netduino
- 使用Netduino構建您自己的西蒙游戲
- Netduino上的立體視覺
- 帶預設歌曲的電子鋼琴鍵盤開源分享
- 全鍵盤模擬鋼琴32位版源代碼及操作 0次下載
- 全鍵盤模擬鋼琴64位版源代碼及操作 0次下載
- 一種復音MIDI鍵盤控制器的設計 35次下載
- 鍵盤模組ATE手感測試機:打造舒適鍵盤的關鍵利器 666次閱讀
- Anydesk的鍵盤與熱鍵功能介紹 943次閱讀
- 基于Raspberry Pi Pico實現的數字鍵盤設計方案 2913次閱讀
- 單片機鍵盤檢測與應用 5185次閱讀
- 如何設計一個節約單片機端口資源的鍵盤電路 4087次閱讀
- 采用ispLSI1016芯片實現4×5鍵盤控制器設計 2198次閱讀
- 微雪電子micro:bit鋼琴擴展板簡介 2026次閱讀
- 5款機械鍵盤大推薦 6472次閱讀
- 什么是矩陣鍵盤?4*4鍵盤的原理軟件設計分析 3.8w次閱讀
- 矩陣鍵盤的verilog代碼分享 7068次閱讀
- 如何利用鍵盤控制一個二極管的發光 2954次閱讀
- 矩陣鍵盤有什么用_矩陣鍵盤有何用途 1.6w次閱讀
- 無線鍵盤工作原理 2.2w次閱讀
- 用EL156構建25W單端甲類膽機電路 2.8w次閱讀
- 經典案例分享:兩種鍵盤掃描方法比較分析 7320次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多