
Video
Diagrama del circuito

Código fuente
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}
28Preguntas 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().
