🛠 Piloter 15 LED en PWM simultané
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
- 1 × Arduino Mega 2560 + cable USB
- 15 × LED + 15 × resistencias de 330 Ω
- Placa de pruebas (o dos placas unidas) y cables
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
- Intentar usar
analogWriteen un pin fuera del rango 2–13 / 44–46: la función no genera ninguna señal PWM en los otros pines de la Mega. - Conectar los pines 44–46 al revés: están en el conector central de la placa, no junto al pin 13.
- Olvidar las resistencias en algunas LED: con un valor PWM de 255, la LED afectada y el pin se calientan.
- Usar
delaydentro del bucle: todo el sistema se bloquea y el puerto serie deja de responder; descompón la lógica usandomillis.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinodouble-servo.inoArduinopont-uart.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduino