极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13433|回复: 3

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

[复制链接]
发表于 2013-10-8 22:43:46 | 显示全部楼层 |阅读模式
这个是代码,谁能一起想想自动循环的语法,(我是用if来选择,也可以用switch,但是如果有几百首个if码字都码死,求简略的方法。。。比方说吧中间的数字用变量来代替,但是我不会==)(原谅我就玩了4天的菜鸟。。)还有很多教程都有具体的电路图,我就不介绍了==。
二号引脚是下一首歌,我还没想到方法让它一首歌放完自动下一首,只能这样==
二号引脚是下一首歌,我还没想到方法让它一首歌放完自动下一首,只能这样==
谢谢各位大神帮忙==
#include <SimpleSDAudio.h>

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

#define BIGBUFSIZE (2*512)
uint8_t bigbuf[BIGBUFSIZE];

// 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 | 显示全部楼层
赞一个,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 05:22 , Processed in 0.037523 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表