編程您的獨(dú)立硬件音效板
在這個(gè)由兩部分組成的系列的第二部分中,我們通過(guò)在Arduino IDE中添加必要的代碼并上傳音效片段,將我們的硬件組裝變成一個(gè)功能齊全的音效板。
本文引用地址:http://www.biyoush.com/article/202502/467274.htm在本項(xiàng)目的前半部分,我們逆向工程了一個(gè)智能語(yǔ)音模塊,并設(shè)計(jì)了一個(gè)自定義的按鈕矩陣鍵盤。然后,我們將這些組件連接到一個(gè)ATmega328微控制器上,創(chuàng)建了如圖1所示的音效板設(shè)備。
圖1 放置在3D打印外殼中的All About Circuits硬件音效板
現(xiàn)在,在第二部分中,我們將通過(guò)講解Arduino代碼來(lái)完成這個(gè)項(xiàng)目,這些代碼將使音效板運(yùn)行。我們還將討論如何將音效片段上傳到其內(nèi)存中并正確組織它們。
注意:在繼續(xù)之前,您需要按照“使用Arduino微控制器制作您自己的硬件音效板”一文中的步驟構(gòu)建電路。除了組裝說(shuō)明外,該文章還包含了音效板項(xiàng)目的物料清單(BoM)、電路原理圖、CAD文件和STL文件。
創(chuàng)建Arduino草圖
要開始編寫代碼,我們首先需要在Arduino IDE中創(chuàng)建一個(gè)新的草圖。我們將通過(guò)在代碼頭中包含兩個(gè)免費(fèi)可用的庫(kù)來(lái)簡(jiǎn)化我們的設(shè)計(jì):
DYPlayerArduino.h庫(kù)將DY1703A的專有通信協(xié)議實(shí)現(xiàn)為方便易用的C++函數(shù)。這使我們無(wú)需手動(dòng)向IC發(fā)送命令。Keypad.h庫(kù)幫助我們讀取按鈕矩陣的按鍵。
定義對(duì)象、變量和常量
我們的下一步是創(chuàng)建一個(gè)播放器模塊對(duì)象:
之后,我們將聲明并初始化一個(gè)6行3列的字符矩陣:
該矩陣使用18個(gè)連續(xù)的字母來(lái)表示我們的18個(gè)按鈕。
完成后,我們將定義每個(gè)行和列總線連接到微控制器的GPIO引腳:
最后,我們使用這些矩陣變量作為參數(shù)初始化一個(gè)鍵盤對(duì)象實(shí)例:
字符到索引偏移
要訪問(wèn)內(nèi)存中的文件,我們需要使用其索引值。由于我們有18個(gè)音效片段,索引將由1到18之間的整數(shù)值表示。然而,當(dāng)按下按鈕時(shí),鍵盤檢測(cè)到的并不是文件索引。相反,按鈕的值注冊(cè)為我們剛剛定義為字符矩陣元素的小寫字母之一。
要將該字符的ASCII編號(hào)轉(zhuǎn)換為文件索引范圍內(nèi)的整數(shù),我們需要?jiǎng)?chuàng)建一個(gè)偏移常量。因?yàn)樽帜浮癮”的十進(jìn)制ASCII值為97,我們將使用偏移常量值96:
Setup函數(shù)
我們的草圖的setup函數(shù)初始化了我們創(chuàng)建的播放器對(duì)象并調(diào)整其音量。在下面的代碼片段中,我將音量設(shè)置為20%。
Loop函數(shù)
我們需要包含的最后一段代碼是草圖的loop函數(shù)。首先,我們需要聲明一個(gè)變量,該變量將在按下鍵時(shí)保存鍵的字符值。為了掃描按鈕矩陣并確定實(shí)際按下了哪個(gè)按鈕,我們使用keypad庫(kù)中的以下get函數(shù):
customKey變量現(xiàn)在包含按鈕按下的ASCII字符值。我們從該鍵值中減去ASCII偏移常量以獲得我們的文件索引。然后,我們調(diào)用一個(gè)以該文件索引為參數(shù)的播放函數(shù),并等待一定時(shí)間讓其播放(我設(shè)置為1,000毫秒):
這個(gè)過(guò)程使DY1703A從其閃存中獲取具有特定索引的文件,解碼該文件的MP3信號(hào),然后將其發(fā)送到LTK5128的輸入端,由連接到其輸出的揚(yáng)聲器放大并播放。
上傳代碼
現(xiàn)在我們的代碼已經(jīng)完成,我們可以繼續(xù)上傳它。如果您使用的是Arduino開發(fā)板,這個(gè)過(guò)程很簡(jiǎn)單。如果您只使用微控制器,請(qǐng)按照Arduino的“從Arduino到面包板上的微控制器”教程中的步驟操作,并使用USB到串行模塊對(duì)其進(jìn)行編程。
添加音效片段
互聯(lián)網(wǎng)上有數(shù)百萬(wàn)個(gè)音效片段可供選擇。只需選擇您想要的音效片段,下載它們,然后使用設(shè)備的USB端口將它們放入音效板的閃存中。最好在將它們加載到W25Q32之前,將音效片段按順序命名(00001.mp3、00002.mp3、00003.mp3,依此類推)。
輪到你了
你可以通過(guò)添加額外的音頻文件和按鈕來(lái)擴(kuò)展這個(gè)電路及其代碼,或者通過(guò)使用額外的揚(yáng)聲器和更高級(jí)的放大器來(lái)增加立體聲支持。你甚至可以考慮添加一個(gè)電位器來(lái)調(diào)節(jié)揚(yáng)聲器的音量。當(dāng)然,通過(guò)使用不同的庫(kù)或函數(shù),總有方法可以優(yōu)化按鍵掃描代碼。
我在這個(gè)項(xiàng)目中的目標(biāo)是帶你走完設(shè)計(jì)一個(gè)完整的嵌入式系統(tǒng)的過(guò)程,這個(gè)系統(tǒng)不僅制作起來(lái)有趣,而且玩起來(lái)也很有趣。如果你構(gòu)建了這個(gè)項(xiàng)目,請(qǐng)?jiān)谠u(píng)論中告訴我你選擇了哪些音效片段,以及你是如何擴(kuò)展它的!
評(píng)論