<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 編程您的獨立硬件音效板

編程您的獨立硬件音效板

作者: 時(shí)間:2025-02-25 來(lái)源:EEPW編譯 收藏

在這個(gè)由兩部分組成的系列的第二部分中,我們通過(guò)在A(yíng)rduino IDE中添加必要的代碼并上傳音效片段,將我們的硬件組裝變成一個(gè)功能齊全的音效板。

本文引用地址:http://dyxdggzs.com/article/202502/467274.htm

在本項目的前半部分,我們逆向工程了一個(gè)智能語(yǔ)音模塊,并設計了一個(gè)自定義的按鈕矩陣鍵盤(pán)。然后,我們將這些組件連接到一個(gè)ATmega328微控制器上,創(chuàng )建了如圖1所示的音效板設備。

 

1.png

圖1 放置在3D打印外殼中的All About Circuits硬件音效板

現在,在第二部分中,我們將通過(guò)講解Arduino代碼來(lái)完成這個(gè)項目,這些代碼將使音效板運行。我們還將討論如何將音效片段上傳到其內存中并正確組織它們。

注意:在繼續之前,您需要按照“使用Arduino微控制器制作您自己的硬件音效板”一文中的步驟構建電路。除了組裝說(shuō)明外,該文章還包含了音效板項目的物料清單(BoM)、電路原理圖、CAD文件和STL文件。

創(chuàng )建Arduino草圖

要開(kāi)始編寫(xiě)代碼,我們首先需要在A(yíng)rduino IDE中創(chuàng )建一個(gè)新的草圖。我們將通過(guò)在代碼頭中包含兩個(gè)免費可用的庫來(lái)簡(jiǎn)化我們的設計:

 2.png

DYPlayerArduino.h庫將DY1703A的專(zhuān)有通信協(xié)議實(shí)現為方便易用的C++函數。這使我們無(wú)需手動(dòng)向IC發(fā)送命令。Keypad.h庫幫助我們讀取按鈕矩陣的按鍵。

定義對象、變量和常量

我們的下一步是創(chuàng )建一個(gè)播放器模塊對象:

 3.png

之后,我們將聲明并初始化一個(gè)6行3列的字符矩陣:

 4.png

該矩陣使用18個(gè)連續的字母來(lái)表示我們的18個(gè)按鈕。

5.png

完成后,我們將定義每個(gè)行和列總線(xiàn)連接到微控制器的GPIO引腳:

 6.png

最后,我們使用這些矩陣變量作為參數初始化一個(gè)鍵盤(pán)對象實(shí)例:

 7.png

字符到索引偏移

要訪(fǎng)問(wèn)內存中的文件,我們需要使用其索引值。由于我們有18個(gè)音效片段,索引將由1到18之間的整數值表示。然而,當按下按鈕時(shí),鍵盤(pán)檢測到的并不是文件索引。相反,按鈕的值注冊為我們剛剛定義為字符矩陣元素的小寫(xiě)字母之一。

要將該字符的ASCII編號轉換為文件索引范圍內的整數,我們需要創(chuàng )建一個(gè)偏移常量。因為字母“a”的十進(jìn)制ASCII值為97,我們將使用偏移常量值96:

 8.png

Setup函數

我們的草圖的setup函數初始化了我們創(chuàng )建的播放器對象并調整其音量。在下面的代碼片段中,我將音量設置為20%。

9.png

Loop函數

我們需要包含的最后一段代碼是草圖的loop函數。首先,我們需要聲明一個(gè)變量,該變量將在按下鍵時(shí)保存鍵的字符值。為了掃描按鈕矩陣并確定實(shí)際按下了哪個(gè)按鈕,我們使用keypad庫中的以下get函數:

 10.png

customKey變量現在包含按鈕按下的ASCII字符值。我們從該鍵值中減去ASCII偏移常量以獲得我們的文件索引。然后,我們調用一個(gè)以該文件索引為參數的播放函數,并等待一定時(shí)間讓其播放(我設置為1,000毫秒):

 11.png

這個(gè)過(guò)程使DY1703A從其閃存中獲取具有特定索引的文件,解碼該文件的MP3信號,然后將其發(fā)送到LTK5128的輸入端,由連接到其輸出的揚聲器放大并播放。

上傳代碼

現在我們的代碼已經(jīng)完成,我們可以繼續上傳它。如果您使用的是Arduino開(kāi)發(fā)板,這個(gè)過(guò)程很簡(jiǎn)單。如果您只使用微控制器,請按照Arduino的“從Arduino到面包板上的微控制器”教程中的步驟操作,并使用USB到串行模塊對其進(jìn)行編程。

添加音效片段

互聯(lián)網(wǎng)上有數百萬(wàn)個(gè)音效片段可供選擇。只需選擇您想要的音效片段,下載它們,然后使用設備的USB端口將它們放入音效板的閃存中。最好在將它們加載到W25Q32之前,將音效片段按順序命名(00001.mp3、00002.mp3、00003.mp3,依此類(lèi)推)。

輪到你了

你可以通過(guò)添加額外的音頻文件和按鈕來(lái)擴展這個(gè)電路及其代碼,或者通過(guò)使用額外的揚聲器和更高級的放大器來(lái)增加立體聲支持。你甚至可以考慮添加一個(gè)電位器來(lái)調節揚聲器的音量。當然,通過(guò)使用不同的庫或函數,總有方法可以?xún)?yōu)化按鍵掃描代碼。

我在這個(gè)項目中的目標是帶你走完設計一個(gè)完整的嵌入式系統的過(guò)程,這個(gè)系統不僅制作起來(lái)有趣,而且玩起來(lái)也很有趣。如果你構建了這個(gè)項目,請在評論中告訴我你選擇了哪些音效片段,以及你是如何擴展它的!



關(guān)鍵詞: 獨立硬件音效板

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>