lunes, 26 de febrero de 2024

MANEJO DE BOTONES EN ARDUINO

CONECTAR BOTON PARA ENCENDER UN LED

 


Clic aquí para descargar codigo sin control de rebotes: DESCARGAR

Clic aquí para descargar codigo con control de rebotes: DESCARGAR


Conceptos
La conexión pull-up o pull-down en un circuito con Arduino se utiliza comúnmente para manejar la entrada de un botón. Ambas configuraciones se utilizan para establecer el estado inicial del pin cuando el botón no está siendo presionado, y cambian el estado cuando el botón se presiona.

 

1. Resistencia Pull-Up:

Cuando utilizas una resistencia pull-up, conectas una resistencia desde el pin del botón hasta el voltaje de alimentación (VCC o 5V en Arduino). Esto se hace para asegurar que el pin esté en un estado lógico alto (HIGH) cuando el botón no está siendo presionado. Cuando presionas el botón, el pin se conecta a tierra (GND), y el estado del pin cambia a bajo (LOW).

 

Circuito:

·         Pin del botón conectado a tierra (GND).

·         Resistor conectado desde el pin del botón a 5V (pull-up).

·         Cuando el botón está sin presionar, el pin está en estado HIGH.

 

Arduino Configuración:

pinMode(botonPin, INPUT_PULLUP);

 

2. Resistencia Pull-Down:

Cuando utilizas una resistencia pull-down, conectas una resistencia desde el pin del botón hasta tierra (GND). Esto se hace para asegurar que el pin esté en un estado lógico bajo (LOW) cuando el botón no está siendo presionado. Cuando presionas el botón, el pin se conecta a VCC (5V), y el estado del pin cambia a alto (HIGH).

 

Circuito (el de la imagen):

·         Pin del botón conectado a VCC (5V).

·         Resistor conectado desde el pin del botón a tierra (pull-down).

·         Cuando el botón está sin presionar, el pin está en estado LOW.

 

3. Los rebotes:

Los rebotes en un botón son pequeñas fluctuaciones eléctricas que ocurren cuando se presiona o suelta un botón físico. Estas fluctuaciones pueden generar lecturas erráticas del estado del botón, lo que puede afectar negativamente la respuesta esperada en un programa Arduino. Veamos más detenidamente el fenómeno de los rebotes y cómo manejarlo:

 

¿Qué son los Rebotes?

Cuando presionas o sueltas un botón, los contactos dentro del botón pueden hacer contacto y separarse varias veces antes de establecerse en su posición final.

Estos contactos pueden generar un fenómeno llamado "rebote" debido a la mecánica interna del botón.

 

¿Cómo se Manifiestan los Rebotes?

Los rebotes pueden aparecer como una serie rápida de pulsos eléctricos.

Estos pulsos pueden hacer que el programa Arduino detecte múltiples cambios de estado en un corto período de tiempo.

 

Problemas Asociados con los Rebotes:

Dificultad para obtener una única lectura clara del estado del botón.

Puede llevar a comportamientos no deseados, como múltiples activaciones de una acción con un solo toque.

 

Cómo Manejar los Rebotes en Arduino:

Uso de Resistencias y Condensadores:

Se pueden utilizar resistencias y condensadores en circuito para filtrar los rebotes.

Sin embargo, esto puede ser complicado y a menudo se prefiere un enfoque de software más sencillo.

 

Uso de Software (Debouncing /Anti-rebote):

Un método común para manejar los rebotes es implementar una lógica de "debouncing" en el código.

El debouncing implica ignorar cualquier cambio de estado del botón durante un breve período después de que se detecta un cambio.

 

Ejemplo de Debouncing en Arduino:

const int botonPin = 2;   // Pin conectado al botón

int estadoBoton;          // Variable para almacenar el estado del botón

int estadoAnterior = LOW;  // Variable para almacenar el estado anterior del botón

unsigned long tiempoAnterior = 0;  // Variable para almacenar el tiempo del último cambio de estado

 

void setup() {

  pinMode(botonPin, INPUT);  // Configura el pin del botón como entrada

}

 

void loop() {

  // Lee el estado actual del botón

  int estadoBoton = digitalRead(botonPin);

 

  // Verifica si ha habido un cambio en el estado del botón

  if (estadoBoton != estadoAnterior) {

    // Si hay un cambio, actualiza el tiempo del último cambio

    tiempoAnterior = millis();

  }

 

  // Verifica si ha pasado un tiempo suficiente desde el último cambio

  if (millis() - tiempoAnterior > 50) {

    // Si ha pasado suficiente tiempo, actualiza el estado anterior y realiza acciones

    estadoAnterior = estadoBoton;

    // Realiza acciones según el estado actual del botón

    if (estadoBoton == HIGH) {

      // Acciones cuando el botón está presionado

    } else {

      // Acciones cuando el botón no está presionado

    }

  }

}

En este ejemplo, se utiliza millis() para medir el tiempo desde el último cambio. Si ha pasado un tiempo suficiente (50 milisegundos en este caso), se actualiza el estado anterior y se realiza alguna acción. Esto ayuda a ignorar los cambios rápidos asociados con los rebotes.

 

Conclusión:

Los rebotes son fenómenos eléctricos comunes en botones físicos.

Pueden manejarse con hardware (resistencias y condensadores) o con software (debouncing).

El debouncing en software es una técnica comúnmente utilizada y puede implementarse en el código Arduino para garantizar una lectura confiable del estado del botón.


No hay comentarios:

Publicar un comentario

MANEJO BASICO DE LA LCD 16X2 PARA MOSTRAR DATOS

  MANEJO BASICO DE LA LCD 16X2 PARA MOSTRAR DATOS Introducción a la Interfaz I2C: I2C (Inter-Integrated Circuit) es un bus de comunicación s...