Ir al contenido principal

Cómo leer varios pulsadores en Arduino y ver su estado por el puerto serie

Introducción

Aprender a leer un pulsador individual es el primer paso en Arduino, pero en proyectos reales como paneles de control, teclados matriciales o mandos de juegos, necesitas leer múltiples pulsadores al mismo tiempo.

Muchos tutoriales básicos enseñan a declarar variables independientes para cada botón y concatenar interminables estructuras if. Eso genera un código difícil de mantener. En este tutorial vamos a aplicar la solución limpia y eficiente: usar Arrays (vectores) y bucles for para leer múltiples entradas digitales con muy pocas líneas de código, enviando los estados en tiempo real al Monitor Serie.

Materiales Necesarios

Para construir el circuito de lectura múltiple en protoboard, necesitarás los siguientes componentes esenciales:

Componente Descripción Enlace
Arduino UNO R3 / R4 Placa de desarrollo para procesar las entradas digitales de los pulsadores. Ver en Amazon
Pulsadores / Botones de 4 pines Interruptores momentáneos compatibles con montaje directo en protoboard. Ver en Amazon
Resistencias 10kΩ (Pull-Down) Resistencias para estabilizar el estado lógico a GND y evitar lecturas flotantes. Ver en Amazon
Protoboard / Placa de Pruebas Base de conexiones sin soldadura para montar el circuito de entradas. Ver en Amazon
Kit de Cables Dupont (Jumper) Cables de puentes Macho-Macho para conectar las líneas de señal y alimentación. Ver en Amazon

El Concepto Clave: ¿Por qué usar Arrays y Bucles?

Imagina declarar 5 pulsadores de forma tradicional: int pulsador1 = 2; int pulsador2 = 3; ... y escribir la función digitalRead() repetida cinco veces. Si tu proyecto escala a 10 o 15 botones, el código se vuelve insostenible.

La alternativa eficiente es agrupar las referencias de los pines en un Array: int pulsadores[] = {2, 3, 4, 5, 6};. Un Array actúa como una lista ordenada donde cada elemento ocupa una posición (índice). Mediante un bucle for, recorremos secuencialmente todas las posiciones para leer el estado de cada entrada usando una única estructura de código.

Esquema de Montaje y Conexiones

Nota sobre el montaje de la imagen: En el circuito físico de demostración utilizamos 3 pulsadores conectados a los pines 10, 11 y 12 de un Arduino Mega. El código fuente provisto contempla 5 pulsadores (pines 2 al 6). La lógica es idéntica; si tu montaje cuenta con 3 o más entradas, solo debes adaptar los números asignados dentro del Array.

Esquema de conexiones para leer múltiples pulsadores en Arduino usando resistencias Pull-Down

Esquema de conexión con resistencias Pull-Down:

  • Alimentación común: Un terminal de cada pulsador se conecta a la línea de 5V.
  • Pin de lectura digital: El terminal opuesto se conecta al Pin Digital correspondiente (en el ejemplo, pines 10, 11 y 12).
  • Resistencia Pull-Down: Se coloca una resistencia de 10kΩ desde cada Pin Digital conectado hacia la línea de GND.

Código de Arduino Optimizado (Ejemplo con Array)

A continuación se muestra el programa estructurado mediante vectores. Puedes ajustar la declaración inicial del Array para adaptar el número y asignación de pines a tu montaje concreto.

leer_pulsadores.ino
// Creamos un Array (lista) con los pines donde están los pulsadores
// Si usas 3 pulsadores en los pines 10, 11 y 12, cambia esta línea a: int pulsadores[] = {10, 11, 12};
int pulsadores[] = {2, 3, 4, 5, 6};

// Calculamos dinámicamente el número de elementos en el Array
int numPulsadores = sizeof(pulsadores) / sizeof(int);

void setup() {
  // Iniciamos la comunicación serie a 9600 baudios
  Serial.begin(9600);
  
  // Configuramos todos los pines del Array como ENTRADA en un único bucle
  for (int i = 0; i < numPulsadores; i++) {
    pinMode(pulsadores[i], INPUT);
  }
  
  Serial.println("Sistema iniciado. Esperando pulsaciones...");
}

void loop() {
  // Recorremos todos los pulsadores definidos en el vector
  for (int i = 0; i < numPulsadores; i++) {
    
    // Leemos el estado del pulsador correspondiente a la iteración actual
    int estado = digitalRead(pulsadores[i]);
    
    // Evaluamos si el pulsador está presionado (estado HIGH con Pull-Down)
    if (estado == HIGH) {
      
      // Enviamos al Monitor Serie el número de pulsador activado
      Serial.print("Pulsador ");
      Serial.print(i + 1); // Sumamos 1 para mostrar un formato de lectura natural (1 a N)
      Serial.println(" presionado (HIGH)!");
      
      // Pausa anti-repetición para estabilizar la salida serie
      delay(200); 
    }
  }
}

Explicación del Código paso a paso

El programa implementa técnicas de optimización esenciales en C++ para microcontroladores:

  1. Declaración de Vectores (pulsadores[]): Almacena los pines en posiciones consecutivas comenzando desde el índice cero (pulsadores[0] equivale al primer pin asignado). Si modificas los pines en la declaración inicial, no necesitas reescribir la lógica posterior.
  2. Cálculo dinámico con sizeof(): La expresión sizeof(pulsadores) / sizeof(int) determina la longitud real del vector dividiendo el tamaño total en bytes entre el tamaño de la variable base. Esto permite añadir o quitar botones del Array sin alterar el resto del código.
  3. Iteración con Bucle for: La variable del bucle i recorre la lista desde 0 hasta numPulsadores - 1. En cada paso se ejecuta digitalRead(pulsadores[i]) asignando la lectura al elemento correspondiente.
  4. Formateo e impresión Serie: Las instrucciones Serial.print() y Serial.println() muestran la información estructurada en la consola del entorno de desarrollo IDE.

Configuración del Monitor Serie en Arduino IDE

Para visualizar las lecturas enviadas por la placa a través del cable USB:

  1. Carga el programa compilado en la placa Arduino.
  2. Abre el Monitor Serie en el IDE mediante el icono de la lupa (o con el atajo Ctrl + Shift + M).
  3. Selecciona una velocidad de comunicación de 9600 baudios en el desplegable inferior para sincronizarla con Serial.begin(9600).
  4. Al presionar cada pulsador, verás reflejado el evento correspondiente de forma inmediata.

Conclusión

Aprender a gestionar agrupaciones de datos mediante Arrays y bucles iterativos permite escribir código limpio, modular y escalable en sistemas embebidos. Esta estructura te servirá como base para crear teclados personalizados, matrices de entrada o controladores avanzados.

Si deseas profundizar en la teoría de las resistencias Pull-Down e ignorar lecturas no deseadas por ruido eléctrico, consulta nuestro tutorial dedicado sobre cómo encender un LED con un pulsador en Arduino (Sin fallos).

Comentarios

Entradas populares de este blog

Cómo evitar que Windows apague la pantalla o el disco duro (con gpedit)

Introducción Uno de los problemas más frecuentes en Windows es la suspensión automática del sistema, el apagado de la pantalla o la desactivación del disco duro tras unos minutos de inactividad. Aunque esto busca ahorrar energía, puede resultar frustrante si utilizas tu PC como servidor doméstico, servidor Plex, máquina de descargas o para tareas de larga duración . Si bien es posible cambiar estos ajustes desde la configuración tradicional de energía, muchas veces Windows ignora nuestras preferencias debido a directivas internas. La solución definitiva para evitar que tu ordenador se apague o suspenda es utilizar el Editor de Directivas de Grupo Local (gpedit.msc) . ⚠️ Advertencia sobre la versión de Windows El comando gpedit.msc solo está disponible de forma nativa en las ediciones Windows Pro, Enterprise y Education . Si utilizas Windows Home , esta herramienta no estará presente por defecto y deberás recurrir a la configuración convencional del Panel de Control. Paso 1...

Alarma con Arduino y Sensor Ultrasónico HC-SR04 (Tutorial paso a paso)

Introducción Crear un sistema de seguridad o detección de movimiento no tiene que ser complicado ni caro. En este tutorial vamos a construir una alarma con Arduino y un sensor de ultrasonidos (el famoso HC-SR04). Este proyecto es ideal para principiantes porque aprendes a leer sensores externos y a generar una respuesta física (encender un LED y hacer sonar un buzzer) cuando alguien se acerca demasiado. A continuación, te explico cómo funciona el sensor, qué materiales necesitas, cómo montar el circuito y te desgloso el código línea por línea para que realmente entiendas lo que estás programando. ¿Cómo funciona el Sensor Ultrasónico HC-SR04? Este sensor funciona igual que un sonar o los delfines: emite un sonido imperceptible para el humano (ultrasonido) y espera a que ese sonido choque contra un objeto y regrese (eco). Pin Trig (Trigger - Disparo): Le dice al sensor que debe "gritar" y emitir el pulso de ultrasonido. Pin Echo (Eco - Recepción): Se queda escuchando...

Instalar el driver USB a TTL PL2303HX en Windows 10 (Solución al Error Code 10)

Introducción: ¿Para qué sirve el convertidor USB a TTL? Los adaptadores USB a TTL (equipados con chips como el PL2303HX , FTDI o CP2102) son herramientas indispensables en el taller de cualquier maker, técnico o entusiasta de la electrónica. Nos permiten establecer comunicación serie UART entre un ordenador y dispositivos como Arduino, ESP32-CAM, routers, receptores de satélite o tablets . Sin embargo, conectar este tipo de cables en Windows 10 o Windows 11 suele transformarse en un dolor de cabeza. Al conectar el dispositivo, el sistema instala automáticamente el controlador más reciente y muestra un aviso de fallo con el icono amarillo de advertencia: "Este dispositivo no puede iniciar (Código 10)" . A continuación te explicamos por qué sucede y cómo solucionarlo en pocos minutos. ⚠️ Causa del fallo: Bloqueo de chips no oficiales por Prolific La inmensa mayoría de los módulos USB-TTL económicos integran una revisión o clon del chip Pr...