TODOPIC

Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: osmangutierrez en 01 de Febrero de 2022, 07:56:23

Título: Eliminar rebote de pulsador
Publicado por: osmangutierrez en 01 de Febrero de 2022, 07:56:23
Buen día a todos.
Con su ayuda tengo el siguiente código:

Código: [Seleccionar]
void loop(){
  int boton = digitalRead(sensor);
  switch (estado) {
    case 0x00:                            //espero al botón sea presionado
      {
         if (boton == 0) {
          estado = 0x01; 
          }
        break;
      }
    case 0x01:                            // activo el relay y espero x tiempo
      {
        digitalWrite(relay, HIGH);        //enciende relay
        digitalWrite(led, HIGH);
       
        delay(70);                        //tiempo de encendido del relay
       
        digitalWrite(relay, LOW);         //apaga relay
        digitalWrite(led, LOW);
        estado = 0x02;
        break;
      }
    default:                              // equivale a case 0x02
      {
        if (boton == 1) {                 //si el botón sigue presionado, espero hasta que lo suelte el usuario
          estado = 0x00;
          }
          break;
      }
  }
}

Mi sensor en basicamente un pulador y quisiera que me ayuden con la eliminacion del efecto rebote de dicho pulsador, segun he visto es mejor usar millis, pero ya tengo un delay(70).

Les agradeceria bastante su ayuda.
Gracias...
Título: Re:Eliminar rebote de pulsador
Publicado por: DominusDRR en 01 de Febrero de 2022, 10:12:45
Buen día a todos.
Con su ayuda tengo el siguiente código:

Código: [Seleccionar]
int sensor = 2;
int relay = 7;
int led = 9;

int estado = 0;                   
void setup(){
  pinMode(sensor, INPUT_PULLUP);   // entrada del sensor
  pinMode(relay, OUTPUT);          // salida de señal al relay
  pinMode(led, OUTPUT);            // salida de señal led indicador
}

void loop(){
  int boton = digitalRead(sensor);
  switch (estado) {
    case 0x00:                            //espero al botón sea presionado
      {
         if (boton == 0) {
          estado = 0x01; 
          }
        break;
      }
    case 0x01:                            // activo el relay y espero x tiempo
      {
        digitalWrite(relay, HIGH);        //enciende relay
        digitalWrite(led, HIGH);
       
        delay(70);                        //tiempo de encendido del relay
       
        digitalWrite(relay, LOW);         //apaga relay
        digitalWrite(led, LOW);
        estado = 0x02;
        break;
      }
    default:                              // equivale a case 0x02
      {
        if (boton == 1) {                 //si el botón sigue presionado, espero hasta que lo suelte el usuario
          estado = 0x00;
          }
          break;
      }
  }
}

Mi sensor en basicamente un pulador y quisiera que me ayuden con la eliminacion del efecto rebote de dicho pulsador, segun he visto es mejor usar millis, pero ya tengo un delay(70).

Les agradeceria bastante su ayuda.
Gracias...

¿Y pusiste los retardos que te recomendaron en el otro post que preguntaste o no funcionaron?
Título: Re:Eliminar rebote de pulsador
Publicado por: osmangutierrez en 01 de Febrero de 2022, 13:43:18

¿Y pusiste los retardos que te recomendaron en el otro post que preguntaste o no funcionaron?

Si puse un delay:

        digitalWrite(relay, LOW);         //apaga relay
        digitalWrite(led, LOW);
        delay(200);     <---------------
        estado = 0x02;
        break;

Tambien coloque un capacitor de 0.1uF paralelo al pulsador, en el protoboard funciona bien 🙃, lo probaré en la práctica y les cuento.
Título: Re:Eliminar rebote de pulsador
Publicado por: osmangutierrez en 02 de Febrero de 2022, 05:10:46
Funciona bien con el delay, abrí el hilo para ver si se podia evitar los rebotes de otra manera, con millis, si se puede y es mejor, belleza
gracias a todos
Título: Re:Eliminar rebote de pulsador
Publicado por: DominusDRR en 02 de Febrero de 2022, 11:53:54
Funciona bien con el delay, abrí el hilo para ver si se podia evitar los rebotes de otra manera, con millis, si se puede y es mejor, belleza
gracias a todos

Eso del delay era una sugerencia, como indiqué al inicio del otro hilo, no conozco Arduino, tu con mayor y mejor experiencia debes escoger la mejor manera de hacer un retardo.