资料介绍
描述
这个项目展示了如何制作一个基于 Arduino 的 midi 播放器。Arduino 连接到包含 SD 卡读卡器的 DS1307 数据记录器扩展板。Arduino 输出保存到 Data Logger Shield 中 SD 卡的 midi 文件的 midi 流。此 MIDI 流可以连接到任何可以播放音乐的 MIDI 合成器或 MIDI 设备。
这是主要组件
DS1307 数据记录器扩展板
这个 Arduino 扩展板可从多个来源获得;亚马逊、eBay 和全球速卖通等等。
Adafruit 发布的盾牌版本 2 有一个很好的概述
https://learn.adafruit.com/adafruit-data-logger-shield/overview
该项目中使用的扩展板是硬件版本 1,与 Adafruit 描述的不同。但是,所有代码和示例都适用于版本 1。
DS1307 是一个实时时钟芯片,用于提供精确的时间值。它可以与备用电池一起使用,因此即使关闭周围电路的电源也不会浪费时间。
该项目中使用的数据记录器扩展板包括一个 DS1307 和一个 SD 读卡器。屏蔽的主要用途是记录来自传感器的数据,并在读数中添加精确的时间戳。此信息存储在 SD 卡上,可以随时检索以进行分析。
对于这个特定项目,我们不使用 DS1307 功能,只使用 SD 读卡器(抱歉)。
这是盾牌的图片。
盾牌的一些有趣的特点
- 盾牌带有一个原型制作区,这个以后会有用
- Arduino 接头在屏蔽上可用,可以通过将电线焊接到与接头相邻的通孔来访问
- 屏蔽包括两个内置 LED 和电阻器。您的电路可以通过接线点连接到它们。
- SD 卡读卡器的芯片选择 (CS) 连接到此扩展板的 Arduino 引脚 10(不像其他扩展板那样是引脚 4)
Arduino 通过 SPI 接口与 SD 卡通信。这是引脚分配。
在连接屏蔽层之前,通过以下步骤测试 SD 卡是否正常工作:
- 在计算机中格式化 SD 卡。它必须格式化为 FAT32(如果你怀旧的话,也可以格式化为 FAT16)
- 复制一些文件到卡上。由于读者的限制,文件名不能超过8个字符,文件扩展名限制为3个字符(记住MSDOS)
- Arduino IDE 应该预装了 SD 库。在文件→ SD 示例下检查。如果不安装库。
- 将扩展板连接到您的 Arduino 并插入 SD 卡。上传程序 SDCardReadFiles 并运行它。如果一切正常,串行监视器应该列出 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 六路施密特触发器反相器
施密特触发器反相器用于确保 MIDI 信号包含正确电压的干净方波。施密特触发器电路包括滞后功能,可确保数字信号从高电平到低电平以及从低电平到高电平的精确转换。
链接到数据表
https://www.mouser.com/datasheet/2/308/MC74HC14A-D-601265.pdf
如果您对施密特触发器逆变器背后的理论感兴趣,互联网上有许多描述其操作的文章。
电路
这是该项目中使用的电路示意图:
- 原理图未显示 MC74HC14 芯片所需的 5V 电源和接地连接。这些是有线的:5V 到引脚 14,接地到引脚 7。
- 两个 LED 和电阻器内置在防护罩中。要使用它们,请将 Arduino 引脚 5 和 6 桥接到 L1 和 L2 通孔。
- midi 流从 Arduino 的 TX 引脚发送。默认情况下,它连接到 Arduino 板上的引脚 1。在程序中,Serial.write 命令会将 midi 命令发送到引脚 1,然后发送到 midi 输出电路。
如图所示的电路连接在屏蔽的原型区域。这需要一些精细的工作,但这是可能的。这是完成的盾牌的图片。
作为替代方案,电路可以构建在无焊料面包板上。参考www.midi.orgt上的一篇文章hat 描述了这种方法
https://www.midi.org/midi-articles/arduino-midi-output-basics
完成后,将扩展板连接到 Arduino
图书馆
为了使代码工作,需要安装以下库。
- SdFat(用于访问 SD 卡的库)
- MD_MIDIFile(用于播放 SD 卡中的 midi 文件的库)
使用 Tools → Manage Libraries 进行安装。截图如下:
Midi 库的文档位于这两个链接
https://github.com/MajicDesigns/MD_MIDIFile
https://majicdesigns.github.io/MD_MIDIFile/
GitHub 存储库中包含的示例概述了该库的工作原理。此外,还包括一些示例 MIDI 文件。
播放 Midi 文件
要播放 midi 文件,请按照以下步骤操作:
- 在格式化的 SD 卡上加载 midi 文件。文件名不能超过八个字符,后跟扩展名“.mid”
- 在 Arduino IDE 中打开草图“MinimalMidiPlayer”
- 在 Arduino sketch 中,更改声明行 [const char *loopfile = “LOOPDEMO.MID”] 以指定 SD 卡上的文件
- 确保 SD_SELECT = 10
- 将草图上传到 Arduino
- 断开 Arduino 与电源的连接
- 将 SD 卡插入读卡器。
- 通过 MIDI 电缆将 MIDI 输出插孔连接到合成器或 MIDI 播放器。
- 将 Arduino 连接到电源。不要使用 USB 连接器供电,它可能没有足够的能力为扩展板和 Arduino 供电。而是使用连接到 Arduino 上的 DC 插孔的源
- 按下盾牌上的按钮,歌曲就会播放。成功!
#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();
}
多轨
作为对这个最小 midi 播放器的增强,可以从 SD 卡播放多首歌曲。以下是说明:
- 在 SD 卡上加载多个 midi 文件。这些文件必须都在根目录中。子文件夹中的文件将无法播放。文件名不能超过八个字符,并且必须后跟扩展名“.mid”
- 在 Arduino IDE 中打开草图“MultiTrackMidiPlayer”。调整延迟(大约第 82 行)以允许歌曲之间更长或更短的停顿
- 确保 SD_SELECT = 10
- 将草图上传到 Arduino
- 断开 Arduino 与电源的连接
- 将SD卡插入读卡器
- 通过 MIDI 电缆将 MIDI 输出插孔连接到合成器或 MIDI 播放器
- 将 Arduino 连接到电源。不要使用 USB 连接器供电,它可能没有足够的能力为扩展板和 Arduino 供电。而是使用连接到 Arduino 上的 DC 插孔的源
- 按下盾牌上的按钮,歌曲将按顺序播放,直到播放完所有歌曲。成功!
最后的话
这是一个最小的播放器,并且没有在代码中内置所有可能的错误检查。需要一些额外的开发来添加额外的功能。
- Arduino之如何逐行读取SD卡文本文件
- 如何在Arduino Uno上播放棺材舞主题声音
- 使用ZYBO从SD卡播放wav文件
- Arduino UNO构建音乐播放器
- 使用Arduino访问2个SD卡 2次下载
- Arduino如何逐行读取SD卡文本文件 5次下载
- 将Pmod SD与Arduino Uno一起使用
- 基于Arduino UNO构建小型midi解码器
- Arduino的DIY SD卡模块
- Arduino Uno国内改版电路原理图下载 0次下载
- Arduino Uno Rev.3开发板意大利原版电路图 0次下载
- 【arduino SD卡开发】 将文件写入SD卡的特定 文件夹内
- stm32 arduino 读取sd卡并在lcd(jlx12864)上播放badapple
- FPGA实现从SD卡读出MP3文件并播放 25次下载
- Arduino Uno开发板原理图和PCB文件(贴片版) 0次下载
- 贴片式SD卡功能介绍【MK SD NAND】 386次阅读
- 如何将SD卡众多文件打包成一个.img文件方便一键烧写呢? 917次阅读
- sd卡是什么有什么用途 TF卡和SD卡有什么区别 3858次阅读
- sd卡是什么有什么用途 TF卡和SD卡有什么区别 2015次阅读
- 如何移植FatFs文件系统到SD卡内 1375次阅读
- 如何利用Arduino UNO和SD卡制作音乐播放器 7319次阅读
- 用WinHex工具恢复SD卡中丢失的CR2格式照片文件的方法 6371次阅读
- 镜像文件下载到SD卡中的方法 1w次阅读
- 微雪电子Arduino 音频播放扩展板简介 1862次阅读
- 沁恒股份U盘和SD卡高速文件管理控制芯片CH378概述 3826次阅读
- 沁恒股份U盘和SD卡文件管理控制芯片CH376简介 2897次阅读
- 基于μC/OS-II的SD卡文件系统的设计与实现 1369次阅读
- spi读取sd卡数据例程 8823次阅读
- 基于DSP和SD卡的生理信号数据采集系统设计 3558次阅读
- mmc卡和sd卡的区别是什么 4.7w次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多