🛠 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

Objectifs

Exploiter la signature de la Mega 2560 : 15 canaux PWM 8 bits accessibles par analogWrite sur les broches 2 à 13 et 44 à 46 (là où l'Uno n'en a que 6). Vous réaliserez un balayage lumineux « knight-rider » non bloquant sur les 15 LED à la fois, en pilotant l'intervalle de rafraîchissement avec millis pour garder la liaison série réactive.

Matériel

Rappel important : 20 mA recommandés par broche, 40 mA en absolu. Quinze LED à pleine intensité tirent environ 120 mA au total, ce qui reste correct, mais ne dépassez jamais 40 mA sur une seule broche.

Code complet

// 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)
    }
  }
}

Vérification attendue

Une onde de luminosité se déplace en boucle le long des 15 LED, avec une chute d'intensité triangulaire autour du pic mobile. Le moniteur série reste réactif (pas de delay bloquant) : vous pouvez ajouter des commandes sans saccade.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels