const int PWM_OUT = 3;
const int LED_PINS[] = {4, 5, 6, 7, 8, 9, 10, 11, A0, 2};
const int NUM_LEDS = sizeof(LED_PINS) / sizeof(LED_PINS[0]);
const int SALTO_BRILLO = 1;
const unsigned long INTERVALO = 10000UL; // microsegundos
void fade (int sentido = 1) { // 1 -> ascendente, -1 -> descendente
for (int brillo = 0; brillo < 256; brillo += SALTO_BRILLO) { // sube el brillo del LED seleccionado
if (sentido < 0) {
analogWrite(PWM_OUT, 255 - brillo);
} else {
analogWrite(PWM_OUT, brillo);
}
delayMicroseconds(INTERVALO);
}
}
void fadein () {
fade(1);
}
void fadeout () {
fade(-1);
}
void manejar_led ( int ledPin) {
digitalWrite(ledPin, LOW); // "habilita" el LED conectado al pin indicado
fadein(); // aumenta el brillo del LED
fadeout (); // disminuye el brllo del LED
digitalWrite(ledPin, HIGH); // "deshabilita" el LED conectado al pin indicado
}
void setup() {
for (int pin = 0; pin < NUM_LEDS; pin++) {
pinMode(LED_PINS[pin], OUTPUT);
digitalWrite(LED_PINS[pin], HIGH); // "deshabilita" el LED conectado al pin indicado
}
}
void loop() {
// *** Ping ***
for (int pin = 0; pin < NUM_LEDS; pin++) {
manejar_led(LED_PINS[pin]); // "maneja" el LED conectado al pin indicado
}
// *** Pong ***
for (int pin = NUM_LEDS - 2; pin > 0; pin--) {
manejar_led(LED_PINS[pin]); // "maneja" el LED conectado al pin indicado
}
}