Go Down

Topic: sparkfun mp3 shield crash (Read 1 time) previous topic - next topic


Hi all,

I'm building my very first arduino project and what I want it to do is to use a potentiometer (attached to A5) to select mp3 tracks on a SD card using the sparkfun mp3 shield  and play them back.  I have the difficult stuff figured out (I think), I can get the audio to play, and I can even get the tracks to change a few times, but that is when it starts running into problems.  I have the serial monitor running as well for debugging purposes and every time, after changing the tracks a few times either the serial monitor crashes and stops updating it's values, and the mp3 track keeps playing (but won't start a new track) or that both the serial monitor stops updating and the mp3 stops playing.  The other odd thing it is doing is I have 5 mp3's it should be selecting, however it seems to be assigning tracks at random (i.e. sometimes when it should be selecting track 1 it actually plays track 3). I'm using a library provided by this guy http://www.billporter.info/sparkfun-mp3-shield-arduino-library/ who has made my life a lot easier, but I'm not sure if something is messing up behind the scenes.  I wouldn't know what to look for if it was.  The code for the project is below.  I've started using volatile Int's because I was hoping that was the problem.  I'm not sure if they all need to be volatile.  I've even commented out the serial monitoring in case that was causing a conflict somehow but that didn't help.  The delay is in there for the same reason.  Anyway, any help would be appreciated, it is probably something very obvious that I am missing.  I've been teaching myself how to code so I'm sure there are holes in my education.


Code: [Select]

#include <SPI.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <SFEMP3Shield.h>

SFEMP3Shield MP3player;

int potPin = A5;

void setup (){

  pinMode (potPin, INPUT);
  MP3player.SetVolume(1, 1);

boolean checkMovement (int oldPinValue){
  volatile int currentValue = analogRead(potPin);
  currentValue = constrain(currentValue, 0, 1000);
  volatile int val = map (currentValue, 0, 1000, 1, 5);
  if (oldPinValue == val){
  else {

void loop (){
  volatile int tempPin = analogRead(potPin);
  volatile int pinValue = analogRead(potPin);
  pinValue = constrain (pinValue, 0, 1000);
  volatile int track = map (pinValue, 0, 1000, 1, 5);
  if (checkMovement (track) == false){
  else {



I had a similar issue.  I can't get Bill's library to work after the most recent update.
I gave up and base my code on the Sparkfun example. I've got mine switching tracks from a pot, but only after the current track ends.  Can't seem to stop the current track and start a new one on the fly.

The only time I use a volatile in is when I am using an interrupt.

Good luck.


I couldn't get Bill's library to work either.
But then i updated the SdFat library to the sdfatlib20120719, and it all worked!

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131