<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 編程您的獨(dú)立硬件音效板

          編程您的獨(dú)立硬件音效板

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

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

          本文引用地址:http://www.ex-cimer.com/article/202502/467274.htm

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

           

          1.png

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

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

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

          創(chuàng)建Arduino草圖

          要開始編寫代碼,我們首先需要在Arduino IDE中創(chuàng)建一個(gè)新的草圖。我們將通過在代碼頭中包含兩個(gè)免費(fèi)可用的庫來簡化我們的設(shè)計(jì):

           2.png

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

          定義對象、變量和常量

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

           3.png

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

           4.png

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

          5.png

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

           6.png

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

           7.png

          字符到索引偏移

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

          要將該字符的ASCII編號轉(zhuǎn)換為文件索引范圍內(nèi)的整數(shù),我們需要?jiǎng)?chuàng)建一個(gè)偏移常量。因?yàn)樽帜浮癮”的十進(jìn)制ASCII值為97,我們將使用偏移常量值96:

           8.png

          Setup函數(shù)

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

          9.png

          Loop函數(shù)

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

           10.png

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

           11.png

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

          上傳代碼

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

          添加音效片段

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

          輪到你了

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

          我在這個(gè)項(xiàng)目中的目標(biāo)是帶你走完設(shè)計(jì)一個(gè)完整的嵌入式系統(tǒng)的過程,這個(gè)系統(tǒng)不僅制作起來有趣,而且玩起來也很有趣。如果你構(gòu)建了這個(gè)項(xiàng)目,請?jiān)谠u論中告訴我你選擇了哪些音效片段,以及你是如何擴(kuò)展它的!



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

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();