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