qualcuno è riuscito a far funzionare correttamente questa scheda audio con arduino?
l'ho presa da ebay hong kong per la ridicola cifra di 4,50 euro, supporta microsd fino a 1gb e il formato wav/ad4
ho cambiato la saldatura del pin da 3,3v a 5v in modo da connetterla direttamente all'alimentazione dell'arduino nano (i 3,3v dell'arduino non funzionano se non viene alimentato dalla miniUsb).
ho collegato i pin CLK, DATA e RESET ai pin analogici dell'arduino A4, A5, A3 come in questo schema
finora sono riuscito a farla "cantare" sia con wav che con ad4, in particolare con quest'ultimo formato ho eliminato parecchi problemi di compatibilità di compressione
il problema è che non riesco a "comandare" con esattezza la lista di esecuzione e anche il volume.
Praticamente parte il primo file, poi si sente il secondo mentre il terzo non parte. Oppure parte il primo e poi basta. Insomma fa come gli pare.
questo è il codice che sto usando finora, di derivazione della nota schedina Somo che usa lo stesso integrato.
/*
SOMO-14D Test
Control a SOMO-14D module to play sounds
Reference
http://www.4dsystems.com.au/prod.php?id=73
Created 20 October 2009
By Shigeru Kobayashi
*/
const int clockPin = A4; // the pin number of the clock pin
const int dataPin = A5; // the pin number of the dataPina pin
const int resetPin = A3; // the pin number of the reset pin
const unsigned int VOLUME_0 = 0xFFF0;
const unsigned int VOLUME_1 = 0xFFF1;
const unsigned int VOLUME_2 = 0xFFF2;
const unsigned int VOLUME_3 = 0xFFF3;
const unsigned int VOLUME_4 = 0xFFF4;
const unsigned int VOLUME_5 = 0xFFF5;
const unsigned int VOLUME_6 = 0xFFF6;
const unsigned int VOLUME_7 = 0xFFF7;
const unsigned int PLAY_PAUSE = 0xFFFE;
const unsigned int STOP = 0xFFFF;
void setup() {
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(resetPin, OUTPUT);
digitalWrite(clockPin, HIGH);
digitalWrite(dataPin, LOW);
// reset the module
digitalWrite(resetPin, HIGH);
delay(100);
digitalWrite(resetPin, LOW);
delay(10);
digitalWrite(resetPin, HIGH);
delay(100);
sendCommand(VOLUME_7);
}
void loop() {
delay(4000);
// play "0000.ad4"
sendCommand(0x0002);
delay(3000);
// play "0001.ad4"
sendCommand(0x0004);
delay(4000);
// play "0002.ad4"
sendCommand(0x0002);
delay(4000);
// stop playing
sendCommand(STOP);
delay(1000);
}
void sendCommand(int addr)
{
digitalWrite(clockPin, LOW);
delay(2);
for (int i=15; i>=0; i--)
{
delayMicroseconds(50);
if((addr>>i)&0x0001 >0)
{
digitalWrite(dataPin, HIGH);
//Serial.print(1);
}
else
{
digitalWrite(dataPin, LOW);
// Serial.print(0);
}
delayMicroseconds(50);
digitalWrite(clockPin, HIGH);
delayMicroseconds(50);
if(i>0)
digitalWrite(dataPin, LOW);
else
digitalWrite(dataPin, HIGH);
delayMicroseconds(50);
if(i>0)
digitalWrite(clockPin, LOW);
else
digitalWrite(clockPin, HIGH);
}
delay(20);
}
questa è la wave form della trasmissione seriale a 2 (dal manuale):
questo è il manuale
infine il video del primo test: