Lettore musicale con 4 pulsanti.

Ciao a tutti.
Come da titolo volevo riprodurre un lettore musicale (anche se in realtà mi servirà solo per riprodurre del parlato, quindi la qualità può essere non delle migliori).

Sono praticamente all'inizio con la mia esperienza Arduino (come detto nel topic di presentazione). Ho letto qualche guida e qualche post in giro.
Ma ho comunque alcuni dubbi.

Allora il circuito è semplice

Arduino UNO - (la versione cinese, ma tutto è già ben configurato e funzionante)

4 pulsanti

P- play
S- pausa
UP- brano successivo/volume up (tenuto a lungo)
DW- inizia di nuovo brano corrente/brano precedente(doppio click)/volume down(tenuto a lungo)

collegati alle porte 7-6-5-4, con le relative resistenze da 10k

il preamplificatore collegato a GND e 9

Il lettore SD con la porta 10, quella in foto:

il problema in se è il programma.

Avevo pensato ad una cosa simile ma ho qualche intoppo:

#include <pcmConfig.h>
#include <pcmRF.h>
#include <TMRpcm.h>
#include <SD.h>
#define SD_ChipSelectPin 10
#include <SPI.h>

// setto il numero dei pin
const int buttonP = 7;
const int buttonS = 6;
const int buttonUP = 5;
const int buttonDW = 4;
const int audioOUT = 9;

// setto il valore iniziale dei pulsanti - tutti aperti
int buttonstateP = 0;
int buttonstateS = 0;
int buttonstateUP = 0;
int buttonstateDW = 0;
int vol = 6; //valore defoult del volume
int pezzo = 1; // valore iniziale del brano
char brano = "audio %pezzo .wav"; // DOMANDA 1 = Come inserisco i varii brani ?

void setup() {
tmrpcm.speakerPin = 9;

// inizializzo input e output
pinMode(buttonP, INPUT);
pinMode(buttonP, INPUT);
pinMode(buttonP, INPUT);
pinMode(buttonP, INPUT);

Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) {
Serial.println("SD fail");
return;
}

tmrpcm.setVolume(vol);
}

void loop() {
if (digitalRead(buttonP) == HIGH) {
tmrpcm.play(brano);
}
else continue;
if (digitalRead(buttonS) == HIGH) {
tmrpcm.pause();
}
else continue;
if (digitalRead(buttonUP) == HIGH) {
pezzo = pezzo + 1;
tmrpcm.play(brano);
} // DOMANDA 2= come gestisco il tempo con mills()?
else continue;
if (digitalRead(buttonDOWN) == HIGH) {
if (mills() == 1) {
tmrpcm.play(brano);
}
else
{ pezzo = pezzo - 1;
tmrpcm.play(brano); // DOMANDA 3= corretto l'utilizzo di else?
}
else continue;
}

Manca la parte per gestire il volume, potrei comunque farla con un trimmer direttamente nel preapli.
i brani verrebbero inseriti nella SD con i nomi brano#pezzo.wav
Ho inserito alcune domande cruciali nel programma.

Grazie mille a tutti per l'aiuto :slight_smile:

Parto dal fondo :D.

// DOMANDA 3= corretto l'utilizzo di else?

Assolutamente no. L'istruzione continue si usa in un ciclo (while, for, ecc.) per farlo ricominciare dall'inizio, un tentativo di compilazione ti segnalerebbe immediatamente errore. Studia come si usa la struttura di selezione if/else if.

// DOMANDA 2= come gestisco il tempo con mills()?

Leggi la reference di Arduino e cerca sul forum la miriade di altri topic dedicata all'argomento.
Esempio d'uso di millis()

// DOMANDA 1 = Come inserisco i varii brani ?

Dipende il tuo registratore dove è localizzato e che connessioni supporta.
Ingenuamente mi viene da dire che puoi inserire la scheda SD in un apposito lettore del PC e trasferirci i brani. Se il registratore coincide col microfono del PC, la prima soluzione è la più naturale. Se invece è un dispositivo esterno, mettiamo uno smartphone, e non vuoi passare dall'intermediazione del PC oppure anche se si tratta del PC non vuoi sfilare l'SD da Arduino, penso che l'unica soluzione praticabile sia l'uso di uno shield Wi-Fi e una condivisione di rete o FTP.

Ciao, prima che passi un mod a "sgridarti", correggi il tuo post per favore ... i tag da usare per i programmi sono i "code", non i "quote" ... :wink:

>Ascalon: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra) e NON all'interno dei tag QUOTE !

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo