Riprodurre file audio(WAV) su SDcard con arduino YUN

Salve a tutti!
Come da titolo del topic avrei bisogno di riprodurre un annucio audio, ad esempio in formato .WAV in una microSD card, alla pressione di un pulsante utilizzando Arduino Yun.

Come probabilmente sapete Arduino Yun è provvisto di un lettore sd card integrato..

In rete ho trovato questo code che potrebbe fare al caso mio..

#include <SD.h>             // includi la libreria SD per la gestione della scheda
#define SD_ChipSelectPin 10  // utilizza il pin 10 per collegare il CS della SD, puoi usare il pin che vuoi
#include <TMRpcm.h>         // includi la libreria TMRpcm per la musica!
#include <SPI.h>            // includi la libreria SPI per la comunicazione con la SD

TMRpcm tmrpcm;   // crea l'oggetto tmrpcm

unsigned long time = 0;
int led_pin = 7; // pin su cui collegheremo il led (opzionale)

void setup() {

  tmrpcm.speakerPin = 9; // pin utilizzabili 5,6,11 o 46 sulla Mega, 9 sulla Uno, Nano, etc

  // per abilitare un'uscita complementare togliere il commento alla riga sotto:
  // pinMode(10,OUTPUT); pin utilizzabili 9,10; Sulla Mega: 5-2,6-7,11-12,46-45

  Serial.begin(115200);     // inizializza la porta seriale
  pinMode(led_pin, OUTPUT);
  if (!SD.begin(SD_ChipSelectPin)) {  // se la scheda non è rilevata printa "SD fail"
    Serial.println("SD fail");
    return;
  }
  else {
    Serial.println("SD ok");    // se la scheda viene rilevata stampa "SD ok"
  }
  tmrpcm.play("music");         // riproduci il file "music" che trovi nella SD
}

void loop() {

  // mentre il brano è in esecuzione fai lampeggiare il led (opzionale)
  // è una dimostrazione per mostrare che mentre il brano
  // viene eseguito è possibile far fare altro ad Arduino
  if (tmrpcm.isPlaying() && millis() - time > 50 ) {
    digitalWrite(led_pin, !digitalRead(led_pin));
    time = millis();
  } else if (millis() - time > 500) {
    digitalWrite(led_pin, !digitalRead(led_pin));
    time = millis();
  }

  // aprendo il serial monitor è possibile utilizzare i seguenti comandi,
  // ad esempio scrivendo "=" alzerò il volume
  if (Serial.available()) {
    switch (Serial.read()) {
      case 'd': tmrpcm.play("music"); break;
      case 'P': tmrpcm.play("temple"); break;
      case 't': tmrpcm.play("catfish"); break;
      case 'p': tmrpcm.pause(); break;
      case '?': if (tmrpcm.isPlaying()) {
          Serial.println("A wav file is being played");
        } break;
      case 'S': tmrpcm.stopPlayback(); break;
      case '=': tmrpcm.volume(1); break;
      case '-': tmrpcm.volume(0); break;
      case '0': tmrpcm.quality(0); break;
      case '1': tmrpcm.quality(1); break;
      default: break;
    }
  }
}

Il problema sorge subito in quanto questo è un codice relativo ad arduino uno con lutilizzo di un circuito che collega direttamente una sd card ai pin di arduino, in questo caso ad esempio il CS della sd è collegato sul 10. Avendo io un arduino YUN come dico al programma di leggermi la sd che non l'ho collegata a nessun pin essendo integrata?
Non riesco a capire se c'è un pin sulla scheda che mi legge la sd card. Utilizzando questo codice e caricandolo sulla scheda da serial monitor non mi dice niente, ho utilizzato anche il Card Info che si trova gia pronto sull'Ide di arduino e il serial monitor mi dice che non trova la SD, ho provato a cambiare il pin del CS, ad esempio in molti datasheet si dice che è il pin 4, ma niente da fare.

Premetto che la SD card è formattata in base ai requisiti di arduino ovvero FAT32, è di 8GB.
Inoltre dal programma puTTY o winSCP io riesco a vedere tranquillamente la sd sotto l'indirzzo /mnt/sda1 dove trovo il file audio che ho correttamente convertito per la lettura.

Qualcuno conosce la YUN?
Sa dirmi come gestire la lettura della scheda in uno scketch?

sperando di essere stato chiaro con la richiesta di aiuto vi ringrazio infinitamente.

Almax

Il codice che hai trovato non va bene per la Yun.
Nella Yun la sd card è accessibile solo lato linux come descritto qui
Le mie conoscenze si fermano qui (non ho la yun per provare) ma da quel che leggo qui e qui mi sa che dovrai percorrere la strada indicata nel blog di Arduino

>almax85: Ma tu sai come è fatto Arduino Yún ? ? ? :o

Come vedi la SD è collegata al mondo Linux e NON ad Arduino, quindi ... da Arduino NON ci accedi direttamente.

Guglielmo

P.S.: E nota che anche la USB Host, il WiFi e la Ethernet sono accessibili solo da Linux ... Arduino può solo scambiare informazioni via seriale con Linux, ma poi l'accesso a dette periferiche lo deve fare un programma Linux.

Prima di tutto grazie davvero per le risposte e per i link fornitemi.
Il motivo per cui mi trovo a lavorare con una scheda YUN è perchè lo scorso anno ho progettato un plastico ferroviario controllato in WiFi con una applicazione android che interagiva con lo YUN attraverso la libreria bridge che a quanto pare potrebbe aiutarmi anche in questo caso. Adesso vorrei integrare il lavoro inserendo degli annunci audio alla fermata e partenza dei treni. Detto ciò però in effetti non conosco bene le caratteristiche di questa scheda.

questo codice mi pare buono per me

#include <Process.h>

const int buttonPin = 2;
const int ledPin =  13;

int buttonState = 0;
Process p;

void setup() {
  Bridge.begin();
  pinMode(ledPin, OUTPUT);      
  pinMode(buttonPin, INPUT);     
  Serial.begin(57600);
}

void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {     
    digitalWrite(ledPin, HIGH);  
    p.runShellCommand("madplay /root/ItCouldWork.mp3");
    while(p.running());  
    Serial.println("it works!");
  } 
  else {
    digitalWrite(ledPin, LOW); 
  }
}

nel mio caso dovrei modificare il p.runShellCommand ("madplay /mnt/sda1/file.wav)
Non ho ancora provato se funziona.
Potrei modificare l'uscita di ascolto? Nel senso che qui si richiede l'utilizzo di una scheda audio usb collegata alla porta di arduino, è possibile invece assegnare un pin in cui io possa prelevare l'audio del file con un semplice speaker collegato?

grazie ancora