渲染♀离别^ 发表于 2013-10-8 22:43:46

sd卡播放音乐,求大神帮忙想想自动换歌 循环的方法谢谢啦

这个是代码,谁能一起想想自动循环的语法,(我是用if来选择,也可以用switch,但是如果有几百首个if码字都码死,求简略的方法。。。比方说吧中间的数字用变量来代替,但是我不会==)(原谅我就玩了4天的菜鸟。。)还有很多教程都有具体的电路图,我就不介绍了==。
二号引脚是下一首歌,我还没想到方法让它一首歌放完自动下一首,只能这样==二号引脚是下一首歌,我还没想到方法让它一首歌放完自动下一首,只能这样==
谢谢各位大神帮忙==
#include <SimpleSDAudio.h>

void DirCallback(char *buf) {
Serial.println(buf);
}

#define BIGBUFSIZE (2*512)
uint8_t bigbuf;

// helper function to determine free ram at runtime
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

void setup()
{
pinMode(2, OUTPUT);
Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
}

Serial.print(F("Free Ram: "));
Serial.println(freeRam());

// Setting the buffer manually for more flexibility
SdPlay.setWorkBuffer(bigbuf, BIGBUFSIZE);

Serial.print(F("\nInitializing SimpleSDAudio V" SSDA_VERSIONSTRING " ..."));

// If your SD card CS-Pin is not at Pin 4, enable and adapt the following line:
//SdPlay.setSDCSPin(10);

// Select between SSDA_MODE_FULLRATE or SSDA_MODE_HALFRATE (62.5kHz or 31.25kHz)
// and the output modes SSDA_MODE_MONO_BRIDGE, SSDA_MODE_MONO or SSDA_MODE_STEREO
if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER)) {
    Serial.println(F("initialization failed. Things to check:"));
    Serial.println(F("* is a card is inserted?"));
    Serial.println(F("* Is your wiring correct?"));
    Serial.println(F("* maybe you need to change the chipSelect pin to match your shield or module?"));
    Serial.print(F("Error code: "));
    Serial.println(SdPlay.getLastError());
    while(1);
} else {
    Serial.println(F("Wiring is correct and a card is present."));
}


}
int a=0;
char * AudioFileName="(7)~1.AFM";
void loop(void) {
uint8_t count=0, c, flag;

a=a+1;
   if (a==1)
   {
AudioFileName="(6)~1.AFM";
};
   if (a==2)
   {
AudioFileName="(7)~1.AFM";
};
if (a==3)
   {
AudioFileName="(8)~1.AFM";
};
if (a==4)
   {
AudioFileName="(9)~1.AFM";
};
if (a==5)
   {
AudioFileName="(10)~1.AFM";
};

Serial.println(F("Files on card:"));
SdPlay.dir(&DirCallback);

Serial.print(F("Looking for file... "));
SdPlay.setFile(AudioFileName);
Serial.print(AudioFileName);
    flag = 1;
int i=1;
   
while(flag) {
    SdPlay.worker();
    if (i==1){
               SdPlay.play();
         Serial.println(F("Play."));
         i=2;      
    }
int a =digitalRead(2);
if (a==HIGH)
{
break;
}

};
}

渲染♀离别^ 发表于 2013-10-8 22:45:58

沙发我占了==用char * AudioFileName="(7)~1.AFM";中间的数字有办法每次循环都加1吗?这个问题困扰了我好久==还有if之类的好像不能在set up 和loop之外用

渲染♀离别^ 发表于 2013-10-9 18:19:02

解决了~可以给大家借鉴一下

int a=random(0,15);
sprintf(AudioFileName,"(%d)~1.AFM",a);
(15是歌曲数量)

软件-蹄飞 发表于 2014-4-5 21:38:12

赞一个,呵呵
页: [1]
查看完整版本: sd卡播放音乐,求大神帮忙想想自动换歌 循环的方法谢谢啦