[email protected] 发表于 2013-5-13 22:17 static/image/common/back.gif
uno需要微调那个97行的delayMicroseconds(35);
因为每个arduino速度有点不一致,所以要更改数字以达到两 ...
首先谢谢你无私的指点,由于是新手非计算机专业,研究程序时有以下几个问题没有看懂,在麻烦指点指点。。。。无限感激!!//for sd test
File root; //这里File是数据类型吗,没有找到相关这是
char* playlist[]={/ /这是指针数组吗,表示什么意思啊,而且后面好像没有用到这个数组啊
};
File mp3; //这里File是数据类型吗,mp3是文件名吗?
Mp3Reset();//这里是调用一个子函数吧
root = SD.open("/");//SD.open("/")是什么意思,看了SD库还是没有看懂
printDirectory(root, 0);
Serial.print("Totally ");
Serial.print(fileNumber);
Serial.print(" file(s)"); //" file(s)"这表示什么意思啊
Serial.println();
}
void loop(){
play("s1.mp3"); //这里好像S1这首歌没有播放,直接从S2开始的啊
play("s2.mp3");
}
void play(char* playplay){ //这里有事什么意思啊char* playplay
int val,i;
mp3=SD.open(playplay);
delay(10);
for(i=0;i<548;i++){
mp3.close();//是否有这个内部函数啊
}
万马奔腾 发表于 2013-5-13 23:19 static/image/common/back.gif
首先谢谢你无私的指点,由于是新手非计算机专业,研究程序时有以下几个问题没有看懂,在麻烦指点指点。。 ...
file 本身是来源于c++的概念 就是一种object 一开始 那个root是用来生成文件目录 后来MP3的那个是用来播放文件
char* 这个数组一开始想要自动读取歌曲名称的,但是后来未完成
102行开始有Mp3Reset();的函数定义
SD.open("/");这是打开根目录的意思
Serial.print(" file(s)"); 没什么意义 只是打印到串口给你看一下
s1没有播放 可能是文件有所不支持 这个要看 vs1003的芯片资料
playplay只是我随便起的变量名,不用在意的
mp3.close();是指关闭前面的file
能否讲解下这个函数
void play(char* playplay){
int val,i;
mp3=SD.open(playplay);
delay(10);
for(i=0;i<548;i++){ //这个循环起什么作用啊 548代表什么,为什么是548
digitalWrite(sspin,HIGH); //sspin脚H,是不是片选了SD卡模块
val =mp3.read(); // 是不是从打开的MP3文件一个字节一个字节的赋值给变量val
digitalWrite(xDcs,LOW); //xDcs为LOW时,是不是片选VS1003
SPI.transfer(val); // 这句是不是将VAL的值送给VS1003
digitalWrite(xDcs,HIGH); // 这句是不是将VAL的值送给VS1003
digitalWrite(sspin,LOW);
}
if(DREQ==HIGH){ //这段函数起什么作用
while(mp3.available()){
for(i=0;i<32;i++){ //32是怎么来的
digitalWrite(sspin,HIGH);
val =mp3.read();
digitalWrite(xDcs,LOW);
SPI.transfer(val);
digitalWrite(xDcs,HIGH);
digitalWrite(sspin,LOW);
}
delayMicroseconds(35);
}
}
mp3.close();
}
万马奔腾 发表于 2013-5-14 20:03 static/image/common/back.gif
能否讲解下这个函数
void play(char* playplay){
int val,i;
第一段for函数是进行MP3的初始输入。548是考虑到文件输入速度,文件处理速度,以及存储空间(vs1003内建了512字节的存储空间)的出的经验值。 就是说当装载512字节后, 前面的部分已经被处理了。于是干脆直接输入更多的字节。
第二段if函数是将剩余的MP3输入用的。根据vs1003的芯片文档,当DREQ的引脚呗拉高时,说明至少有32字节的空余空间了。以此为依据开始进行文件的继续输入。在MP3没播完的情况下,持续输入。delayMicroseconds(35);是卡一个正好处理完32字节的timing。这样不会跳出。。
用NANO怎么接线呢,与UNO一样的接线吗?看资料没有找到的
万马奔腾 发表于 2013-5-16 22:13 static/image/common/back.gif
用NANO怎么接线呢,与UNO一样的接线吗?看资料没有找到的
你主要查询一下 nano的spi是如何连接的就行
其他的线随意接
commad(0X0B,volume,volume);//音量最高0x0000音量最低0xFEFE
这句是不是将值为OX3030 赋给 对应的寄存器啊 (int volume=0x30;//set volume here )
SPI.setClockDivider(SPI_CLOCK_DIV16);
commad(0X03,0XC0,0X00);//设置VS1003的时钟
设置SPI串行通信时钟和时钟VS1003的时钟有什么联系 如果都设置高有什么影响 比较SPI-CLOCK-DIV128 和VS1003的时钟设置0XFFFF 有什么影响?
主要问题:
1.SPI串行时钟和VS1003时钟有联系吗?之间是什么关系
2.每个均设为最大值,可以吗?还是有什么依据
本帖最后由 xc145632 于 2013-11-26 14:39 编辑
為什麼我照上面的用完之後都沒有聲音(我用的是ARDUINO+vs1003+sd卡)
vs1003可以驱动小喇叭么?
为什么只有莎莎的声音,我用的是uno