Go Down

Topic: Problema con Gatillo y DfPlayer Mini (Read 1 time) previous topic - next topic

BinaryDomain

Buenas tardes a todos, estoy teniendo problemas tratando de hacer un tipico "Gatilleo" en el que al pulsar el boton y mantenerlo, este mantiene la musica mientras lo apriete y se acabe cuando lo suelte.

Pero en lugar de eso consigo un Loop ya sea de silencio que al soltar el boton permite reproducir el audio probando este codigo:
Quote
int pulsador=0;                     //almacena el estado del botón
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
 
//** Programa **//
void setup() {
  pinMode(2, OUTPUT);        //declaramos el pin 2 como salida
  pinMode(4, INPUT);           //declaramos el pin 4 como entrada
  Serial.begin (9600);
    mp3_set_serial (Serial);      //set Serial for DFPlayer-mini mp3 module
    delay(1);                     // delay 1ms to set volume
    mp3_set_volume (30);          // value 0~30
}

void loop() {
  pulsador = digitalRead(4);   //lee el estado del botón
  if(pulsador==HIGH) {          //si el estado es pulsado
    mp3_play (1);
  }
  else{                                   //si el estado es no pulsado
  }
 
}
O Un Loop de la musica repitiendo una y otra y otra mientras mantengo pero sigue por mas que suelte el boton hasta que termine la musica:
Quote
int pulsador=0;                     //almacena el estado del botón
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
 
//** Programa **//
void setup() {
  pinMode(2, OUTPUT);        //declaramos el pin 2 como salida
  pinMode(4, INPUT);           //declaramos el pin 4 como entrada
  Serial.begin (9600);
    mp3_set_serial (Serial);      //set Serial for DFPlayer-mini mp3 module
    delay(1);                     // delay 1ms to set volume
    mp3_set_volume (30);          // value 0~30
}

void loop() {
  pulsador = digitalRead(4);   //lee el estado del botón
  if(pulsador==HIGH) {          //si el estado es pulsado
    mp3_play (1);
    delay (7000);
  }
  else{                                   //si el estado es no pulsado
  }
 
}
Estoy haciendo algo mal?

PD: Esta es la Pagina del DFPlayer en todo caso:
http://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299

surbyte

Code: [Select]
if(pulsador==HIGH) {          //si el estado es pulsado
    mp3_play (1);
  }

Solo para probar, elimina todo lo que tienes con else.
Debería sin entiendo bien como funciona, ejecutar mp3_play(1) porque estaba en high y demora hasta terminar de tocar y como mantienese presionado el pulsador, vuelve a hacerlo.
A ver si estoy en lo correcto?

BinaryDomain

Code: [Select]
if(pulsador==HIGH) {          //si el estado es pulsado
    mp3_play (1);
  }

Solo para probar, elimina todo lo que tienes con else.
Debería sin entiendo bien como funciona, ejecutar mp3_play(1) porque estaba en high y demora hasta terminar de tocar y como mantienese presionado el pulsador, vuelve a hacerlo.
A ver si estoy en lo correcto?
Algo funciono pero no, Al mantener pulsado ocurre ese Loop que se esta activando una y otra vez y no suena, Pero cuando suelto el boton, El sonido sale normalmente. Eso si, Ahora si lo vuelvo a presionar este se interrumpe y ocurre 1 de 2, O mantiene el Loop si se mantiene apretado o si lo suelto suena de vuelta... Una pequeña mejora si vamos al caso por que interrumpe  :)  pero no mantiene  :smiley-confuse:

surbyte

#3
Feb 20, 2016, 05:09 am Last Edit: Feb 20, 2016, 05:44 am by surbyte
La solución está en algo que no tiene la librería que es el comando
0x11 Repeat play [1:start repeat play][0:stop play]
Que te permite repetir un sonido.
Deberías implementarlo, agregándoselo a la librería.
entonces si presionas el boton lo disparas una vez pero luego si lo mantienes presionado le envias repetir con este comando 0x11 y el 1
lo detienes con 0.
en el archivo DFPlayer_mini_mp3.cpp agregas


Code: [Select]
//0x11 repeat play 1 repeat 0 stop
void mp3_repeat_play (boolean state) {
mp3_send_cmd (0x11, state);
}


y en DFPlayer_mini_mp3.h

Code: [Select]
void mp3_repeat_play (boolean state);

void mp3_single_loop (boolean state); 

BinaryDomain

#4
Feb 20, 2016, 06:11 am Last Edit: Feb 20, 2016, 06:18 am by BinaryDomain
La solución está en algo que no tiene la librería que es el comando
0x11 Repeat play [1:start repeat play][0:stop play]
Que te permite repetir un sonido.
Deberías implementarlo, agregándoselo a la librería.
entonces si presionas el boton lo disparas una vez pero luego si lo mantienes presionado le envias repetir con este comando 0x11 y el 1
lo detienes con 0.
en el archivo DFPlayer_mini_mp3.cpp agregas


Code: [Select]
//0x11 repeat play 1 repeat 0 stop
void mp3_repeat_play (boolean state) {
mp3_send_cmd (0x11, state);
}


y en DFPlayer_mini_mp3.h

Code: [Select]
void mp3_repeat_play (boolean state);

void mp3_single_loop (boolean state);
Gracias, lo hje integrado a los archivos y lo probare pero como iria en mi codigo por ejemplo? Aun soy algo noob en eso de programar jaja

surbyte

Prueba-error, mejora la prueba, disminuye el error.
intenta usandolo como si fuera mp3_play(1) dentro de la opción que se ejecuta cuando presionas el pulsador  y si dejas de presionarlo ejecuta mp3_repeat_play(0) pero hazlo una vez.
usa una variable bool que se ponga en true cuando se inicia la repetición y luego cuando dejas de pulsar e intenta ejecutar la opción else, preguntas si esa variable esta en 1, y si lo esta envias el comando para que deje de repetir y seguidamente pones la variable bool en false y dejará de ejecutarse.
tal vez debas hacer lo mismo cuando presionas.

Go Up