Created
June 13, 2016 10:25
-
-
Save Tormodli/74ac9fa2ef2ca7e76477b8a54c568a70 to your computer and use it in GitHub Desktop.
This file contains 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
/*************************************************** | |
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 <SPI.h> | |
#include <Adafruit_VS1053.h> | |
#include <SD.h> | |
// Inkluderer wire for kommunikasjon mellom 2 Arduinoer | |
#include <Wire.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 sangNR,byttMusikk,touch; | |
boolean doStuff = false; | |
void setup() { | |
Wire.begin(8); // join i2c bus with address #8 | |
Wire.onReceive(receiveEvent); // register event | |
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(10,10); | |
/***** 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() { | |
if (doStuff){ | |
musicPlayer.stopPlaying(); | |
delay(50); | |
} | |
// 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"); | |
if (sangNR == 0 && doStuff){ | |
doStuff = false; | |
//bare stoppe musikken | |
} | |
if (sangNR == 1 && doStuff){ | |
musicPlayer.startPlayingFile("1.mp3"); | |
doStuff = false; | |
} | |
if (sangNR == 2 && doStuff){ | |
musicPlayer.startPlayingFile("2.mp3"); | |
doStuff = false; | |
} | |
if (sangNR == 3 && doStuff){ | |
musicPlayer.startPlayingFile("3.mp3"); | |
doStuff = false; | |
} | |
if (sangNR == 4 && doStuff){ | |
musicPlayer.startPlayingFile("4.mp3"); | |
doStuff = false; | |
} | |
if (sangNR == 5 && doStuff){ | |
musicPlayer.startPlayingFile("5.mp3"); | |
doStuff = false; | |
} | |
if (sangNR == 6 && doStuff){ | |
musicPlayer.startPlayingFile("6.mp3"); | |
doStuff = false; | |
} | |
if (sangNR == 7 && doStuff){ | |
musicPlayer.startPlayingFile("7.mp3"); | |
doStuff = false; | |
} | |
/* | |
// Start playing a file, then we can do stuff while waiting for it to finish | |
if (! musicPlayer.startPlayingFile("t02.mp3")) { | |
Serial.println("Could not open file t02.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); | |
}*/ | |
/*if (byttMusikk == 1) { | |
musicPlayer.stopPlaying(); | |
musicPlayer.startPlayingFile("t01.mp3"); | |
} | |
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<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(); | |
} | |
} | |
// function that executes whenever data is received from master | |
// this function is registered as an event, see setup() | |
void receiveEvent(int howMany) { | |
while (1 < Wire.available()) { // loop through all but the last | |
char c = Wire.read(); // receive byte as a character | |
Serial.print(c); // print the character | |
} | |
int x = Wire.read(); // receive byte as an integer | |
sangNR = (x % 16) / 2; | |
byttMusikk = x % 2; | |
touch = x / 16; //brukes ikke til noe | |
//Serial.println(x); // print the integer | |
Serial.println("sangNR:"); | |
Serial.print(sangNR); | |
Serial.println("byttMusikk:"); | |
Serial.print(byttMusikk); | |
Serial.print(", "); | |
Serial.println(touch); | |
doStuff = true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment