De Novato a Pro: Solucionando el Error más Común en Arduino

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 variable buttonState que ahora vale HIGH. Como esa operación es «exitosa», el if siempre 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.

Deja un comentario

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

Scroll al inicio