Created
May 3, 2016 05:24
-
-
Save alberthdev/2e814fac94aeb913710b05181e9a544c to your computer and use it in GitHub Desktop.
Arduino code updated
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// include SPI, MP3 and SD libraries | |
#include <SPI.h> | |
#include <Adafruit_VS1053.h> | |
#include <SD.h> | |
// 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); | |
int buttonPin = 8; | |
int relay1 = 9; | |
// // | |
void setup() { | |
pinMode(relay1, OUTPUT); | |
pinMode(buttonPin, INPUT); | |
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() { | |
int buttonState = digitalRead(buttonPin); | |
int newButtonState = 0; | |
int timeCount = 0; // Count the number of seconds that have passed since the music started | |
delay(100); | |
Serial.println(buttonState); | |
if (buttonState == HIGH) { | |
Serial.println(F("Not playing")); | |
digitalWrite(relay1, LOW); | |
delay(100); | |
} else { | |
// 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); | |
timeCount++; | |
if (timeCount == 7) { | |
digitalWrite(relay1, HIGH); | |
delay(1000); | |
} | |
// Read new button state | |
newButtonState = digitalRead(buttonPin); | |
// If it differs from before (pressed -> released, or released -> pressed), | |
// restart playback. | |
if (newButtonState != buttonState) { | |
buttonState = newButtonState; | |
if (!musicPlayer.startPlayingFile("track001.mp3")) { | |
Serial.println("Could not open file track001.mp3"); | |
while (1); | |
} | |
} | |
} | |
Serial.println("Done playing music"); | |
} | |
// 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.mp3"); | |
} | |
// / 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 < 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(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment