Funcionamiento
Como se conecta
El ejemplo fue extraído de: learn.adafruit
- LINE 2:
- MIC+:
- MIC-:
- AGND:
- 3V3
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- TX
- RX
- SD CV
- ROUT
- LOUT
- AGND
- AGND
- GND - Cable negro.
- DREQ - Cable azul - Arduino #3
- VCC - Cable rojo.
- 3V3
- GND
- MISO - Cable azul - Arduino #12 (Mega 50)
- MOSI - Cable amarillo - Arduino #11 (Mega 51)
- SCLK - Cable blanco - Arduino #13 (Mega 52)
- RST - Cable verde - Arduino #9
- CS - Cable naranja - Arduino #10
- SDCS - Cable amarillo - Arduino #4
- XDCS - Cable naranja - Arduino #8
Preparamos todo antes de comenzar
- VCC - Cable rojo - 5V
- GND - Cable negro - GND
VCC
GND
Conectar SPY y RESET
- CLK - Cable blanco - Arduino #13 (Mega 52)
- MISO - Cable azul - Arduino #12 (Mega 50)
- MOSI - Cable amarillo - Arduino #11 (Mega 51)
- RST - Cable verde - Arduino #9
- CS - Cable naranja - Arduino #10
CLK - Cable blanco - Arduino #13 (Mega 52)
MISO - Cable azul - Arduino #12 (Mega 50)
MOSI - Cable amarillo - Arduino #11 (Mega 51)
RST - Cable verde - Arduino #9
CS - cable naranja - Arduino #10
Conectar el resto de las señales digitales
- XDCS - Cable naranja - Arduino #8
- SDCS - Cable amarillo - Arduino #4
- DREQ - Cable azul - Arduino #3
XDCS - Cable naranja - Arduino #8
SDCS - Cable amarillo - Arduino #4
DREQ - Cable azul - Arduino #3
(En este paso es diferente dependiendo la versión que tengas)
Si es un breakout v2
- AGND - Pin centro, tierra(ground) - Cable negro
- LOUT - Pin izquierdo - Cable naranja
- ROUT - Pint derecho - Cable amarillo
Para la versión v1
- GBUF - Pin centro, tierra(ground) - Cable negro
- LOUT - Pin izquierdo - Cable naranja
- ROUT - Pint derecho - Cable amarillo
Nos tiene quedar algo así
Luego vamos a nuestro Arduino software y elegimos:
Archivo -> Ejemplos -> Adafruit vs1003 library -> player_simple
Para poder usar este ejemplo es necesario que carguen .mp3 en la microsd
Estos se deben llamar track001.mp3 track002.mp3
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>
#define RESET 9
#define CS 10
#define DCS 8
#define CARDCS A0
#define DREQ A1
#define REC_BUTTON 7
Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer(RESET, CS, DCS, DREQ, CARDCS);
File recording; // el archivo donde va a hacer grabado
#define RECBUFFSIZE 128 // 64 o 128 bytes.
uint8_t recording_buffer[RECBUFFSIZE];
void setup() {
Serial.begin(9600);
Serial.println("Test de grabación VS1053 Ogg ");
// inicialización del reproductor
if (!musicPlayer.begin()) {
Serial.println("No se encontró el VS1053");
while (1); // No hace nada, solo sirve para el Arduino Leonardo
}
musicPlayer.sineTest(0x44, 500); // Hace un tono indicando que funciona
if (!SD.begin(CARDCS)) {
Serial.println("La SD fallo o no se encuentra");
while (1); // No hace nada
}
Serial.println("SD OK!");
// Ajusta el volumen de los canales izquierdo y derecho
musicPlayer.setVolume(10,10);
// Cuando presiono el boton graba!
pinMode(REC_BUTTON, INPUT);
digitalWrite(REC_BUTTON, HIGH);
// Carga el plugin de la memoria SD
if (! musicPlayer.prepareRecordOgg("v44k1q05.img")) {
Serial.println("No se pudo cargar el plugin");
while (1);
}
}
uint8_t isRecording = false;
void loop() {
if (!isRecording && !digitalRead(REC_BUTTON)) {
Serial.println("Comienzo grabar");
isRecording = true;
// Me fijo si ya existe el archivo y lo incremento
char filename[15];
strcpy(filename, "RECORD00.OGG");
for (uint8_t i = 0; i < 100; i++) {
filename[6] = '0' + i/10;
filename[7] = '0' + i%10;
// Si no existe crea el archivo y lo escribe
if (! SD.exists(filename)) {
break;
}
}
Serial.print("Grabación número: "); Serial.println(filename);
recording = SD.open(filename, FILE_WRITE);
if (! recording) {
Serial.println("No se pudo abrir el archivo");
while (1);
}
musicPlayer.startRecordOgg(true); // uso del micrfono
}
if (isRecording)
saveRecordedData(isRecording);
if (isRecording && !digitalRead(REC_BUTTON)) {
Serial.println("Fin de grabación");
musicPlayer.stopRecordOgg();
isRecording = false;
// elmina todos los datos
saveRecordedData(isRecording);
// cerrar
recording.close();
delay(1000);
}
}
uint16_t saveRecordedData(boolean isrecord) {
uint16_t written = 0;
// lee cuantas palabras quedan
uint16_t wordswaiting = musicPlayer.recordedWordsWaiting();
// procesa cuando hay mas de 256 (512 bytes) palabras por cada vez, para aumentar la velocidadat a time
while (wordswaiting > 256) {
for (int x=0; x < 512/RECBUFFSIZE; x++) {
// llenar el buffer
for (uint16_t addr=0; addr < RECBUFFSIZE; addr+=2) {
uint16_t t = musicPlayer.recordedReadWord();
recording_buffer[addr] = t >> 8;
recording_buffer[addr+1] = t;
}
if (! recording.write(recording_buffer, RECBUFFSIZE)) {
Serial.print("No se pudo grabar1"); Serial.println(RECBUFFSIZE);
while (1);
}
}
// llenar 512 bytes a la vez
recording.flush();
written += 256;
wordswaiting -= 256;
}
wordswaiting = musicPlayer.recordedWordsWaiting();
if (!isrecord) {
Serial.print(wordswaiting); Serial.println(" restante");
// terminando la grabación
uint16_t addr = 0;
for (int x=0; x < wordswaiting-1; x++) {
// llenar el buffer
uint16_t t = musicPlayer.recordedReadWord();
recording_buffer[addr] = t >> 8;
recording_buffer[addr+1] = t;
if (addr > RECBUFFSIZE) {
if (! recording.write(recording_buffer, RECBUFFSIZE)) {
Serial.println("No se pudo grabar2");
while (1);
}
recording.flush();
addr = 0;
}
}
if (addr != 0) {
if (!recording.write(recording_buffer, addr)) {
Serial.println("No se pudo grabar3"); while (1);
}
written += addr;
}
musicPlayer.sciRead(VS1053_SCI_AICTRL3);
if (! (musicPlayer.sciRead(VS1053_SCI_AICTRL3) & _BV(2))) {
recording.write(musicPlayer.recordedReadWord() & 0xFF);
written++;
}
recording.flush();
}
return written;
}
No hay comentarios:
Publicar un comentario