Go Down

Topic: Microfono Ding-Dong (Read 210 times) previous topic - next topic

ivega85

Mar 21, 2019, 07:33 am Last Edit: Mar 25, 2019, 04:48 pm by surbyte Reason: Errores y códigos deben ir con etiquetas
Estimados, estoy por finalizar un proyecto, comencé hace poco a programar Arduino, dejé para el final una cosa que parecía muy sencilla pero me está llevando varios dolores de cabeza!!

Función: Al presionar un pulsador debe activarse un relé y emitir por única vez un sonido mediante un reproductor de Mp3 y su función myDFPlayer.play(); al Soltar el pulsador debe reproducir otro sonido y desactivar el relé.
La idea es hacer un microfono Ding-Dong similar al de los aeropuertos, pulso, emite un sonido, se habla, suelto y emite otro sonido.

Inicialmente funciona al presionar... pero se repite una y otra vez al mantener presionado el pulsador y no para de reproducir el sonido... Además no puedo lograr que al soltar el pulsador emita el sonido solo una vez... ya que queda sin pulsar constantemente... y nuevamente reproduce el sonido una y otra vez...

Se que debe ser una tontería, pero debido a mi inexperiencia y desconocimiento no logro darme cuenta como realizarlo...

Si alguno puede  orientarme, estaría muy agradecido...

PD: El código es realmente largo, solo voy a resaltar las líneas en las que tengo el inconveniente!


Code: [Select]
//////////////MICROFONO ALTOPARLANTE/////////////////
estadoBoton = digitalRead(PULFORM);

if(estadoBoton != estadoBotonAnterior) {
  if(antirebote(PULFORM)) {
    analogWrite(LedForm,0);
    myDFPlayer.play(18);
    delay(2000);
    digitalWrite (AUDIOPOT, HIGH); // Habilita señal de audio a potencias
    K = true;
    delay(2000);}
  }
  if ((K == true) && (PULFORM == LOW)){
    Serial.println("NO PULSADO");
    myDFPlayer.play(19);
    delay(2000);
   digitalWrite (AUDIOPOT, LOW); // Habilita señal de audio a potencias

  }

surbyte

Comienza editando tu título y reemplázalo por algo que tenga que ver con tu consulta

Ayuda, por favor se enmarca dentro de los títulos INUTILES que las normas del foro dicen que no deben usarse.

Cito el punto 5 de las normas del foro

Quote
5. Piensa un título y descriptivo

Trata de resumir tu problema con un título inteligente, útil e informativo.
Un título útil salta a la vista de las personas que podrían conocer la respuesta.  Los títulos inútiles son los que deberías evitar.
Ejemplos de títulos inútiles que deberías evitar:
• ERROR EN CODIGO, AYDUA URGENTE
• Problema al programar
• Tengo un error
• Error
• Tendré problemas?
• Novato en apuros
• POR FAVOR NECESITO AYUDA RAPIDO!!!!
Ejemplo de un buen título:

RIG

Bueno con ese pedazo de código que pusiste está un poco complicado saber para que es " if(antirebote(PULFORM))"
ademas que hacen esos delay y la variable "K". Entonces dejando de lado todo eso, creo que tu problema esta en la forma en que detectas cuando el boton se presiona y cuando se suelta.

prueba lo siguiente:
Code: [Select]
//////////////MICROFONO ALTOPARLANTE/////////////////
estadoBoton = digitalRead(PULFORM);

if(estadoBoton && !estadoBotonAnterior) {    //Me imagino que aqui es cuando presionas el boton
    analogWrite(LedForm,0);
    myDFPlayer.play(18);
    delay(2000);                                  //Me gustaria saber para que es éste delay
    digitalWrite (AUDIOPOT, HIGH); // Habilita señal de audio a potencias
    K = true;
  
  }
  
  if (!estadoBoton && estadoBotonAnterior){    // y aqui cuando lo sueltas
    Serial.println("NO PULSADO");
    myDFPlayer.play(19);
    delay(2000);
   digitalWrite (AUDIOPOT, LOW); // Habilita señal de audio a potencias

  }

    estadoBotonAnterior=estadoBoton;

 Si esa variable antirrebote es para evitar el rebote del botón(obvio no?), entonces  no la necesitas porque con ese delay de 2 segundos  te aseguro que no tendrás ningún rebote

Go Up