Go Down

Topic: * MP3 Shield * - Rogue Robotics rMP3 (Read 44 times) previous topic - next topic

mowcius

Oh, btw. Your link is broken on the rMP3 page:

Quote
Arduino? is a trademark of Arduino Team

should link to arduino.cc presumably rather than:
http://www.roguerobotics.com/store/arduino.cc

Mowcius

bhagman

ooops... thanks mowcius.  Fixed.  (I was wondering why there was a http:// lying on the floor next to my desk).

b

bhagman

#7
Dec 18, 2009, 07:27 am Last Edit: Dec 18, 2009, 10:44 pm by bhagman Reason: 1
XMAS time...

This sketch randomly plays all the songs in a folder.  You can control the volume, play/pause/stop/next, and ff/rew using serial input (from the IDE).

Throw a bunch of your favorite holiday songs in a folder named "XMAS" on your SD card, stick it in the rMP3, and run the sketch.

I haven't got around to building a tree light sequencer to run at the same time as the songs are playing.  Maybe Grumpy_Mike will lend me his Tree-Sink.  ;D

Happy Holidays everyone!

b


Code: [Select]
#include <RogueSD.h>
#include <RogueMP3.h>
#include <NewSoftSerial.h>

NewSoftSerial rmp3_serial(6, 7);

RogueMP3 rmp3(rmp3_serial);
RogueSD filecommands(rmp3_serial);

int numberOfSongs;
int lastSong;
char path[96];

const char *directory = "/XMAS";


void setup()
{
 Serial.begin(9600);

 Serial.println("Merry Xmas!");

 rmp3_serial.begin(9600);

 rmp3.sync();
 rmp3.stop();

 filecommands.sync();

 // mix up our random number generator
 randomSeed(analogRead(0));

 // get the number of songs available
 strcpy(path, directory);
 strcat(path, "/");
 strcat(path, "*.mp3");  // we have to do this because the IDE thinks that "/*" needs to be terminated everywhere

 numberOfSongs = filecommands.filecount(path);

 lastSong = -1;
}



void playNextSong()
{
 uint8_t i;
 char filename[80];
 char path[96];
 int nextSong = 0;

 if (numberOfSongs > 0)
 {
   // Select our next song randomly
   if (numberOfSongs > 2)
   {
     do
       nextSong = random(numberOfSongs);
     while (nextSong == lastSong);
   }
   else if (numberOfSongs == 2)
   {
     // we only have two songs
     if (lastSong == 0)
       nextSong = 1;
     else
       nextSong = 0;
   }

   // now, get our file name from file list

   filecommands.opendir(directory);

   for (i = 0; i <= nextSong; i++)
   {
     filecommands.readdir(filename, "*.mp3");
   }

   strcpy(path, directory);
   strcat(path, "/");
   strcat(path, filename);

   rmp3.playfile(path);

   Serial.print("Playing: ");
   Serial.println(path);

   lastSong = nextSong;
 }
 else
 {
   Serial.println("No files to play.");
 }
}


void loop()
{
 char c;
 uint8_t i;
 int16_t newtime;

 playbackinfo playinfo;

 char status = 'S';
 uint8_t playing = 1;
 uint8_t volume = 20;
 uint8_t boostOn = false;

 volume = rmp3.getvolume();  // this only gets the left volume
 
 playNextSong();

 while(1)
 {
   while(!Serial.available())
   {
     // we should do fancy stuff like flash lights on our Xmas tree here!
     // got lots of time!
     delay(200);

     status = rmp3.getplaybackstatus();
     playinfo = rmp3.getplaybackinfo();

     if (status == 'S' && playing)
       playNextSong();
   }
   
   // OOH!! got a character!
   c = Serial.read();

   switch(c)
   {
     case 'p':
       // pause
       if(status == 'D')
       {
         // fade in
         rmp3.playpause();
         rmp3.fade(volume, 400);
       }
       else if(status == 'P')
       {
         // fade out
         rmp3.fade(100, 400);
         rmp3.playpause();
       }
       else
       {
         // start playing
         playNextSong();
         playing = 1;
       }
       break;
     case 's':
       rmp3.stop();
       playing = 0;
       break;
     case 'n':
       playNextSong();
       playing = 1;
       break;

     case 'e':
       if(boostOn)
       {
         rmp3.setboost(0);
         boostOn = false;
       }
       else
       {
         rmp3.setboost(8, 6, 7, 3);
         boostOn = true;
       }
       break;
     
     case 'a':
       // jump back 5 seconds
       newtime = playinfo.position - 5;
       if (newtime < 0) newtime = 0;
       rmp3.jump(newtime);
       break;

     case 'd':
       // jump forward 5 seconds
       rmp3.jump(playinfo.position + 5);
       break;
       
     case 'k':
       if(volume < 254) volume++;
       if(status != 'D') rmp3.setvolume(volume);
       break;

     case 'i':
       if(volume > 0) volume--;
       if(status != 'D') rmp3.setvolume(volume);
       break;

   }
 }
}

mowcius

Quote
volume, play/pause/stop/next, and ff/rew using serial input (from the IDE)

Now it's getting interesting. (to be honest I probably should have read through the page in more detail)

This is definitely on my list and I may be able to get one soon if I get my other stuff free for sparkfun free day or I have to buy it...

Mowcius

Lee Sylvester

#9
Apr 07, 2010, 10:01 pm Last Edit: Apr 07, 2010, 10:02 pm by Lazarus404 Reason: 1
Hey Brett,

I'm currently trying to use the rMP3 shield with the DFRduino LCD Keypad shield. The problem is, while rMP3 uses digital pins 6, 7, 8, 11, 12 & 13, the LCD shield uses 5, 6, 7, 8 & 9. Therefore, I'd like to reroute pins 6, 7 & 8 to use pins 3, 4 & 10 by cutting the jumpers and wiring them up. So far, so good. The problem I have, though, is that I can't seem to work out how I'd let the C compiler know of the change. There aren't any obvious locations in the C file or associated header and I can't see any mention of this in the documentation. Could you please give me a clue as to how I would do this?

Thanks,
Lee

Go Up