/*************************************************** This is an example for the Adafruit VS1053 Codec Breakout Designed specifically to work with the Adafruit VS1053 Codec Breakout ----> https://www.adafruit.com/products/1381 Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ // include SPI, MP3 and SD libraries #include #include #include // These are the pins used for the breakout example #define BREAKOUT_RESET 9 // VS1053 reset pin (output) #define BREAKOUT_CS 10 // VS1053 chip select pin (output) #define BREAKOUT_DCS 8 // VS1053 Data/command select pin (output) // These are the pins used for the music maker shield #define SHIELD_RESET -1 // VS1053 reset pin (unused!) #define SHIELD_CS 7 // VS1053 chip select pin (output) #define SHIELD_DCS 6 // VS1053 Data/command select pin (output) // These are common pins between breakout and shield #define CARDCS 4 // Card chip select pin // DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt #define DREQ 3 // VS1053 Data request, ideally an Interrupt pin Adafruit_VS1053_FilePlayer musicPlayer = // create breakout-example object! //Adafruit_VS1053_FilePlayer(BREAKOUT_RESET, BREAKOUT_CS, BREAKOUT_DCS, DREQ, CARDCS); // create shield-example object! Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS); //// void setup() { Serial.begin(9600); Serial.println("Adafruit VS1053 Library Test"); // initialise the music player if (! musicPlayer.begin()) { // initialise the music player Serial.println(F("Couldn't find VS1053, do you have the right pins defined?")); while (1); } Serial.println(F("VS1053 found")); musicPlayer.sineTest(0x44, 500); // Make a tone to indicate VS1053 is working if (!SD.begin(CARDCS)) { Serial.println(F("SD failed, or not present")); while (1); // don't do anything more } Serial.println("SD OK!"); // list files printDirectory(SD.open("/"), 0); // Set volume for left, right channels. lower numbers == louder volume! musicPlayer.setVolume(20,20); /***** Two interrupt options! *******/ // This option uses timer0, this means timer1 & t2 are not required // (so you can use 'em for Servos, etc) BUT millis() can lose time // since we're hitchhiking on top of the millis() tracker //musicPlayer.useInterrupt(VS1053_FILEPLAYER_TIMER0_INT); // This option uses a pin interrupt. No timers required! But DREQ // must be on an interrupt pin. For Uno/Duemilanove/Diecimilla // that's Digital #2 or #3 // See http://arduino.cc/en/Reference/attachInterrupt for other pins // *** This method is preferred if (! musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT)) Serial.println(F("DREQ pin is not an interrupt pin")); } void loop() { // Alternately, we can just play an entire file at once // This doesn't happen in the background, instead, the entire // file is played and the program will continue when it's done! musicPlayer.playFullFile("track001.ogg"); // Start playing a file, then we can do stuff while waiting for it to finish if (! musicPlayer.startPlayingFile("track001.mp3")) { Serial.println("Could not open file track001.mp3"); while (1); } Serial.println(F("Started playing")); while (musicPlayer.playingMusic) { // file is now playing in the 'background' so now's a good time // to do something else like handling LEDs or buttons :) Serial.print("."); delay(1000); } Serial.println("Done playing music"); } /// File listing helper void printDirectory(File dir, int numTabs) { while(true) { File entry = dir.openNextFile(); if (! entry) { // no more files //Serial.println("**nomorefiles**"); break; } for (uint8_t i=0; i