For anidado para coche fantástico y simplificar código

Algún consejo para simplificar el loop de este código. Es de una versión de luces del coche fantástico en la que se produce una estela de luz en las que se produce un apagado y encendido progresivo de las luces. Aparentemente creo que me funciona este código pues lo he probado.
El tema es si se puede anidar el fade en otro for para simplificar el código.

int ledPins[] = {2, 11, 10, 9, 6, 5, 3, 13}; // Creo un array con los leds
int ledCnt = 8; // Numero de pines
int inicio = 0;
int timeDelay = 1;
void setup() 
    {
   // initialize the digital pins as an output
   int count = 0; // Inicializamos la variable count como un entero
   for (count = 0; count < ledCnt; count++) // Configuramos todos los PINs de salida
       pinMode( ledPins[count], OUTPUT);
       digitalWrite(ledPins[count], LOW);
    }

void loop() {
  // Este primer bucle recorre el array de izquierda a derecha    
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPins[1], fadeValue);
    // wait for n milliseconds to see the dimming effect
    delay(timeDelay);    
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
    analogWrite(ledPins[2], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
    analogWrite(ledPins[3], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
    analogWrite(ledPins[4], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) { 
    analogWrite(ledPins[5], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
    analogWrite(ledPins[6], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
    analogWrite(ledPins[7], fadeValue);    
    delay(timeDelay);
  }
  
  // fade out from max to min in increments of 5 points:
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[1], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[2], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[3], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[4], fadeValue);    
    delay(timeDelay);
  }  
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[5], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[6], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {      
    analogWrite(ledPins[7], fadeValue);    
    delay(timeDelay);
  }
//  digitalWrite(ledPins[7], LOW);

// Recorremos el array en sentido inverso de derecha a izquierda
  // fade in from min to max in increments of 5 points:
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
    analogWrite(ledPins[6], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
    analogWrite(ledPins[5], fadeValue);
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
    analogWrite(ledPins[4], fadeValue);
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
    analogWrite(ledPins[3], fadeValue);
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
    analogWrite(ledPins[2], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
    analogWrite(ledPins[1], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
    analogWrite(ledPins[0], fadeValue);    
    delay(timeDelay);
  }
    
  // fade out from max to min in increments of 5 points:
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[6], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[5], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[4], fadeValue);    
    delay(timeDelay);
  }  
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[3], fadeValue);    
    delay(timeDelay);
  }
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[2], fadeValue);    
    delay(timeDelay);
  }
   for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[1], fadeValue);    
    delay(timeDelay);
  }
   for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
    analogWrite(ledPins[0], fadeValue);    
    delay(timeDelay);
   }  
}

esto es un boceto, lo haria mas o menos asi

10 leds y se van encendiendo de 3 en 3

int sent=0 //sentido izda a derecha 0 sentido izda derecha 1
i=0;

while(1)
{

led(i);
led(i+1);
led(i+2);

if (i==0 || sent==0)
sent=0;
i=i+1;

if (i==7 || sent==1)
 sent=1;
 i=i-1;

}

Moderador: Código editado con etiquetas para su correcta visualización

El anterior código visualmente era mas o menos aceptable aunque a nivel de código era un churro. Este creo que esta mejor y el funcionamiento es bueno.
El delay de los analógicos parece muy rápido pero fíjate que al hacer fade recorre de 5 en 5 de 0 a 255.

Ahí va el código modificado que creo que va bien. Muchas gracias por los consejos.

int ledPins[] = {2, 11, 10, 9, 6, 5, 3, 13}; // Creo un array con los leds
int ledCnt = 8; // Numero de pines
int inicio = 0;
int timeDelay = 1;
int timeDelayDigital = 100;
void setup() 
    {
   // initialize the digital pins as an output
   int count = 0; // Inicializamos la variable count como un entero
   for (count = 0; count < ledCnt; count++) // Configuramos todos los PINs de salida
       pinMode( ledPins[count], OUTPUT);
       digitalWrite(ledPins[count], LOW);
    }

void loop() {
  // Este primer bucle recorre el array de izquierda a derecha    
  for ( int i = 2; i < 7; i++) {
    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
      analogWrite(ledPins[i], fadeValue);    
      delay(timeDelay);
    }
    for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
      analogWrite(ledPins[i-1], fadeValue);    
      delay(timeDelay); 
   }
  }
  digitalWrite(ledPins[7], HIGH);
  delay(timeDelayDigital);
  digitalWrite(ledPins[7], LOW);
  // Recorremos el array en sentido inverso de derecha a izquierda  
  for ( int i = 5; i >= 1; i--) {
    for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {    
      analogWrite(ledPins[i], fadeValue);    
      delay(timeDelay);
  } 
    for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {    
      analogWrite(ledPins[i+1], fadeValue);    
      delay(timeDelay);
     }  
}
  digitalWrite(ledPins[0], HIGH);
  delay(timeDelayDigital);
  digitalWrite(ledPins[0], LOW);
}