TMRpcm e riproduzione wav

Ciao a tutti,
non riesco a capire quale e dove sia il problema,
qualcuno mi può aiutare?

questo è lo sketch che ho realizzato:

#include <SD.h>                      // need to include the SD library
//#define SD_ChipSelectPin 53  //example uses hardware SS pin 53 on Mega2560
#define SD_ChipSelectPin 10  //using digital pin 4 on arduino nano 328, can use other pins
#include <TMRpcm.h>           //  also need to include this library...
#include <SPI.h>

TMRpcm tmrpcm;   // create an object for use in this sketch

unsigned long time = 0;

const int shotpin = 8;
int shot = 0;
const int ignpin=7;
int ign=0;

void setup() {
  
  pinMode(shotpin,INPUT);
  pinMode(ignpin,INPUT);

  tmrpcm.speakerPin = 9; //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc
  //Complimentary Output or Dual Speakers:
  //pinMode(10,OUTPUT); Pin pairs: 9,10 Mega: 5-2,6-7,11-12,46-45

  Serial.begin(115200);
  pinMode(9, OUTPUT); //LED Connected to analog pin 0
  if (!SD.begin(SD_ChipSelectPin)) {  // see if the card is present and can be initialized:
    Serial.println("SD fail");
    return;   // don't do anything more if not

  }
  else {
    Serial.println("SD ok");
  }

 

  
}
void loop() {
shot=digitalRead(shotpin);
ign=digitalRead(ignpin);

if (shot==HIGH)
{
  tmrpcm.play("shot.wav");
}

if (ign==HIGH)
{
  tmrpcm.play("pwron.wav");
}
}

e i problemi sono questi:

  1. viene riprodotto solo un file audio, in questo caso solo “shot.wav” e non sempre
  2. il secondo file sembra non venire proprio considerato

secondo voi quale e dove è il problema?

grazie
DD

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Mi ero presentato quando mi sono iscritto al forum qualche anno fa ma provvederò a ripresentarmi.

Credo che il pin 10 sia riservato all’uscita della libreria: meglio usare un’altro pin per la selezione della SD.

Inoltre bisogna vedere come hai collegato gli interruttori.

#include <SD.h>
#include <TMRpcm.h>
#include <SPI.h>

#define SD_ChipSelectPin  4
#define shotpin           8
#define ignpin            7
#define speakerPin        9       // Pin pairs: 9, 10 Mega: 5-2, 6-7, 11-12, 46-45

TMRpcm tmrpcm;

unsigned long time = 0;
int shot = 0;
int ign = 0;

void setup() {

  tmrpcm.speakerPin = speakerPin;      // 5, 6, 11 or 46 on Mega, 9 on Uno, Nano, etc

  pinMode(shotpin, INPUT);
  pinMode(ignpin, INPUT);
  pinMode(speakerPin, OUTPUT);

// Complimentary Output or Dual Speakers:
// pinMode(10, OUTPUT);

  Serial.begin(115200);
  if (!SD.begin(SD_ChipSelectPin)) {    // see if the card is present and can be initialized:
    Serial.println("SD fail");
    return;
  }
  else {
    Serial.println("SD ok");
  }
}

void loop() {
  shot = digitalRead(shotpin);
  ign = digitalRead(ignpin);
  if (shot == HIGH) tmrpcm.play("shot.wav");
  else if (ign == HIGH) tmrpcm.play("pwron.wav");
}

Bhe, non è tanto carino quello che hai detto nella presentazione, questo forum sarà l'ultima spiaggia per te, magari nel tuo progetto, non lamentarti però delle scarse risposte, hai fatto passare un giorno e ancora non hai risposto, se io faccio una domanda e sto veramente in ansia di continuare, sto incollato allo schermo e sta sicuro che "un ok ho letto .. ci provo ... grazie" lo scrivo anche se sto al semaforo mentre è rosso, piuttosto mi accosto per rispondere se ad una cosa ci tengo davvero!.

Se andiamo a vedere, non hai nemmeno descritto l'hardware che possiedi, mod arduino? shield? ... come si fa a darti una dritta?

non entro in merito all'impostazione dei pin, dato che non si sa che hardware hai, alcuni shield usano il 4 altri 8 e altri il 10 sulla SD

ign=digitalRead(ignpin);

leggi un pulsante, manca un debounce sul pulsante

questo wav viene riprodotto , ok dove ... uno schema? un link di riferimento?

ciao

Capisco che probabilmente non siano piaciute le mie parole sulla presentazione ma, nella mia esperienza nel forum, ho sempre ricevuto "soluzioni" su punteggiatura dovuti ad errori di battitura mentre postavo lo sketch (dato che arduino caricava lo sketch e che quindi la punteggiatura era corretta) o realà simili. Ad ogni modo, lo stesso regolamento del forum dice di effettuare ricerche prima di fare richieste pertanto, in un modo o nell' altro, il forum risulta essere l' ultima spiaggia.

Per quanto riguarda il tempo di risposta da parte mia...passo molto del tempo, oltre a fare altre cose, a cercare soluzioni al mio problema e a procedere col mio progetto (e anche con altri) pertanto non leggo subito.

tornando al quesito.

il progetto prevede l' utilizzo di 3 arduino nano, uno dei quali dedicato all' audio. utilizzo una shield di lettura schede microsd catalex un amplificatore lc technology e i pulsati sono dei microswitch no/nc (che poi andrò a sostituire con una delle uscite di uno degli altri 2 arduino nano.

Dato che i file da riprodurre dovrebbero andare alla pressione del pulsante (poi all' "HIGH" ricevuto dall' altro arduino) la funzione dobouce non risulta essere rilavante dato che un eventuale ritardo nell' attuazione non crea fastidi (ho provato per scrupolo prima di scrivere sul forum ma il risultato non cambia.

lo schema finale (anche se semplificato ma serve a dare l' idea) è questo:

i file sono .WAV codificati il mono a 8bit 44000hz, ho provato anche i 16000Hz.

per i pin della shield sd ho cercato nella libreria tmrpcm e i collegamenti sono stati fatti come descritto:

cs=10 mosi=11 miso=12 sck=13

speackepin=9 (uscita che va all' amplificatore lc technology da 50w

Grazie ancora per il supporto

BushidoD: Ciao a tutti, non riesco a capire quale e dove sia il problema, qualcuno mi può aiutare?

Ti ricordo che il forum NON è l'assistenza di una azienda commerciale, con gente pagata per rispondere e in fretta. Siamo altri utenti come te, magari non in molti conoscono quella libreria. Poi, perchè non hai continuato nel tuo altro thread (sempre su WAV e SD) ? http://forum.arduino.cc/index.php?topic=310799.msg2155090#msg2155090

Io farei prima una prova banale. Inverti i file rispetto ai bottoni e dicci che succede.

if (ign==HIGH)
{ tmrpcm.play("shot.wav");
}
if (shot==HIGH)      // invertiti
{ tmrpcm.play("pwron.wav");
}

P.S. la foto dello schema non si vede

Io infatti non ho fretta e non ho nemmenomai detto di averne. sono stato richiamato da pablo per la mia mancanza di celerità nel rispondere immediatamente

non lamentarti però delle scarse risposte, hai fatto passare un giorno e ancora non hai risposto, se io faccio una domanda e sto veramente in ansia di continuare, sto incollato allo schermo e sta sicuro che "un ok ho letto .. ci provo ... grazie" lo scrivo anche se sto al semaforo mentre è rosso, piuttosto mi accosto per rispondere se ad una cosa ci tengo davvero!

per quanto riguarda l'altro quesito:

Poi, perchè non hai continuato nel tuo altro thread (sempre su WAV e SD) ? http://forum.arduino.cc/index.php?topic=310799.msg2155090#msg2155090

non ho continuato perchè era un thread diverso, in quello chiedevo come riuscire a far funzionare la shield microsd con i wav. in questo pongo il quesito su come risolvere il problema di far riprodurre più file e di come risolvere il fatto che a volte, il file che riesco a riprodurre, a volte va e a volte no o se imposto due ingressi input per far andare due file wav devo premere entrambi i pulsanti contemporaneamente che però permettono la riproduzione del file che riesco a far andare con un pulsante solo.

la soluzione che mi proponi

if (ign==HIGH)
{ tmrpcm.play("shot.wav");
}
if (shot==HIGH)      // invertiti
{ tmrpcm.play("pwron.wav");
}

l' ho usata per provare se tutti i file vengono letti (cosa che succede) e per verificare lo sketch (che risulta essere il problema.

non ha altra utilità pratica però dato che non avrebbe senso comandare il suono di "sparo" col comando di "accensione" e il suono di "accensione" col comando di "sparo" che crea oltretutto confusione nello scrivere lo sketch.

quello che in questi giorni sono riuscito ad ottenere è che dando il solo comando "shot" ed eliminando il comando "ign", premendo il pulsante, il suono "shot.wav" viene emesso regolarmente senza problemi ma io devo far andare almeno altri 3 file .wav soggetti a altri 3 comandi differenti

grazie cmq

BushidoD:
la soluzione che mi proponi

if (ign==HIGH)

{ tmrpcm.play(“shot.wav”);
}
if (shot==HIGH)      // invertiti
{ tmrpcm.play(“pwron.wav”);
}




l' ho usata per provare se tutti i file vengono letti (cosa che succede) e per verificare lo sketch (che risulta essere il problema.

Non ho mica capito. Se nello sketch attuale premendo button shot funziona, prova a invertire e fargli suonare l’altro wav.
E’ la prova dello “scemo” (non tu). Cioè, tu dici all’inizio che solo shot.wav viene riprodotto e lo fai con button shot.
Se mettendo altro file eseguito da button shot, può succedere:

  1. viene eseguito altro file, quindi non è il file il problema ma il “premere”
  2. non viene eseguito, quindi il problema non è il premere ma il file in se stesso

scusa non avevo capito bene. Ho provato a far eseguire i vari file .wav che vorrei riprodurre e saparatamente vanno ( in questo caso sono shot.wav, pwron.wav, pwroff.wav e song.wav), quindi il problema non è nei files audio.

Se però io inserisco il comando per gestire un secondo file con un secondo bottone non riesco a riprodurre il secondo file e nemmeno il primo premendo singolarmente i bottoni ma premendoli entrambi viene riprodotto il primo file.

provo a spiegarmi meglio:

caso I bottone 1 riproduce file A e questo va bene,

caso II bottone 1 riproduce file A e bottone 2 file B, se premo il bottone 1 non riproduco nulla, se premo il bottone 2 non riproduco nulla, se premo 1 e 2 riproduco A

Posta una foto dei collegamenti o schema degli stessi.
La foto che avevi postato sopra non si vede.

Ho difficoltà a postare lo schema dei collegamenti quindi provo a spiegarli a parole.

uso un Arduino nano a cui ho collegato cosi:

l' SDshield: CS al pin 10 MOSI al pin 11 MISO al pin 12 SCK al pin 13 VCC al pin 5V GND al pin GND

l'amplificatore audio da 50w: SIG al pin 9 VCC al pin 5V GND al pin GND

l'interruttore 1 (per il momento un deviatore): NO al pin GND NC al pin 5V COM al PIN 8

l'interruttore 2 (un altro deviatore) NO al pin GND NC al pin 5V COM al PIN 7

Tutti i GND e tutti i 5V sono in parallelo tra loro.

appena riesco a fare uno schema che si possa postare provvedo

intanto comunque grazie