En esta clase vas a aprender cómo usar pulsadores con entradas digitales para controlar un LED. La idea es simple: apretás un botón para prenderlo y el otro para apagarlo.
Resumen
En esta lección vas a aprender a usar pulsadores con entradas digitales para prender y apagar un LED. Al apretar un botón se va a prender el LED; al apretar el otro, el LED se va a apagar.
Componentes necesarios
(1) x Elegoo ESP32
(2) x Protoboard de 400 puntos
(1) x LED rojo de 5mm
(1) x Resistencia de 220 Ω
(2) x Pulsadores
(7) x Cables puente M-M (Macho a Macho)
Introducción a los componentes
PULSADORES:
Los interruptores son componentes realmente simples. Cuando apretás un botón o movés una palanca, conectan dos contactos para que la electricidad pueda fluir a través de ellos. Los pequeños interruptores táctiles que usamos en esta lección tienen cuatro conexiones, lo que puede resultar un poco confuso.
En realidad, solo hay dos conexiones eléctricas. Dentro del encapsulado del interruptor, los pines B y C están conectados entre sí, al igual que los pines A y D.
Esquema de conexión
Diagrama de cableado
Aunque el cuerpo de los interruptores es cuadrado, los pines sobresalen de lados opuestos. Esto significa que los pines solo van a quedar a la distancia correcta cuando se coloquen bien en la protoboard. Acordate que el LED tiene que tener el terminal negativo más corto hacia la izquierda.
Código
Podés hacer clic en el enlace de texto azul para descargar el archivo del programa en tu equipo y hacer doble clic para abrirlo una vez terminada la descarga. Fijate bien: antes de abrir el archivo, asegurate de tener instalado el entorno de desarrollo Arduino IDE y de haber completado la instalación de los componentes necesarios, como el paquete de soporte de la placa y el driver correspondiente a la placa ESP32. Si tenés dudas sobre este proceso, podés consultar el capítulo "parte 1" del documento para una guía detallada.
📥 DESCARGAR digital_inputs.ino
Cargá el sketch en tu placa ESP32. Al apretar el botón izquierdo se va a prender el LED, mientras que al apretar el botón derecho se va a apagar.
La primera parte del sketch define tres variables para los tres pines que se van a usar. El 'ledPin' es el pin de salida, 'buttonApin' se refiere al interruptor que está más arriba en la protoboard y 'buttonBpin' al otro interruptor.
int ledPin = 18; int buttonApin = 19; int buttonBpin = 21;
La función 'setup' define el ledPin como OUTPUT como siempre, pero ahora tenemos dos entradas con las que lidiar. En este caso, configuramos el pinMode como INPUT_PULLUP de esta manera:
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
El modo de pin INPUT_PULLUP significa que el pin se va a usar como entrada, pero que si no hay nada más conectado a la entrada, se debe "tirar hacia arriba" a HIGH. En otras palabras, el valor por defecto para la entrada es HIGH, a menos que sea llevado a LOW por la acción de apretar el botón.
Por eso los interruptores están conectados a GND. Cuando se aprieta un interruptor, conecta el pin de entrada a GND, de modo que deja de estar en HIGH.
Como la entrada normalmente está en HIGH y solo pasa a LOW cuando se aprieta el botón, la lógica está un poco al revés. Vamos a manejar esto en la función 'loop'.
En la función 'loop' hay dos sentencias 'if', una para cada botón. Cada una hace un 'digitalRead' en la entrada correspondiente.
void loop()
{
if (digitalRead(buttonApin) == LOW)
{
digitalWrite(ledPin, HIGH);
}
if (digitalRead(buttonBpin) == LOW)
{
digitalWrite(ledPin, LOW);
}
}
Acordate que si el botón está apretado, la entrada correspondiente va a estar en LOW. Si el botón A está en LOW, entonces un 'digitalWrite' en el ledPin lo prende.
De la misma manera, si se aprieta el botón B, se envía un LOW al ledPin.
If{}:
La sentencia if comprueba una condición y ejecuta la instrucción o el conjunto de instrucciones siguientes si la condición es 'verdadera' (true).
Parámetros: condition: una expresión booleana (es decir, puede ser verdadera o falsa).
digitalRead():
Lee el valor de un pin digital especificado, ya sea HIGH o LOW.
Sintaxis: digitalRead(pin)
Parámetros: pin: el número de pin que querés leer.
Retorno: HIGH o LOW.
Operadores de comparación
Descripción: Compara la variable de la izquierda con el valor o variable de la derecha del operador. Devuelve true cuando los dos operandos son iguales. Tené en cuenta que podés comparar variables de diferentes tipos de datos, pero eso podría generar resultados impredecibles; por lo tanto, se recomienda comparar variables del mismo tipo de datos, incluyendo el tipo signed/unsigned.
Sintaxis: x==y; // es verdadero si x es igual a y, y es falso si x no es igual a y
Parámetros:
x: variable. Tipos de datos permitidos: int, float, double, byte, short, long.
y: variable o constante. Tipos de datos permitidos: int, float, double, byte, short, long.
Fuente: Adaptado al español desde el wiki oficial Elegoo (licencia CC BY-SA). Revisión técnica por equipo Breva.