Se tiene el siguiente código para un circuito que enciende un LED al pulsar un botón. Encuentre el error y reescriba la línea correspondiente.

Si estás empezando a programar circuitos, es muy probable que te hayas encontrado con este escenario: conectas un botón, escribes el código, pero el LED se queda encendido siempre o no responde como debería.
Hoy vamos a analizar un código con un error «invisible» y cómo mejorarlo con una técnica profesional: el Debounce.
El Error: ¿Asignar o Comparar?
Mira este fragmento de código que suele dar dolores de cabeza:
C++
if (buttonState = HIGH) {
digitalWrite(ledPin, HIGH);
}
A simple vista parece correcto, pero hay un fallo crítico. En programación:
=(Un solo igual): Es para asignar. Le estás diciendo a la variablebuttonStateque ahora valeHIGH. Como esa operación es «exitosa», elifsiempre se cumple.==(Doble igual): Es para comparar. Pregunta: «¿Es el valor de esta variable igual a HIGH?».
La corrección es simple: añade ese segundo signo = para que tu Arduino realmente pregunte por el estado del botón.
El Siguiente Nivel: El Efecto «Rebote» (Bounce)
Incluso con el código corregido, podrías notar que el LED parpadea de forma extraña. Esto se debe al rebote mecánico. Al presionar un botón, las láminas metálicas internas vibran antes de hacer contacto total, enviando decenas de señales falsas en microsegundos.
La Solución: Antirrebote por Software (Debounce)
Para arreglarlo sin añadir más piezas al circuito, usamos un pequeño truco de tiempo. Aquí tienes el código final optimizado:
C++
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
delay(50); // Pausa de cortesía para que el botón se estabilice
if (digitalRead(buttonPin) == HIGH) { // Confirmamos la pulsación
digitalWrite(ledPin, HIGH);
}
} else {
digitalWrite(ledPin, LOW);
}
}
Conclusión
Programar hardware no es solo escribir lógica, es entender cómo se comportan los objetos físicos. Un simple delay(50) y un doble == pueden ser la diferencia entre un proyecto frustrante y uno que funciona a la perfección.

