資料介紹
描述
這個(gè)項(xiàng)目展示了如何制作一個(gè)基于 Arduino 的 midi 播放器。Arduino 連接到包含 SD 卡讀卡器的 DS1307 數(shù)據(jù)記錄器擴(kuò)展板。Arduino 輸出保存到 Data Logger Shield 中 SD 卡的 midi 文件的 midi 流。此 MIDI 流可以連接到任何可以播放音樂的 MIDI 合成器或 MIDI 設(shè)備。
這是主要組件
- 阿杜諾烏諾
- DS1307 數(shù)據(jù)記錄器擴(kuò)展板
- PCB 安裝 MIDI 母頭 DIN5 插孔
- MC74HC14A 六路施密特觸發(fā)器反相器
- 2 x 220 歐姆電阻
- 按鈕
- 中線線
DS1307 數(shù)據(jù)記錄器擴(kuò)展板
這個(gè) Arduino 擴(kuò)展板可從多個(gè)來源獲得;亞馬遜、eBay 和全球速賣通等等。
Adafruit 發(fā)布的盾牌版本 2 有一個(gè)很好的概述
https://learn.adafruit.com/adafruit-data-logger-shield/overview
該項(xiàng)目中使用的擴(kuò)展板是硬件版本 1,與 Adafruit 描述的不同。但是,所有代碼和示例都適用于版本 1。
DS1307 是一個(gè)實(shí)時(shí)時(shí)鐘芯片,用于提供精確的時(shí)間值。它可以與備用電池一起使用,因此即使關(guān)閉周圍電路的電源也不會(huì)浪費(fèi)時(shí)間。
該項(xiàng)目中使用的數(shù)據(jù)記錄器擴(kuò)展板包括一個(gè) DS1307 和一個(gè) SD 讀卡器。屏蔽的主要用途是記錄來自傳感器的數(shù)據(jù),并在讀數(shù)中添加精確的時(shí)間戳。此信息存儲(chǔ)在 SD 卡上,可以隨時(shí)檢索以進(jìn)行分析。
對(duì)于這個(gè)特定項(xiàng)目,我們不使用 DS1307 功能,只使用 SD 讀卡器(抱歉)。
這是盾牌的圖片。
盾牌的一些有趣的特點(diǎn)
- 盾牌帶有一個(gè)原型制作區(qū),這個(gè)以后會(huì)有用
- Arduino 接頭在屏蔽上可用,可以通過將電線焊接到與接頭相鄰的通孔來訪問
- 屏蔽包括兩個(gè)內(nèi)置 LED 和電阻器。您的電路可以通過接線點(diǎn)連接到它們。
- SD 卡讀卡器的芯片選擇 (CS) 連接到此擴(kuò)展板的 Arduino 引腳 10(不像其他擴(kuò)展板那樣是引腳 4)
Arduino 通過 SPI 接口與 SD 卡通信。這是引腳分配。
在連接屏蔽層之前,通過以下步驟測(cè)試 SD 卡是否正常工作:
- 在計(jì)算機(jī)中格式化 SD 卡。它必須格式化為 FAT32(如果你懷舊的話,也可以格式化為 FAT16)
- 復(fù)制一些文件到卡上。由于讀者的限制,文件名不能超過8個(gè)字符,文件擴(kuò)展名限制為3個(gè)字符(記住MSDOS)
- Arduino IDE 應(yīng)該預(yù)裝了 SD 庫。在文件→ SD 示例下檢查。如果不安裝庫。
- 將擴(kuò)展板連接到您的 Arduino 并插入 SD 卡。上傳程序 SDCardReadFiles 并運(yùn)行它。如果一切正常,串行監(jiān)視器應(yīng)該列出 SD 卡上的所有文件
/* SDlistFiles
This example shows how print out the files in a directory on a SD card
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 10
This example code is in the public domain.
*/
#include
#include
File root;
// Chip Select for SD Card - Pin 10 for shield
const int chipSelect = 10;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
pinMode(chipSelect,OUTPUT);
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
}
void loop() {
root = SD.open("/");
printDirectory(root, 0);
Serial.println("done!");
delay(5000);
}
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}
MC74HC14A 六路施密特觸發(fā)器反相器
施密特觸發(fā)器反相器用于確保 MIDI 信號(hào)包含正確電壓的干凈方波。施密特觸發(fā)器電路包括滯后功能,可確保數(shù)字信號(hào)從高電平到低電平以及從低電平到高電平的精確轉(zhuǎn)換。
鏈接到數(shù)據(jù)表
https://www.mouser.com/datasheet/2/308/MC74HC14A-D-601265.pdf
如果您對(duì)施密特觸發(fā)器逆變器背后的理論感興趣,互聯(lián)網(wǎng)上有許多描述其操作的文章。
電路
這是該項(xiàng)目中使用的電路示意圖:
- 原理圖未顯示 MC74HC14 芯片所需的 5V 電源和接地連接。這些是有線的:5V 到引腳 14,接地到引腳 7。
- 兩個(gè) LED 和電阻器內(nèi)置在防護(hù)罩中。要使用它們,請(qǐng)將 Arduino 引腳 5 和 6 橋接到 L1 和 L2 通孔。
- midi 流從 Arduino 的 TX 引腳發(fā)送。默認(rèn)情況下,它連接到 Arduino 板上的引腳 1。在程序中,Serial.write 命令會(huì)將 midi 命令發(fā)送到引腳 1,然后發(fā)送到 midi 輸出電路。
如圖所示的電路連接在屏蔽的原型區(qū)域。這需要一些精細(xì)的工作,但這是可能的。這是完成的盾牌的圖片。
作為替代方案,電路可以構(gòu)建在無焊料面包板上。參考www.midi.orgt上的一篇文章hat 描述了這種方法
https://www.midi.org/midi-articles/arduino-midi-output-basics
完成后,將擴(kuò)展板連接到 Arduino
圖書館
為了使代碼工作,需要安裝以下庫。
- SdFat(用于訪問 SD 卡的庫)
- MD_MIDIFile(用于播放 SD 卡中的 midi 文件的庫)
使用 Tools → Manage Libraries 進(jìn)行安裝。截圖如下:
Midi 庫的文檔位于這兩個(gè)鏈接
https://github.com/MajicDesigns/MD_MIDIFile
https://majicdesigns.github.io/MD_MIDIFile/
GitHub 存儲(chǔ)庫中包含的示例概述了該庫的工作原理。此外,還包括一些示例 MIDI 文件。
播放 Midi 文件
要播放 midi 文件,請(qǐng)按照以下步驟操作:
- 在格式化的 SD 卡上加載 midi 文件。文件名不能超過八個(gè)字符,后跟擴(kuò)展名“.mid”
- 在 Arduino IDE 中打開草圖“MinimalMidiPlayer”
- 在 Arduino sketch 中,更改聲明行 [const char *loopfile = “LOOPDEMO.MID”] 以指定 SD 卡上的文件
- 確保 SD_SELECT = 10
- 將草圖上傳到 Arduino
- 斷開 Arduino 與電源的連接
- 將 SD 卡插入讀卡器。
- 通過 MIDI 電纜將 MIDI 輸出插孔連接到合成器或 MIDI 播放器。
- 將 Arduino 連接到電源。不要使用 USB 連接器供電,它可能沒有足夠的能力為擴(kuò)展板和 Arduino 供電。而是使用連接到 Arduino 上的 DC 插孔的源
- 按下盾牌上的按鈕,歌曲就會(huì)播放。成功!
#include
#include
#define SERIAL_RATE 31250 // Midi standard serial rate is 31250 baud
#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
const byte SD_SELECT = 10; // Chip select for Sd card is pin 10
const char *loopfile = "LOOPDEMO.MID"; // pointer to midi file on SD card
const int buttonPin = 7; // the number of the pushbutton pin
const int ledPin = 6; // the number of the LED pin
bool playFile = false; // boolean variable indicating if a file should be played
SDFAT SD;
MD_MIDIFile SMF; // create an instance of a midi file
// Called by the MIDIFile library when a file event needs to be processed
// thru the midi communications interface.
// This callback is set up in the setup() function.
void midiCallback(midi_event *pev){
if ((pev->data[0] >= 0x80) && (pev->data[0] <= 0xe0)){
Serial.write(pev->data[0] | pev->channel);
Serial.write(&pev->data[1], pev->size-1);
}
else {
Serial.write(pev->data, pev->size);
}
}
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // use built in pullup resistor with push button
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(SERIAL_RATE);
// Initialize SD Card
if (!SD.begin(SD_SELECT, SPI_FULL_SPEED)){
while (true) ;
}
// Initialize MIDIFile
SMF.begin(&SD);
SMF.setMidiHandler(midiCallback);
SMF.looping(false);
}
void loop() {
// Wait for pushbutton input
int reading = digitalRead(buttonPin);
// If push button is depressed, load midi file and switch on LED
if (reading == LOW) {
playFile = true;
digitalWrite(ledPin, HIGH); // Switch on LED
SMF.load(loopfile);
}
// play the file if playFile is true
if(playFile == true){
// Play until end of file is reached
while (!SMF.isEOF()){
SMF.getNextEvent();
}
}
// Once file is finished playing, close midi file and switch off LED
playFile = false;
digitalWrite(ledPin, LOW);
SMF.close();
}
多軌
作為對(duì)這個(gè)最小 midi 播放器的增強(qiáng),可以從 SD 卡播放多首歌曲。以下是說明:
- 在 SD 卡上加載多個(gè) midi 文件。這些文件必須都在根目錄中。子文件夾中的文件將無法播放。文件名不能超過八個(gè)字符,并且必須后跟擴(kuò)展名“.mid”
- 在 Arduino IDE 中打開草圖“MultiTrackMidiPlayer”。調(diào)整延遲(大約第 82 行)以允許歌曲之間更長或更短的停頓
- 確保 SD_SELECT = 10
- 將草圖上傳到 Arduino
- 斷開 Arduino 與電源的連接
- 將SD卡插入讀卡器
- 通過 MIDI 電纜將 MIDI 輸出插孔連接到合成器或 MIDI 播放器
- 將 Arduino 連接到電源。不要使用 USB 連接器供電,它可能沒有足夠的能力為擴(kuò)展板和 Arduino 供電。而是使用連接到 Arduino 上的 DC 插孔的源
- 按下盾牌上的按鈕,歌曲將按順序播放,直到播放完所有歌曲。成功!
最后的話
這是一個(gè)最小的播放器,并且沒有在代碼中內(nèi)置所有可能的錯(cuò)誤檢查。需要一些額外的開發(fā)來添加額外的功能。
?
- Arduino之如何逐行讀取SD卡文本文件
- 如何在Arduino Uno上播放棺材舞主題聲音
- 使用ZYBO從SD卡播放wav文件
- Arduino UNO構(gòu)建音樂播放器
- 使用Arduino訪問2個(gè)SD卡 2次下載
- Arduino如何逐行讀取SD卡文本文件 5次下載
- 將Pmod SD與Arduino Uno一起使用
- 基于Arduino UNO構(gòu)建小型midi解碼器
- Arduino的DIY SD卡模塊
- Arduino Uno國內(nèi)改版電路原理圖下載 0次下載
- Arduino Uno Rev.3開發(fā)板意大利原版電路圖 0次下載
- 【arduino SD卡開發(fā)】 將文件寫入SD卡的特定 文件夾內(nèi)
- stm32 arduino 讀取sd卡并在lcd(jlx12864)上播放badapple
- FPGA實(shí)現(xiàn)從SD卡讀出MP3文件并播放 25次下載
- Arduino Uno開發(fā)板原理圖和PCB文件(貼片版) 0次下載
- 貼片式SD卡功能介紹【MK SD NAND】 386次閱讀
- 如何將SD卡眾多文件打包成一個(gè).img文件方便一鍵燒寫呢? 917次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區(qū)別 3858次閱讀
- sd卡是什么有什么用途 TF卡和SD卡有什么區(qū)別 2015次閱讀
- 如何移植FatFs文件系統(tǒng)到SD卡內(nèi) 1375次閱讀
- 如何利用Arduino UNO和SD卡制作音樂播放器 7319次閱讀
- 用WinHex工具恢復(fù)SD卡中丟失的CR2格式照片文件的方法 6371次閱讀
- 鏡像文件下載到SD卡中的方法 1w次閱讀
- 微雪電子Arduino 音頻播放擴(kuò)展板簡介 1862次閱讀
- 沁恒股份U盤和SD卡高速文件管理控制芯片CH378概述 3826次閱讀
- 沁恒股份U盤和SD卡文件管理控制芯片CH376簡介 2897次閱讀
- 基于μC/OS-II的SD卡文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 1369次閱讀
- spi讀取sd卡數(shù)據(jù)例程 8823次閱讀
- 基于DSP和SD卡的生理信號(hào)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì) 3558次閱讀
- mmc卡和sd卡的區(qū)別是什么 4.7w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多