Inicio / Arduino

Placa de desarrollo Arduino UNO - LEDs

LED significa diodo emisor de luz (Light Emitting Diode): un componente semiconductor que emite luz cuando circula corriente a través de él. En este ejemplo hacemos parpadear dos LED de forma alternada.

Conexiones

ComponenteConexiónNota
LED1A0 y GNDCon resistencia de 220 Ω
LED2A1 y GNDCon resistencia de 220 Ω

La patilla larga es el positivo

Un LED solo conduce en un sentido. La patilla larga (ánodo) va al pin del Arduino y la corta (cátodo) a GND. Si lo montas al revés no se enciende, pero tampoco se estropea.

La resistencia de 220 Ω no es opcional: sin ella pasa demasiada corriente y el LED se degrada en poco tiempo.

Código del programa

Arduino / C++
const int LED1 = A0;
const int LED2 = A1;

void setup() {
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
}

void loop() {
  digitalWrite(LED1, HIGH);   // Encender LED1
  delay(1000);

  digitalWrite(LED1, LOW);    // Apagar LED1
  digitalWrite(LED2, HIGH);   // Encender LED2
  delay(1000);

  digitalWrite(LED2, LOW);    // Apagar LED2
  delay(1000);
}

Cómo funciona

El ciclo completo dura 3 segundos y tiene tres fases: LED1 encendido un segundo, LED2 encendido un segundo, y un tercer segundo con los dos apagados.

Esa pausa final viene del último delay(1000). Si buscabas una alternancia estricta —que en todo momento haya exactamente un LED encendido— basta con quitar ese delay, y el ciclo pasa a durar 2 segundos.

Los cambios de estado no se «acumulan»: cuando se apaga LED1 y se enciende LED2 en la misma línea, ocurren prácticamente a la vez, porque entre ambas instrucciones no hay ninguna espera.

¿Quieres dejar un solo LED encendido?

Pon digitalWrite(LED1, HIGH); dentro de setup() y deja el loop() vacío. setup() se ejecuta una sola vez al arrancar, así que el LED se queda encendido sin que nada vuelva a tocarlo.

Posibles mejoras

Con dos LED, repetir digitalWrite línea por línea se lleva bien. Con seis se vuelve incómodo y es fácil equivocarse. La solución es guardar los pines en un array y recorrerlos con un bucle for: así el código no crece aunque añadas más LED.

Arduino / C++
// Efecto de barrido con varios LED
const int LEDS[] = {A0, A1, A2, A3};
const int N = sizeof(LEDS) / sizeof(LEDS[0]);

void setup() {
  for (int i = 0; i < N; i++) {
    pinMode(LEDS[i], OUTPUT);
  }
}

void loop() {
  for (int i = 0; i < N; i++) {
    digitalWrite(LEDS[i], HIGH);
    delay(150);
    digitalWrite(LEDS[i], LOW);
  }
}

Para añadir un LED más solo hay que meter su pin en la lista LEDS[]: el resto del programa no cambia. La constante N se calcula sola con sizeof, así que tampoco hay que acordarse de actualizar el número.

Queda un detalle común a todos estos ejemplos: mientras el Arduino está dentro de un delay() no puede hacer nada más, ni siquiera leer un botón. Para montajes que deban reaccionar mientras parpadean, el camino es millis() en lugar de delay().