#10Principiante

Encender y apagar un LED con un botón

4.8(100)
158 completado
Encender y apagar un LED con un botón
Un proyecto de conmutación que cambia el estado del LED (encendido/apagado) cada vez que se pulsa un botón. Enseña la variable de estado y la lógica de rebote.

Video

Diagrama del circuito

Encender y apagar un LED con un botón - Circuit

Código fuente

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Encender y apagar un LED con un botón
4// ─────────────────────────────────────────
5// Cada pulsación del botón alterna el LED (encendido/apagado). La espera
6// de 300 ms ignora el rebote del botón. Si mantienes el botón, el LED
7// alterna cada 300 ms.
8//
9// Pines:
10//   D13 -> Botón, otra patilla a 5V
11//   D13 -> Resistencia de 10k a GND (pull-down)
12//   D7  -> LED (con una resistencia de 330 ohmios)
13
14int ledState = 0;   // Estado del LED: 0 = apagado, 1 = encendido
15
16void setup() {
17  pinMode(13, INPUT);   // Entrada del botón (pull-down externa)
18  pinMode(7, OUTPUT);   // Salida del LED
19}
20
21void loop() {
22  if (digitalRead(13) == 1) {    // Botón pulsado
23    ledState = !ledState;        // Invertir el estado
24    digitalWrite(7, ledState);
25    delay(300);                  // Esperar a que pase el rebote
26  }
27}
28

Preguntas frecuentes

¿Qué es el «debounce» y por qué es necesario?▾

En el momento en que se pulsa un botón mecánico, este se abre y se cierra varias veces durante unas milisegundos (rebote). Arduino puede interpretar esto como varias pulsaciones y el LED queda en un estado aleatorio. El rebote se elimina esperando un breve periodo de tiempo (por ejemplo, 50 ms) tras el cambio de estado.

A veces el LED no cambia o cambia dos veces, ¿por qué?▾

Por lo general, el tiempo de rebote falta o es demasiado corto. Además, solo hay que detectar el momento en que se «pulsa» el botón (estado anterior LOW, nuevo estado HIGH); si el estado cambia en cada ciclo mientras se mantiene pulsado el botón, el LED parpadeará de forma aleatoria.

¿Para qué sirve la variable de estado?▾

Guarda en la memoria si el LED está encendido o apagado. Con cada pulsación válida, la variable se invierte (ledDurum = !ledDurum) y el LED se controla en función de este valor.

¿Puedo controlar diferentes LED con varios botones?▾

Sí, basta con que mantengas una variable por cada botón, con su estado anterior y su estado del LED. Si vas a utilizar muchos botones, será más ordenado usar matrices y código de rebote basado en millis().

Encender y apagar un LED con un botón | BlueGrays