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