🛠 Piloter 15 LED en PWM simultané
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
- 1 × Arduino Mega 2560 + câble USB
- 15 × LED + 15 × résistances 330 Ω
- Plaque d'essai (ou deux plaques juxtaposées) et câbles
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
- Essayer
analogWritesur une broche hors 2–13 / 44–46 : la fonction ne génère aucun PWM sur les autres broches de la Mega. - Câbler les broches 44–46 à l'envers : elles sont sur le connecteur du milieu de la carte, pas à côté de la 13.
- Oublier les résistances sur certaines LED : à 255 en PWM complet, la LED concernée et la broche chauffent.
- Utiliser
delaydans la boucle : tout le système se fige et la série ne répond plus ; décomposez avecmillis.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinodouble-servo.inoArduinopont-uart.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduino