Inicio >> Aprende >> Arduino >> Aprende >> Arduino Digital: Eliminación de Rebote

Arduino Digital: Eliminación de Rebote

En este ejemplo se muestra la forma de eliminación de rebote en una entrada, lo que significa comprobar dos veces en un corto período de tiempo para asegurarse de que definitivamente se presiona. Sin la eliminación de rebotes, al pulsar el botón una vez, puede parecer al código como múltiples presionadas. Hace uso de la función millis() para realizar un seguimiento de las veces que se pulsa el botón.

 

Hardware Requerido

 

  • Tarjeta Arduino
  • Pulsador
  • Resistencia (10k ohm)
  • Resistencia (220 ohm)
  • Protoboard

 

Circuito

 

 

  

Esquemático

 

 

 

Código: 

/*

 Eliminación de Rebote

Cada vez que el pin de entrada va de LOW-HIGH (por ejemplo, cuando se usa un pulsador), el pin de salida se activa de LOW-HIGH o de HIGH-LOW.

Este código esta basado en Limor Fried's versión of debounce, pero la lógica es invertida para este ejemplo. En aquel ejemplo, el pulsador retorna LOW cuando esta cerrado, y HIGH cuando esta abierto. Acá, el pulsador retorna HIGH cuando se presiona y LOW cuando no se presiona.

*/


// declaracion de constantes. Estas son usadas para configurar el numero de pin
const int buttonPin = 2; // el número del pin para la entrada del pulsador
const int ledPin = 13; // el número de pin para la entrada del LED

// declaracion de variables:
int ledState = HIGH; // el estado actual del pin de salida
int buttonState; // la lectura actual del pin de entrada
int lastButtonState = LOW; // lectura previa del pin de entrada

long lastDebounceTime = 0; // la ultima vez que el pin de salida cambio
long debounceDelay = 50;

void setup() {
      pinMode(buttonPin, INPUT);
      pinMode(ledPin, OUTPUT);

// inicializa el estado del LED
      digitalWrite(ledPin, ledState);
}

void loop() {
// lee el estado del pulsador y lo asigna a una variable local
int reading = digitalRead(buttonPin);

// revisa si el pulsador fue presionado
// (ejemplo, la entrada fue de LOW-HIGH), y tu estas esperando
// suficiente tiempo desde la última pulsación para ignorar el ruido:

// si el pulsador cambia, debido al ruido o a la pulsación:
     if (reading != lastButtonState) {
// resetea el tiempo de rebote
          lastDebounceTime = millis();
       }

       if ((millis() - lastDebounceTime) > debounceDelay) {
// cualquiera que sea la lectura que ha estado ahí por mas tiempo
// que el retardo de entrada se toma como el estado actual real:

// si el estado del pulsador cambia:
             if (reading != buttonState) {
                         buttonState = reading;
// solo se cambia el estado del LED si el estado del pulsador el HIGH

 

                       if (buttonState == HIGH) {
                              ledState = !ledState;
                        }
                }
           }

     digitalWrite(ledPin, ledState);
 
// guarda la lectura. En el siguiente ciclo,
// este se convertirá en el estado anterior del pulsador:
          lastButtonState = reading;
}

Fuentes: