Ciao a tutti, sono uno studente di seconda (quasi terza) superiore e sono nuovo del forum, perciò scusatemi se ho inserito il post nella sezione sbagliata. Da tempo sto cercando di risolvere un problema riguardo un semplice riproduttore musicale con Arduino Due: sostanzialmente è basato sull'esempio SimpleAudioPlayer incluso nell'IDE 1.5.2.
Carico il file audio in formato WAV nella SD, attacco l'Arduino al pc, scrivo sul terminale la canzone che voglio e la sento bene; però i problemi arrivano quando voglio sentire un'altra canzone senza resettare l'Arduino.
Il file viene riprodotto, però con delle pause, diciamo che "lagga". Cosa può essere?
Ecco il codice:
#include <SD.h>
#include <SPI.h>
#include <Audio.h>
char AudioFileName[16];
File root;
void setup()
{
Serial.begin(9600);
while(!Serial){
;
}
Serial.println();
Serial.print("Preparazione scheda SD...");
if (!SD.begin(4)) {
Serial.println(" fallito!");
return;
}
Serial.println(" fatto.");
SPI.setClockDivider(4);
Audio.begin(88200, 100);
root = SD.open("/");
printDirectory(root, 0);
}
//---------------------------------------------------------
void printDirectory(File dir, int numTabs) {
while(true) {
File entry = dir.openNextFile();
if (! entry) {
Serial.println("**Lista completa**");
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 {
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}
//---------------------------------------------------------
void loop()
{
analogReadResolution(10);
int count=0;
uint8_t c;
inizio:
//---------------------------------------------------------
count = 0;
Serial.println("\r\nNome della canzone");
do {
while(!Serial.available()) ;
c = Serial.read();
if(c > ' ') AudioFileName[count++] = c;
} while((c != 0x0d) && (c != 0x0a) && (count < 14));
AudioFileName[count++] = 0;
//--------------------------------------------------------
Serial.print("Sto cercando la canzone...");
Serial.println(AudioFileName);
File myFile = SD.open(AudioFileName);
if (!myFile) {
Serial.print("Errore apertura:");
Serial.print(AudioFileName);
Serial.println();
goto inizio;
}
else {
Serial.println("trovata.");
}
const int S=1024;
short buffer[S];
Serial.println("In riproduzione");
Serial.println("(Premi 's' per fermare)");
//--------------------------------------------
while (myFile.available()) {
if(Serial.available()>0){
if(Serial.read()=='s'){
Serial.read();
goto inizio;
}
}
myFile.read(buffer, sizeof(buffer));
int volume = 1024;
Audio.prepare(buffer, S, volume);
Audio.write(buffer, S);
count++;
if (count == 100) {
Serial.print("*");
count = 0;
}
}
myFile.close();
Serial.println("Fine");
goto inizio;
//--------------------------------------------------------
}
Intanto vi ringrazio in anticipo per le risposte.