LED con pulsador en Arduino

LED con pulsador en Arduino

En esta ocasión, vas a ver como conectar y como funciona un LED con pulsador en Arduino.

Componentes necesarios

Los componentes que necesitas, son los siguientes:

CantidadComponente
1Arduino UNO
1330/220 Ω Resistencia
110k Ω Resistencia
1LED
1Pulsador
1Placa de pruebas
7Cables de conexión

Lo primero que vamos a hacer, antes de nada, es analizar las regiones de conexión de Arduino, para saber donde conectas las cosas y porque.

Cómo conectar el LED y el pulsador

Empecemos viendo el esquema de conexiones:

Circuito Arduino LED con pulsador

Calculadora de códigos de color de las resistencias

Te dejo una calculadora de códigos de color para que puedas calcular los valores de las resistencias. De esta forma, podrás utilizarlas sin conocer como funcionan los códigos de colores. A medida que la vayas empleando, irás aprendiendo. En el vídeo te explico bien como funciona.

Calculadora de códigos de color de resistencias

Una vez tenemos los componentes, es hora de analizar las conexiones.

En la placa de pruebas, puedes ver que tenemos en la zona POWER de Arduino un cable que viene del pin 5v y otro de GND.

Esta conexión alimenta toda la fila positiva y negativa de la placa de pruebas. En esta zona, la corriente navega en horizontal y no en vertical.

Gracias a tener estas filas alimentadas con positivo y negativo, podemos sacar más cables con 5v o GND.

El LED lo tenemos conectado al pin digital 8.

¿Cómo funciona la placa de pruebas o protoboard?

Hasta ahora hemos utilizado la placa de pruebas mini, la cual no tiene lo que se denomina como buses.

Estos buses nos permiten tener filas enteras con positivo o negativo de las cuales podremos sacar tantos cables como pines tengamos en cada bus. Fíjate en el esquema de arriba. En él, tenemos alimentado con el pin de 5v de Arduino todo el bus rojo (+) y con el pin GND, estoy alimentando todo el bus negro (-).

A partir de aquí, puedo transportar los 5v o el GND al resto de la placa, solo tengo que conectar un cable a uno de los pines del bus.

Partes protoboard

En el vídeo de este capítulo explico más a fondo las partes.

¿Cómo funciona el pulsador en Arduino?

El pulsador tiene 4 pines de conexión. Los pines 1A y 1B tienen conexión interna entre ellos. Lo mismo pasa con los otros 2.

En este esquema, necesitamos dos conexiones separadas, por eso, vamos a utilizar los pines 1A y 2A.

Funcionamiento pulsador Arduino

Resistencia pull up y pull down

Para que el pulsador funcione como es debido, este debe tener una resistencia de 10k Ω en modo pull-up o pull-down.

Estos modos son simplemente la forma en la que vamos a conectar la resistencia.

Conexión de la resistencia en pull-up

Si conectamos la resistencia en modo pull-up, cuando el pulsador esté abierto va a tener un valor de HIGH (1) y cuando esté cerrado LOW (0).

En este modo, el LED va a quedar encendido por defecto hasta que pulsemos el pulsador.

El botón debe tener un extremo en negativo y el extremo con la resistencia debe ser positivo.

resistencia modo pull-up

Conexión de la resistencia en pull-down

En cambio, si conectamos la resistencia en modo pull-down, cuando el pulsador esté abierto va a tener un valor de LOW(0) y cuando esté cerrado HIGH (1). El LED estará apagado a la espera de pulsar el pulsador. En ese momento, se encenderá el LED.

El botón debe tener un extremo en positivo y el extremo con la resistencia debe ser negativo.

resistencia modo pull-down

Encender un LED mientras se presiona el pulsador

Empecemos a escribir el código para conseguir esto. El LED lo tenemos en el pin digital 8 y el pulsador en el 7. Por cierto, a partir de ahora, doy por sentado que tienes la resistencia del pulsador en pull-down (de la forma que sale en el esquema completo de arriba).

Lo primero va a ser la declaración de constantes y variables. Las constantes son como las variables, solo que estas no pueden cambiar de valor. Puesto que sabemos que PULSADOR y LED van a ser siempre los mismos valores, lo podemos dejar como constante. Las constantes por convención se escriben todo en mayúsculas.

// Constantes para los pines
const int PULSADOR = 7;
const int LED = 8;

// Variable para almacenar el estado del PULSADOR
int estado; 

En el setup() tenemos que configurar el LED como salida de datos y el pulsador como entrada, el led emite señales (salida (OUTPUT)) y el pulsador, introduce datos en el programa (entrada (INPUT)).

void setup(){
  	// PULSADOR configurado como entrada de datos
	  pinMode(PULSADOR,INPUT);
  	// LED configurado como salida de datos
  	pinMode(LED,OUTPUT);
}

Por último el loop(). Aquí solo hay que crear un pequeño condicional. Vamos a utilizar la variable estado para almacenar la lectura del pulsador. Esto lo conseguimos con digitalRead(). Recuerda que con digitalWrite, escribíamos datos, con esto los leemos.

Si el valor que se almacena en la variable estado es HIGH (pulsador pulsado) entonces, se lanza un digitalWrite() al LED y lo enciende. ¿Hasta cuando? Hasta que dejemos de pulsar el botón. No hay un delay() esta vez.

Cuando no se está pulsando el botón, el estado almacenado es diferente a HIGH (es LOW) y por lo tanto, se ejecuta el bloque de código del else que hace que el LED se apague. ¿Hasta cuando? Lo mismo, hasta que se vuelva a pulsar el botón.

void loop(){
  // Se almacena el estado del pulsador
	estado = digitalRead(PULSADOR); 
  // Si la lectura del pulsador es HIGH (pulsado)...
	if  (estado == HIGH){
    // ... enciende el LED.
		digitalWrite(LED,HIGH);
  // En caso contrario (no pulsado)... 
	} else { 
    // Apaga el LED
    digitalWrite(LED,LOW); 
	}
}

Código completo

Te dejo el código completo por si lo quieres copiar todo de una vez.

// Constantes para los pines
const int PULSADOR = 7;
const int LED = 8;

// Variable para almacenar el estado del PULSADOR
int estado; 

void setup(){
  	// PULSADOR configurado como entrada de datos
	  pinMode(PULSADOR,INPUT);
  	// LED configurado como salida de datos
  	pinMode(LED,OUTPUT);
}

void loop(){
  	// Se almacena el estado del pulsador
	estado = digitalRead(PULSADOR); 
  	// Si la lectura del pulsador es HIGH (pulsado)...
	if  (estado == HIGH){
      	// ... enciende el LED.
		digitalWrite(LED,HIGH);
      // En caso contrario (no pulsado)... 
	} else { 
      	// Apaga el LED
      	digitalWrite(LED,LOW); 
	}
}

¿Cómo conectar un LED con un pulsador y mantener el encendido?

Llegados a este punto, puede que te preguntes ¿Cómo hago para que se mantenga el LED encendido al pulsar y soltar el botón?

Aquí tienes la respuesta. La disposición del esquema va a ser la misma. Solo tienes que cambiar el código.

Las constantes y variables van a ser las mismas. Así como el setup(). Nos interesa fijarnos solo en el loop().

Tenemos dos if. Si presionamos el pulsador y la variable tiene un valor de LOW (apagado), entonces, que encienda el LED y que le dé un valor de HIGH (encendido) al estado. Esto tiene un retraso de medio segundo para evitar que el botón se presione automáticamente antes de que dejemos de presionarlo físicamente. Algo parecido a cuando pulsas una tecla del teclado seguido. Estas llevan un pequeño retraso para no hacer estooooooooooo cuando pulsamos una tecla.

El otro if contempla la otra situación, que pulsemos el pulsador cuando el estado es HIGH. Aquí, se apagará el LED y se le dará al estado el valor de LOW.

Y podemos hacer esto infinitamente.

// Constantes para los pines
const int PULSADOR = 7;
const int LED = 8;

// Variable para almacenar el estado del PULSADOR
int estado;

void setup(){
  	// PULSADOR configurado como entrada de datos
	  pinMode(PULSADOR,INPUT);
  	// LED configurado como salida de datos
  	pinMode(LED,OUTPUT);
}
  
void loop() {
  // Si el pulsador es pulsado cuando el LED está apagado...
  if(digitalRead(PULSADOR) && estado==LOW){
    // ... se enciende el LED
    digitalWrite(LED, HIGH);
    // Se establece un retraso de medio segundo entre pulsaciones
    delay(500);
    // El estado se queda con un valor de HIGH (LED encendido)
    estado=HIGH;
  } 
  
  // Si el pulsador es pulsador cuando el LED está encendido...
  if(digitalRead(PULSADOR) && estado==HIGH){
	// ... se apaga el LED
    digitalWrite(LED, LOW);
    // Se establece un retraso de medio segundo entre pulsaciones
    delay(500);
    // El estado se queda con un valor de LOW (LED apagado)
    estado=LOW;   
  }
}

¿Cómo conectar un LED con un pulsador y un delay?

Puede que todavía te hagas otra pregunta. ¿Cómo conectar un LED con un pulsador y que este se apague en cierto tiempo sin pulsar nada?

Es también muy fácil de hacer. El esquema va a ser el mismo.

Aquí igual, nos fijamos en el loop().

Solo necesitamos un if que se entere de que pulsamos el botón y que cuando lo hagamos se encienda el LED. Después, especificamos el delay() que queremos. Para finalmente, que el LED se apague y vuelta a empezar cuando pulsemos el pulsador de nuevo.

// Constantes para los pines
const int PULSADOR = 7;
const int LED = 8;

// Variable para almacenar el estado del PULSADOR
int estado;

void setup(){
  	// PULSADOR configurado como entrada de datos
	pinMode(PULSADOR,INPUT);
  	// LED configurado como salida de datos
  	pinMode(LED,OUTPUT);
}
  
void loop() {
  // Si el pulsador es pulsado cuando el LED está apagado...
  if(digitalRead(PULSADOR)){
    // ... se enciende el LED
    digitalWrite(LED, HIGH);
    // Se establece un retraso de medio segundo entre pulsaciones
    delay(5000);
    digitalWrite(LED,LOW);
  }  
}

Puede que también te preguntes... Bien, si tienes más preguntas, ya lo dejamos para los comentarios. Creo que a partir de aquí, ya puedes dar rienda suelta a tu creatividad. Cualquier supuesto que se te ocurra, déjamelo en los comentarios y lo revisaré.

No te pierdas nada sobre Arduino.

Un comentario en «LED con pulsador en Arduino»

  1. Si quiero que el led se encienda recién cuando suelto el boton, espere 5 seg y después se apague como debería ser? Presiono el botón y no hace nada y al soltar se prende durante 5 seg.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Arduino uno Entrada anterior Mejorar el código de Arduino con bucles
Entrada siguiente Como ver la contraseña del wifi guardada en Windows