MP3 mini player con arduino

Buona sera a tutti , da pochi giorni ho acquistato un mini player DFR0299 e ho già testato con arduino e va tutto bene. Il problema sussiste quando vado ad interagire con un programma esistente tipo ,centralino presepe,.Ad ogni fase volevo fare suonare una canzone natalizia, questo avviene ma solo in parte, e cioè la riproduzione non termina con la durata della fase ma continua e questo mi fa sballare il sincronismo.Penso che il problema sia dovuto al delay(), se cosi fosse utilizzare millis() sarà un po difficile per me.C’è qualcuno che gentilmente può aiutare a risolvere il problema o a suggerire qualche risoluzione. Grazie per tutto.
Allego lo sketch

sketch_mar09a.ino (5.08 KB)

probabilmente quando é finito la fase di un brano devi fare un stop e poi far partire il succesivo brano.
Ciao Uwe

grazie Uwe forse non mi sono espresso bene il brano voglio che finisca quando finisce la fase dell'alba o del giorno o della notte poichè per ogni fase c'è un nuovo brano . Lo stop cosa intendi delay o cosa oltro?
Grazie Giuseppe

Beh nel tuo programma fai un bel casino.
Nelle varie fasi hai un bel for per gestire le luci e tu che fai ? Metti il comando di play della canzone nel for !! Così da il comando ben 52 volte… e poi dopo la delay !! Sposta quel if play_state e mp3_play prima dei for:

if ( curr == 2 ) 
{ Serial.print("Fase: "); Serial.println("SUNSET");
  if(play_state == HIGH)  mp3_play(3);
  for ( int i=0; i<52; i++) 
  {   analogWrite(pin_down,   0);
      analogWrite(pin_sun,    fade[i] );
      analogWrite(pin_sunset, fade[(51-i)] );
      analogWrite(pin_moon,   0 );
      analogWrite(pin_starsA, 0 );
      analogWrite(pin_starsB, 0 );
      delay( timeStep );
      digitalWrite(RELAY_PIN2,LOW);
      digitalWrite(RELAY_PIN1,HIGH); 
  }
...

Grazie nid ora proverò a modificare lo sketch e ti farò sapere come va

Nid ho modificato lo sketch e diciamo che in parte va bene , mi spiego , il brano è più lungo del tempo delle fasi , quindi o devo allungare il tempo delle fasi o diminuire il tempo dei brani.Penso che il secondo caso sarà difficile attuarlo in quanto non so se c'è un programma che possa tagliare il tempo delle canzoni.Oppure dovrei utilizzare un altro arduino per eseguire i brani.Se hai qualche suggerimento te ne sarei grato.
Ciao Giuseppe

giuseppe, direi che tra i comandi di quella libreria c’e’ anche quello di stop.
prima di avviare un nuovo brano, devi stoppare il precedente.
Non conosco quella libreria, ma se esiste un mp3_play(numerobrano); spero bene che ci sia una mp3_stop(); o qualcosa del genere
Qui il loro wiki: http://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299
tra i comandi vedo un mp3_stop();

Hai ragione NID ,avevo già usato play_stop ma non fa altro che fermare la riproduzione , ho usato anche play_next passa al brano successivo e a fine loop metto play_stop.Il problema è il brano dura circa 2min. mentre le fasi hanno una durata di minimo 8sec e max 1min quindi non coincidono le due cose .Ma ilproblema secondo me è il delay time step che blocca tutto.Tu che dici??
Grazie per la tua pazienza . Giuseppe

Che non capisco bene il problema. Se hai una fase che dura circa 8 sec oppure 1 min, il brano ne dura 2 min, cosa ti aspetti che faccia il programma ? Non mi è chiaro quello che desideri fare.

Io voglio che per ogni fase suona un brano che duri quanto la fase.Mi spiego meglio :quando avviene l'alba che dura circa 20 sec deve suonare un brano che termina con la fine dell'alba,cosi per il tramonto e per il giorno ecc.Quindi poichè i brani musicali hanno durate superiori alle fasi non so come bloccare tale brano.Con play_stop si blocca la musica quindi con la fase successiva non suona il brano.
Spero di essere stato esaustivo.
Ciao Giuseppe

Non avendo quel modulo, non capisco. Se il modulo stà suonando un brano, fine fase, gli dici vai al successivo, lui invece continua con il brano che non è finito ?

si proprio cosi ,se inserisco play_stop si ferma il play e non passa al successivo brano,se inserisco play_next devo aspettare la fine del brano per passare al successivo. questo è il problema.

Prova play_stop e subito dopo play_next o play(numerobrano)
Altrimenti l'unica è leggersi bene il wiki su quel modulo di dfrobot
http://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299

Ok sto leggendo , difatti volevo capire il comando via seriale .Credo che avrò bisogno ancora della tua disponibilità non appena avrò fatto varie prove.Comunque grazie

Figurati, di nulla. Purtroppo non avendo quel modulo mi è impossibile fare prove.