Créditos: Paula Campbell

Fecha: 15/07/25

Visualizaciones: 24

Botones e interrupciones en Arduino: cómo funcionan y cómo usarlos

Arduino

En proyectos con Arduino o cualquier microcontrolador, es muy común necesitar una forma de detectar cuándo un botón fue presionado. La forma más directa de hacerlo es verificando constantemente el estado del botón en el loop. Pero cuando el programa se vuelve más complejo, esa técnica puede fallar o volverse ineficiente. Ahí es donde entran las interrupciones: una herramienta poderosa que permite al microcontrolador responder a eventos externos en tiempo real, como una pulsación de botón, sin tener que estar revisándolo constantemente.

¿Qué es una interrupción en Arduino?

En el contexto de los microcontroladores, una interrupción es cuando se interrumpe la ejecución normal de un programa porque ocurrió un evento con mayor prioridad. Luego de que se ejecute la interrupción, la ejecución normal del programa continúa exactamente en dónde se había frenado.

Tipos de interrupciones en Arduino

En Arduino existen cuatro tipos de interrupciones: cuando el valor de un pulso sube (RISING), cuando el valor del pulso baja (FALLING), cuando el valor de pulso es bajo (LOW), y cuando ocurre cualquier cambio en el pulso (CHANGE).

¿Cómo funciona por dentro un botón?

Un botón o pulsador es un dispositivo eléctrico que abre o cierra un circuito dependiendo de si está siendo pulsado o no. Por dentro tiene un resorte que hace que vuelva a su estado original luego de ser soltado. Al presionarlo, el pulsador actúa como un interruptor cerrado, y permite el flujo de la corriente eléctrica. Al soltarlo, el pulsador vuelve a su estado original y el circuito vuelve a estar abierto.

Modos de conexión de un botón

Cuando conectamos un botón a un pin digital, si no definimos un valor predeterminado cuando el botón no está siendo presionado, el microcontrolador puede leer ruido e interpretarlo como un 1 o un 0. Para evitar esto, existen dos configuraciones diferentes con resistencias: pull up y pull down.

Pull-Up

En esta configuración, se conecta una resistencia entre el pin de entrada y VCC, y el otro lado del botón va a GND. Cuando el botón no está presionado, el pin lee HIGH gracias a la resistencia conectada a VCC. Cuando se presiona, el pin se conecta directamente a GND y lee LOW. Arduino proporciona una resistencia pull-up interna, que se puede activar con el modo “INPUT_PULLUP” en la función pinMode:

pinMode(pin, INPUT_PULLUP);

Pull-Down

En esta configuración, se conecta una resistencia entre el pin de entrada y GND, y el otro lado del botón va a VCC. Cuando el botón no está presionado, el botón fuerza un LOW en el pin, gracias a la resistencia conectada a GND. Cuando se presiona, el pin se conecta a VCC y lee HIGH, lo contrario que ocurre en modo pull-up.

¿Cómo usarlo con Arduino?

En una placa Arduino hay unos pocos pines que pueden ser utilizados como interrupciones, dependiendo de que placa sea. En Arduino Uno y Nano, solamente a los pines 2 y 3 se lespuede configurar interrupciones. Con la función “attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)” se le asocia una función a una interrupción en un pin, en donde: pin es el pin en el que se debe escuchar la interrupción, ISR (Interrupt Service Routines) es la función callback que se ejecuta cuando la interrupción ocurre, y mode es el tipo de interrupción que se está esperando. 

Cuando la interrupción se dispara, la ejecución del programa se detiene, se ejecuta la función ISR y luego continúa la ejecución del programa. La función ISR no toma parámetros y no devuelve ningún valor y generalmente es muy corta, ya que no debe retrasar la ejecución normal del programa.

Conexión

Código de botón para prender o apagar un led (sin usar interrupciones)

int buttonPin = 2;
int ledPin = 13;
bool estadoLed = false;
void setup() {
    pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);
}
void loop() {
    if (estadoLed) {
        digitalWrite(ledPin, HIGH);
    }
    else {
        digitalWrite(ledPin, LOW);
    }
    if (digitalRead(buttonPin) == HIGH) {
        estado = !estado;
    }
}

 

Código de botón para prender o apagar un led (usando interrupciones)

int buttonPin = 2;
int ledPin = 13;
bool estadoLed = false;
void setup() {
    attachInterrupt(digitalPinToInterrupt(buttonPin), cambiarEstadoLed, FALLING);
    pinMode(ledPin, OUTPUT);
}

void loop() {
    if (estadoLed) {
        digitalWrite(ledPin, HIGH);
    }
    else {
        digitalWrite(ledPin, LOW);
    }
}


void cambiarEstadoLed() {
    estado = !estado;
}

 

Conclusión

Los botones pulsadores son uno de los componentes más simples y usados en proyectos electrónicos, pero también uno de los más importantes. Aprender cómo conectarlos correctamente y cómo usarlos con o sin interrupciones te da más control sobre tu código y tu hardware. Las interrupciones son una herramienta poderosa cuando necesitás que tu programa responda rápidamente a eventos externos, como una pulsación. Sin embargo, hay que usarlas con cuidado, asegurándose de que el código dentro de la interrupción sea corto y seguro. Ahora que sabés cómo funcionan los botones, cómo se conectan, y cómo usarlos con interrupciones, ¡ya podés integrarlos a tus propios proyectos con más confianza!




Licencia Creative Commons Botones e interrupciones en Arduino: cómo funcionan y cómo usarlos © 2025 by Paula Campbell is licensed under CC BY-NC-SA 4.0