🔘 Tutorial - Programa de Pulsadores (2pulsadores.ino)
📋 Descripción: Este programa lee el estado de 4 pulsadores y enciende LEDs específicos según las propiedades matemáticas del número binario formado por los pulsadores.
🔌 Conexiones del Hardware
Pulsadores conectados:
| Pin ESP32 |
Posición del Bit |
Valor del Bit |
Descripción |
| 16 |
Bit 3 (MSB) |
8 |
Bit más significativo |
| 17 |
Bit 2 |
4 |
- |
| 18 |
Bit 1 |
2 |
- |
| 19 |
Bit 0 (LSB) |
1 |
Bit menos significativo |
LEDs conectados:
| Pin ESP32 |
Color |
Condición |
Descripción |
| 25 |
🟢 Verde |
Número PAR |
LED menos significativo |
| 26 |
🟡 Amarillo |
Número IMPAR |
LED siguiente |
| 27 |
🔴 Rojo |
Número PRIMO |
LED siguiente |
🎯 Condiciones de Encendido de LEDs
🟢 LED Pin 25 (Verde): Se enciende cuando el número formado por los pulsadores es PAR
🟡 LED Pin 26 (Amarillo): Se enciende cuando el número formado por los pulsadores es IMPAR
🔴 LED Pin 27 (Rojo): Se enciende cuando el número formado por los pulsadores es PRIMO
📊 Tabla de Ejemplos
| Pulsadores |
Binario |
Decimal |
LEDs Encendidos |
Razón |
| 0000 |
0000 |
0 |
Pin 25 |
0 es PAR |
| 0001 |
0001 |
1 |
Pin 26, Pin 27 |
1 es IMPAR y PRIMO |
| 0010 |
0010 |
2 |
Pin 25, Pin 27 |
2 es PAR y PRIMO |
| 0011 |
0011 |
3 |
Pin 26, Pin 27 |
3 es IMPAR y PRIMO |
| 0100 |
0100 |
4 |
Pin 25 |
4 es PAR |
| 0101 |
0101 |
5 |
Pin 26, Pin 27 |
5 es IMPAR y PRIMO |
| 0110 |
0110 |
6 |
Pin 25 |
6 es PAR |
| 0111 |
0111 |
7 |
Pin 26, Pin 27 |
7 es IMPAR y PRIMO |
⚙️ Funcionamiento del Programa
Flujo del Programa:
- Leer pulsadores con debounce para evitar lecturas erróneas
- Convertir la combinación de pulsadores a número decimal
- Verificar condiciones:
- ¿Es PAR? → Encender LED pin 25
- ¿Es IMPAR? → Encender LED pin 26
- ¿Es PRIMO? → Encender LED pin 27
- Mostrar resultado en consola
- Repetir el proceso
💻 Código Clave
Función de debounce para pulsadores:
void leer_pulsadores() {
unsigned long tiempo_actual = millis();
for (int i = 0; i < num_pulsadores; i++) {
bool lectura = digitalRead(pin_pulsadores[i]);
// Si el estado cambió y ha pasado suficiente tiempo (debounce)
if (lectura != estado_anterior[i] &&
(tiempo_actual - ultimo_tiempo[i]) > tiempo_debounce) {
estado_pulsadores[i] = lectura;
ultimo_tiempo[i] = tiempo_actual;
}
estado_anterior[i] = lectura;
}
}
Función para verificar si es primo:
bool es_primo(int numero) {
if (numero < 2) return false;
if (numero == 2) return true;
if (numero % 2 == 0) return false;
for (int i = 3; i * i <= numero; i += 2) {
if (numero % i == 0) return false;
}
return true;
}
🔧 Instalación y Uso
Requisitos:
- ESP32
- 4 pulsadores con resistencias pull-up (10kΩ)
- 3 LEDs con resistencias (220Ω)
- Cables de conexión
- Arduino IDE o PlatformIO
Esquema de conexión:
Pulsadores:
- Pin 16 → Pulsador → GND (con resistencia pull-down de 10k)
- Pin 17 → Pulsador → GND (con resistencia pull-down de 10k)
- Pin 18 → Pulsador → GND (con resistencia pull-down de 10k)
- Pin 19 → Pulsador → GND (con resistencia pull-down de 10k)
LEDs:
- Pin 25 → Resistencia 220Ω → LED Verde → GND
- Pin 26 → Resistencia 220Ω → LED Amarillo → GND
- Pin 27 → Resistencia 220Ω → LED Rojo → GND
Pasos de instalación:
- Conecta los pulsadores y LEDs según el esquema
- Abre el archivo 2pulsadores.ino en Arduino IDE
- Selecciona la placa ESP32 en Herramientas → Placa
- Configura el puerto serie correcto
- Sube el código al ESP32
- Abre el Monitor Serie (115200 baudios)
📊 Salida del Monitor Serie
Sistema de pulsadores iniciado
Pulsadores: 19(LSB), 18, 17, 16(MSB)
Combinación: 0000 = 0 (decimal) - PAR
Combinación: 0001 = 1 (decimal) - IMPAR PRIMO
Combinación: 0010 = 2 (decimal) - PAR PRIMO
Combinación: 0011 = 3 (decimal) - IMPAR PRIMO
Combinación: 0100 = 4 (decimal) - PAR
🧮 Conceptos Matemáticos
Números Pares e Impares:
- Par: Número divisible por 2 (resto = 0)
- Impar: Número no divisible por 2 (resto = 1)
Números Primos:
- Números mayores que 1 que solo son divisibles por 1 y por sí mismos
- Ejemplos: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31...
- El 1 no se considera primo
⚠️ Solución de Problemas
Problema: Los pulsadores no responden
Solución: Verifica que estén conectados correctamente y que las resistencias pull-up estén funcionando
Problema: Lecturas erróneas de pulsadores
Solución: Aumenta el tiempo de debounce o verifica las conexiones
Problema: Los LEDs no se encienden
Solución: Verifica las conexiones de los LEDs y las resistencias
🎯 Objetivos de Aprendizaje
- Entender el concepto de debounce en pulsadores
- Aprender a leer múltiples entradas digitales
- Implementar lógica condicional compleja
- Entender propiedades matemáticas de números
- Manejar estados de LEDs según condiciones
✅ ¡Felicidades! Has completado el tutorial del programa de pulsadores. Ahora puedes interactuar con el sistema usando los pulsadores y ver cómo se encienden los LEDs según las propiedades matemáticas del número formado.