Hola a todos.
Es mi primer mensaje en el foro, también mi primer proyecto con Arduino. Espero haber entendido bien las normas del foro y no saltarme ninguna.
Para contextualizar, comentaros que soy Ingeniero Informático y que tengo mucha experiencia programando pero no demasiada con proyectos electrónicos. Se trata de un proyecto profesional y que, a grandes rasgos, implementa un reproductor de mp3 "doble", es decir: el desarrollo cuenta con dos DFPlayer mini, cada uno con un audio diferente pero de la misma duración. La reproducción de ambos audios está sincronizada: se inician ambos a la vez; al pausar, se pausan ambos a la vez, etc.
Os paso un esquema, espero que sea lo más fiel posible a la realidad, también es mi primera vez con fritzing.
Se trata de dos DFPlayer Mini HW-247A y utilizo la librería GitHub - enjoyneering/DFPlayer: Small and fast Arduino library for DFPlayer Mini MP3 Player para controlarlos.
Os dejo el código que estoy utilizando:
#include <SoftwareSerial.h>
#include <DFPlayer.h>
#define MP3_SERIAL_SPEED 9600 //DFPlayer Mini suport only 9600-baud
#define MP3_SERIAL_TIMEOUT 350 //average DFPlayer response timeout 200msec..300msec for YX5200/AAxxxx chip & 350msec..500msec for GD3200B/MH2024K chip
#define PULSADOR_PLAY 6
#define LED_PIN_VERDE 7
#define PULSADOR_STOP 8
#define LED_PIN_ROJO 9
SoftwareSerial mp3Serial(2, 3, false); //false=signal not inverted
DFPlayer mp3;
SoftwareSerial mp3Serial_2(4, 5, false); //false=signal not inverted
DFPlayer mp3_2;
bool playPulsado = false;
bool play = false;
bool pause = false;
int valorPulsadorPlay = 0;
int valorPulsadorStop = 0;
int contador = 0;
void setup()
{
Serial.begin(115200);
// INICIALIZO DFPLAYER MINI 1
mp3Serial.begin(MP3_SERIAL_SPEED);
mp3.begin(mp3Serial, MP3_SERIAL_TIMEOUT, DFPLAYER_MINI, false); //"DFPLAYER_HW_247A" see NOTE, false=no feedback from module after the command
mp3.stop(); //if player was runing during ESP8266 reboot
mp3.reset(); //reset all setting to default
mp3.setSource(2); //1=USB-Disk, 2=TF-Card, 3=Aux, 4=Sleep, 5=NOR Flash
mp3.setEQ(0); //0=Off, 1=Pop, 2=Rock, 3=Jazz, 4=Classic, 5=Bass
mp3.setVolume(25); //0..30, module persists volume on power failure
mp3.sleep(); //inter sleep mode, 24mA
mp3Serial.listen(); //enable interrupts on RX-pin for better response detection
mp3Serial.stopListening(); //disable interrupts on RX-pin
// INICIALIZO DFPLAYER MINI 2
mp3Serial_2.begin(MP3_SERIAL_SPEED);
mp3_2.begin(mp3Serial_2, MP3_SERIAL_TIMEOUT, DFPLAYER_MINI, false); //"DFPLAYER_HW_247A" see NOTE, false=no feedback from module after the command
mp3_2.stop(); //if player was runing during ESP8266 reboot
mp3_2.reset(); //reset all setting to default
mp3_2.setSource(2); //1=USB-Disk, 2=TF-Card, 3=Aux, 4=Sleep, 5=NOR Flash
mp3_2.setEQ(0); //0=Off, 1=Pop, 2=Rock, 3=Jazz, 4=Classic, 5=Bass
mp3_2.setVolume(25); //0..30, module persists volume on power failure
mp3_2.sleep(); //inter sleep mode, 24mA
mp3Serial_2.listen(); //enable interrupts on RX-pin for better response detection
mp3Serial_2.stopListening(); //disable interrupts on RX-pin
// INICIANDO LEDS Y PULSADORES
pinMode(PULSADOR_PLAY, INPUT_PULLUP);
pinMode(PULSADOR_STOP, INPUT_PULLUP);
pinMode(LED_PIN_VERDE, OUTPUT);
digitalWrite(LED_PIN_VERDE, LOW);
pinMode(LED_PIN_ROJO, OUTPUT);
digitalWrite(LED_PIN_ROJO, HIGH);
}
void loop()
{
valorPulsadorPlay = digitalRead(PULSADOR_PLAY);
valorPulsadorStop = digitalRead(PULSADOR_STOP);
if (pause){
if (contador == 20000) {
int valorLedPinVerde = digitalRead(LED_PIN_VERDE);
digitalWrite(LED_PIN_VERDE, !valorLedPinVerde);
contador = 0;
}
contador++;
}
if (valorPulsadorPlay == LOW)
{
if (!playPulsado)
{
if (!play)
{
play = true;
digitalWrite(LED_PIN_VERDE, HIGH);
digitalWrite(LED_PIN_ROJO, LOW);
mp3.playTrack(1);
mp3_2.playTrack(1);
}
else
{
if (!pause)
{
pause = true;
mp3.pause();
mp3_2.pause();
}
else
{
pause = false;
digitalWrite(LED_PIN_VERDE, HIGH);
mp3.resume();
mp3_2.resume();
}
}
}
playPulsado = true;
}
else
{
playPulsado = false;
}
if (valorPulsadorStop == LOW)
{
if (play)
{
play = false;
pause = false;
digitalWrite(LED_PIN_VERDE, LOW);
digitalWrite(LED_PIN_ROJO, HIGH);
mp3.stop();
mp3_2.stop();
}
}
//delay(1000);
}
Y aquí las dudas:
- La función setVolume() no funciona, no estoy seguro que falla pero el volumen no cambia aunque modifique el valor que le paso.
- No estoy seguro de haber conectado bien los altavoces. Si en lugar de utilizar las salidas DAC_R y DAC_L utilizo las salidas SPK1 y SPK2, el volumen se incrementa considerablemente (aunque sigue sin funcionar setVolume). Creo que el problema es que no acabo de entender la diferencia entre estas salidas: DAC_R y DAC_L paracen utilizarse para estéreo y SPK1 y SPK2 para mono, pero no entiendo porque son necesarias las cuatro salidas.
- Necesito hacer 8 montajes del prototipo una vez lo termine. No se cual es la mejor opción: por una parte, utilizar una PCB y soldar yo los componentes y las pistas; por otra, utilizar el propio servicio que parece ofrecer fritzing y por el cual te crean el circuito a partir de tu diseño.
Cualquier otra sugerencia o comentario será bienvenido, ando un poco verde en este mundillo.
¡Gracias