L7: El pulsador
Etiquetas:
El pulsador
Qué vas a aprender en esta lección
En esta lección trabajaremos:
- Qué es un pulsador y cómo funciona.
- Diferencia entre dispositivos de entrada y de salida.
- Tomar decisiones en nuestros programas: el bloque “si…entonces…si no”.
- Leer el estado de un pulsador desde nuestro programa para controlar un LED.
Requisitos previos
Para poder seguir esta lección debes conocer el montaje básico con LED trabajado en la Lección 1: Mi primer proyecto, la Lección 2: El diodo LED y la Lección 3: El diodo LED (2).
Explicación teórica
¡Quiero saber más!
Entradas y salidas
En las lecciones anteriores hemos aprendido a controlar LEDs, que son dispositivos que reciben información desde nuestra placa de desarrollo. Cuando el programa dice “enciende el LED”, la placa envía una señal de salida. El LED es, por tanto, un dispositivo de salida: recibe órdenes desde el programa.
Pero, ¿qué ocurre si queremos que nuestro programa reaccione a algo que pasa en el mundo real? Por ejemplo, que encienda un LED cuando alguien pulsa un botón. Para eso necesitamos dispositivos de entrada: dispositivos que envían información hacia la placa de desarrollo para que el programa pueda leerla.
El pulsador (o botón) es uno de los dispositivos de entrada más sencillos. Lo pulsamos y nuestro programa puede detectarlo.
| Salida | Entrada | |
|---|---|---|
| Dirección | Del programa al exterior | Del exterior al programa |
| Ejemplos | LED, motor, zumbador | Pulsador, sensor de luz |
| ¿Quién decide? | El programa | El usuario o el entorno |
¿Qué es un pulsador?
Un pulsador o botón es un componente electrónico muy sencillo que funciona como un interruptor momentáneo. Cuando lo presionamos, cierra el circuito y permite que la corriente eléctrica fluya. Cuando lo soltamos, el circuito se abre y la corriente deja de fluir.

Pulsador y su funcionamiento interno
A diferencia de un interruptor convencional (como el de la luz de una habitación), el pulsador sólo está activo mientras lo mantenemos presionado. En cuanto lo soltamos, vuelve a su posición original.
En el diagrama puedes ver que:
- No presionado: el circuito está abierto (no pasa corriente).
- Presionado: el circuito se cierra (la corriente puede circular).
Tomar decisiones: el bloque “si…entonces”
Hasta ahora, nuestros programas ejecutaban una secuencia de bloques uno tras otro, siempre de la misma manera. Pero los programas más interesantes son los que pueden tomar decisiones y hacer cosas diferentes según lo que esté ocurriendo.
Para tomar decisiones usamos el bloque de lógica llamado “si” (en inglés if). Este bloque funciona así:
- si algo es verdad -> hacer una cosa
- si no -> hacer otra cosa diferente
Por ejemplo, pensemos en cómo decidimos si llevar paraguas:
- Si está lloviendo -> entonces cojo el paraguas.
- Si no está lloviendo -> entonces dejo el paraguas en casa.
En nuestro caso:
- Si el pulsador está presionado -> entonces enciendo el LED.
- Si no está presionado -> entonces apago el LED.
Este tipo de decisión se llama condicional y es uno de los conceptos más importantes en programación. ¡A partir de ahora nuestros programas serán mucho más interesantes!
La resistencia pull-up
Cuando conectamos un pulsador a un pin GPIO configurado como entrada, surge un problema: cuando el pulsador no está presionado, el pin queda “al aire” (no está conectado ni a V+ ni a GND). En esta situación, el pin podrá leer valores de manera impredecible, a veces ON y a veces OFF, sin que nosotros hayamos tocado nada.
Para evitar este problema, necesitamos asegurarnos de que el pin tenga siempre un valor conocido. Para ello podemos utilizar una resistencia pull-up: una resistencia que conectamos entre el pin GPIO y el voltaje positivo (3V3). De esta manera:
- Cuando el pulsador no está presionado: el pin lee voltaje positivo a través de la resistencia -> el valor es ON.
- Cuando el pulsador está presionado: el pin se conecta directamente a GND -> el valor es OFF (GND “gana” porque está conectado directamente, sin resistencia).
El chip ESP32 tiene resistencias pull-up internas que se pueden activar por software. Cuando usemos el bloque de alto nivel para el pulsador, esta configuración se realiza automáticamente. Cuando usemos bloques de bajo nivel, tendremos que seleccionar explícitamente “entrada con pull-up”.
Parte Práctica
Necesitas los siguientes materiales:
- Placa de desarrollo ESP32.
- Cable de conexion USB.
- Placa de prototipos.
- Pulsador (botón).
- LED rojo.
- Resistencia de 100 Ohm.
- Cables de conexión.
Esquema electrónico

Diagrama de conexión

Conexión de los componentes en la placa de prototipos
Paso a paso
- Conecta un cable negro entre el conector GND de la placa de desarrollo y la línea azul de la placa de prototipos. La línea azul será nuestra línea de 0 voltios, referencia o GND.
- Conecta un cable rojo entre el conector 3V3 de la placa de desarrollo y la línea roja de la placa de prototipos. La línea roja será nuestra línea de voltaje positivo (V+).
- Coloca el pulsador en la placa de prototipos de manera que quede a caballo entre los dos bloques centrales (cruzando el canal central).
- Conecta un cable desde el pin D4 (GPIO4) de la placa de desarrollo hasta uno de los terminales del pulsador.
- Conecta un cable negro desde el otro terminal del pulsador hasta la línea azul de GND.
- Conecta un cable rojo desde el pin D2 (GPIO2) de la placa de desarrollo hasta una línea libre del bloque central de la placa de prototipos.
- Coloca la resistencia de 100 Ohm de manera que un terminal esté en la misma línea que el cable del paso anterior.
- Conecta el LED rojo: el ánodo en la misma línea que el segundo terminal de la resistencia y el cátodo en una línea diferente.
- Conecta un cable negro entre la línea del cátodo del LED y la línea azul de GND.
- Conecta la placa de desarrollo al ordenador con el cable USB.
En esta lección, la resistencia pull-up del pulsador la gestionará automáticamente el ESP32 internamente (pull-up interno), por lo que no necesitaremos una resistencia externa adicional para el pulsador. Solo necesitamos la resistencia de 100 Ohm para proteger el LED.
Código
¡Quiero saber más!
En esta lección vamos a utilizar por primera vez los bloques de lógica. Estos bloques nos permiten tomar decisiones en nuestro programa basándonos en condiciones que evaluamos en tiempo real.
El bloque “si” tiene dos partes principales:
- Una condición: algo que puede ser verdadero o falso. En nuestro caso, comprobaremos si el pulsador está presionado.
- Una acción: lo que queremos que ocurra si la condición es verdadera.
Además, podemos añadir una parte “si no” que se ejecutará cuando la condición sea falsa. Para añadirla, haz clic en el icono de engranaje del bloque “si” y arrastra un bloque “si no” dentro de la estructura.
El bloque de comparación "=" nos permite comprobar si dos valores son iguales. Lo usaremos para comparar el valor leído del botón con ON (presionado).
Encender el LED al pulsar el botón. Bloques de alto nivel.
Siguiendo la mecánica que aprendiste en lecciones anteriores, construye y ejecuta el siguiente sketch:

Paso a paso
Haz clic en Dispositivos y arrastra un bloque “LED con nombre” al bloque de configuración. Escribe “MiLED” como nombre y selecciona el pin GPIO2. Si quieres usar el LED interno de la placa de desarrollo, usa el pin GPIO2. Si prefieres usar un LED externo como en la Lección 3, selecciona el pin al que lo hayas conectado.
Vuelve a hacer clic en Dispositivos y arrastra un bloque “Botón/interruptor con nombre” al bloque de configuración, debajo del anterior. Escribe “MiBoton” como nombre y selecciona el pin GPIO4.
Ahora vamos a añadir la lógica de decisión. Haz clic en el icono Lógica de la caja de herramientas y arrastra un bloque “si” al bucle principal.
Para añadir la parte “si no”, haz clic en el icono del engranaje del bloque “si” y arrastra un elemento “si no” dentro de la estructura que aparece. Después cierra la ventana.
Necesitamos una condición para el bloque “si”. Haz clic en Lógica y arrastra un bloque de comparación (el que tiene el símbolo =) a la zona de condición del bloque “si”.
En el lado izquierdo de la comparación, haz clic en Dispositivos y arrastra un bloque “leer valor del botón” (asegúrate de que muestra “MiBoton”).
En el lado derecho de la comparación, haz clic en Dispositivos y selecciona un bloque ON/OFF. Ponlo en ON.
Dentro de la sección “hacer” del bloque “si”, añade un bloque “poner LED” con el nombre “MiLED” y valor 100 (encendido al 100%).
Dentro de la sección “si no”, añade otro bloque “poner LED” con el nombre “MiLED” y valor 0 (apagado).
Pulsa en el botón Ejecutar y espera a que el sketch se compile y se transfiera a la placa. Si todo ha ido bien, el LED se encenderá cuando mantengas presionado el pulsador y se apagará cuando lo sueltes.
¡Fíjate en la diferencia con las lecciones anteriores! Antes, el LED siempre hacía lo mismo (parpadear). Ahora eres tú quien decide cuándo se enciende y cuándo se apaga, pulsando el botón.
Encender el LED al pulsar el botón. Bloques de bajo nivel.
Construye y ejecuta el siguiente sketch:

Paso a paso
- Haz clic en Dispositivos y arrastra un bloque “configurar pin” al bloque configuración. Especifica pin número 4 y ponlo como entrada con pull-up. Esto configura el pin GPIO4 como entrada y activa la resistencia pull-up interna.
- Arrastra otro bloque “configurar pin”. Especifica pin número 2 y ponlo como salida.
- Haz clic en Lógica y arrastra un bloque “si” al bucle principal. Añade la parte “si no” como en el ejercicio anterior.
- Para la condición, usa un bloque de comparación con “leer valor de pin 4” en el lado izquierdo y OFF en el derecho. Con la entrada con pull-up, el pin lee OFF cuando el pulsador está presionado.
- Dentro de “hacer”, añade un bloque “poner pin 2 a ON”.
- Dentro de “si no”, añade un bloque “poner pin 2 a OFF”.
- Pulsa Ejecutar y comprueba que funciona igual que con los bloques de alto nivel.
Cuando usamos bloques de bajo nivel para la entrada del pulsador, es importante seleccionar el modo “entrada con pull-up” para evitar lecturas erróneas cuando el botón no está presionado. Con los bloques de alto nivel esta configuración se gestiona automáticamente.
Ejercicios adicionales o retos
- Modifica el sketch para que el LED parpadee mientras mantienes el botón presionado en lugar de quedarse encendido de manera fija.
Para conseguirlo, piensa en combinar el bloque “si” con los bloques de espera que ya conoces de lecciones anteriores. Dentro de la parte “hacer” del bloque “si”, añade la secuencia de encendido-espera-apagado-espera.
Conecta un segundo LED de otro color a un pin GPIO diferente. Programa el sketch para que, cuando el botón esté presionado, se encienda un LED y se apague el otro. Cuando el botón no esté presionado, que se intercambien.
Conecta dos pulsadores. Programa el sketch para que cada pulsador controle un LED diferente de manera independiente.
Resumen de lo aprendido
- Hemos aprendido la diferencia entre dispositivos de entrada (como el pulsador) y de salida (como el LED).
- Hemos conectado un pulsador a la placa de desarrollo y aprendido a leer su estado desde nuestro programa.
- Hemos utilizado el bloque de lógica “si…entonces…si no” para que nuestro programa tome decisiones basándose en el estado del pulsador.
- Hemos aprendido qué es una resistencia pull-up y por qué es necesaria para leer correctamente el estado de un pulsador.
- Hemos utilizado tanto bloques de alto nivel como de bajo nivel para conseguir el mismo resultado.
Próximos pasos
- Aprende a leer el estado de un pulsador mediante interrupciones en la lección 8.
Soluciones a ejercicios adicionales
Mostrar
Parpadeo del LED mientras el botón está presionado
Para conseguir que el LED parpadee en lugar de quedarse encendido cuando presionamos el botón, añadimos la secuencia de parpadeo dentro de la parte “hacer” del bloque “si”.
LED parpadeando mientras el botón está presionado
Cuando el botón está presionado (ON), el programa ejecuta la secuencia:
- Encender LED al 100%.
- Esperar 500 milisegundos.
- Apagar LED (valor 0).
- Esperar 500 milisegundos.
Cuando el botón no está presionado, el LED permanece apagado. De esta forma, el LED parpadea solo mientras mantenemos el botón presionado.