🛠 Piloter 15 LED en PWM simultané

Arduino Mega 2560 (Rev3) · intermediaire · Schéma : IMG-mega-2560-intermediaire-1-pwm-multi-led.svg — barre de 15 LED avec résistances sur les broches PWM 2 à 13 et 44 à 46 de l’Arduino Mega 2560, effet balayage lumineux

Objetivos

Aprovechar la capacidad de la Mega 2560: 15 canales PWM de 8 bits accesibles mediante analogWrite en los pines 2 a 13 y 44 a 46 (mientras que el Uno solo tiene 6). Realizarás un barrido luminoso tipo «knight-rider» no bloqueante sobre las 15 LED simultáneamente, controlando el intervalo de refresco con millis para mantener la conexión serie reactiva.

Material

Recordatorio importante: se recomiendan 20 mA por pin, 40 mA como máximo absoluto. Quince LED a plena intensidad consumen aproximadamente 120 mA en total, lo cual es correcto, pero nunca superes los 40 mA en un solo pin.

Código completo

// Balayage PWM sur les 15 broches PWM (2-13, 44-46)
const uint8_t PWM_PINS[] = {2,3,4,5,6,7,8,9,10,11,12,13,44,45,46};
const uint8_t N = sizeof(PWM_PINS);

uint32_t t0 = 0;
float phase = 0;

void setup {
  for (uint8_t i = 0; i < N; i++) pinMode(PWM_PINS[i], OUTPUT);
  Serial.begin(115200);
}

void loop {
  uint32_t now = millis;
  if (now - t0 >= 20) {              // rafraîchissement 50 Hz
    t0 = now;
    phase += 0.08f;
    if (phase >= N) phase -= N;
    for (uint8_t i = 0; i < N; i++) {
      float d = fabsf(phase - (float)i);
      if (d > (float)N / 2) d = (float)N - d;
      uint8_t v = (d < 3) ? (uint8_t)(255 - d * 85) : 0;
      analogWrite(PWM_PINS[i], v);   // PWM 8 bits (0-255)
    }
  }
}

Verificación esperada

Una onda de luminosidad se desplaza en bucle a lo largo de las 15 LED, con una caída de intensidad triangular alrededor del pico móvil. El monitor serie permanece reactivo (sin delay bloqueante): puedes añadir comandos sin que haya parpadeos.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales