« »

Arduino + botón + debounce = ¡mi primer sketch!

June
7
member
sucotronic

Lo que se puede ver en el dibujo es el montaje que he realizado para probar este pequeño “bosquejo” de código para Arduino. Con este código se controla el estado de un led mediante la pulsación de un botón. Para evitar el indeseado efecto rebote (debounce en inglés) también está añadido un contador que hace que solo cambie el estado del led si se mantiene estable la pulsación durante al menos 200 milisegundos.

Como demostración de su funcionamiento he aquí un muy corto vídeo:

Y por supuesto, el código de la aplicación:

/*
  Este es un ejemplo de código para la lectura de la pulsación de un botón que
  controla el encendido y apagado de un led. Tiene incorporado un "debouncer"
  que no procesa la pulsación hasta que está estable durante una cantidad de
  tiempo predeterminada.
 */

const int  buttonPin = 11;    // pin del pulsador
const int ledPin = 13;       // pin del led

int ledStatus = false;   // almacena el estado del led. Por defecto está apagado
int buttonState = 0;     // estado actual del botón
int lastButtonState = 0; // estado del botón tras el filtrado del debounce
int lastButtonState2 = LOW;  // estado anterior para el filtrado del debounce
int reading;  // para la lectura del pin del pulsador

long lastDebounceTime = 0;  // contador para el debounce
long debounceDelay = 200;   // tiempo que tiene que mantenerse estable la
                            // señal de la pulsación

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

void loop() {
  // lectura del pin
  reading = digitalRead(buttonPin);

  // ver si ha cambiado con respecto al estado anterior
  if (reading != lastButtonState2) {
    // resetear el contador para el debounce
    lastDebounceTime = millis();
  } 

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // la señal se ha mantenido estable más del tiempo establecido
    // por lo tando se puede cambiar el valor
    buttonState = reading;
  }
  // almacenar la lectura para la siguiente comprobación
  lastButtonState2 = reading;

  // comparar el estado del pulsador con el estado anterior
  if (buttonState != lastButtonState) {
    // si el estado ha cambiado comprobar si ha sido porque ha sido pulsado
    // y no porque ha sido soltado
    if (buttonState == LOW) {
      // el botón ha sido presionado, cambiamos el valor del led
      ledStatus = !ledStatus;
    }
    // almacenar el nuevo valor del botón
    lastButtonState = buttonState;
  }

  // actualizar el estado del led de acuerdo a la variable
  if (ledStatus) {
    digitalWrite(ledPin, HIGH);
  } else {
   digitalWrite(ledPin, LOW);
  }

}

Fuente: arduino.cc examples


date Posted on: Monday, June 7, 2010 at 23:13 pm
Category electrónica.
Puedes seguir las respuestas de esta entrada a traves de l feed RSS 2.0.

Puedes dejar una respuesta, o trackback desde tu propio sitio.



2 Respuestas to “Arduino + botón + debounce = ¡mi primer sketch!”

  1. Judith

    Bravo!!! enhorabuena churri :D
    Lo único que me suena de la instalación es la placa con puntitos, para colocar las resistencias que utilizábamos en las prácticas de Electrotécnia en el CPS :P

    [Responder]

    sucotronic Reply:

    @Judith, jaja, esa plaquita blanca se llama ‘protoboard’ y se usa normalmente para ensamblar prototipos. Una vez que se tienen probados se puede hacer una placa definitiva soldada.

    [Responder]

    June 9th, 2010 at 14:59 pm
     

Escribe un comentario


a trastear un poco is powered by WordPress
Theme is Coded&Designed by Wordpress Themes at ricdes