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