
Video
Diagrama del circuito

Código fuente
1int ledState = 0;
2
3void setup() {
4 pinMode(13, INPUT);
5 pinMode(7, OUTPUT);
6}
7
8void loop() {
9 if (digitalRead(13) == 1) {
10 ledState = !ledState;
11 digitalWrite(7, ledState);
12 delay(300);
13 }
14}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().
