Pb de latence en charliplexing

Bonsoir tout le monde
J’ai monté une matrice de 20 leds (4x5) en utilisant le charliplexing.

et voilà le code :

int nbPins = 5;
int nbLeds = nbPins*(nbPins-1);
int pins[] = {8,9,10,11,12};

int leds[20][5] = {   // DECLARATION DES PINS POUR CHAQUE LED : 0 = OUTPUT LOW, 1 = OUTPUT HIGH, 2 = INPUT
  //1
  {1,0,2,2,2},
  {0,1,2,2,2},
  {1,2,0,2,2},
  {0,2,1,2,2},
  //2
  {2,1,0,2,2},
  {2,0,1,2,2},
  {2,2,1,2,0},
  {2,2,0,2,1},
  //3
  {2,2,1,0,2},
  {2,2,0,1,2},
  {2,0,2,2,1},
  {2,1,2,2,0},
  //4
  {2,2,2,1,0},
  {2,2,2,0,1},
  {2,1,2,0,2},
  {2,0,2,1,2},
  // 5
  {0,2,2,2,1},
  {1,2,2,2,0},
  {0,2,2,1,2},
  {1,2,2,0,2}
};

void setup() { 
 pinMode(13,OUTPUT);     // VOYANT DE FONCTIONNEMENT
 digitalWrite(13, HIGH);
}

void light(int led) {
  for (int j=0;j<nbPins;j++) {
    switch (leds[led][j]) {
      case 0 :
        pinMode(pins[j],OUTPUT);
        digitalWrite(pins[j],LOW);
        break;
      case 1:
        pinMode(pins[j],OUTPUT);
        digitalWrite(pins[j],HIGH);
        break;
      case 2: 
        pinMode(pins[j],INPUT);
        break;
    }    
  }
}

void loop() {
  light(2);
}

Je peux sans pb allumer chaque led indépendamment en appellant light(ledID).

Mon problème vient du fait que si je fais une boucle du style :

void loop() {
   light(2);
   delay(20ms);
   light(5);
   delay(20ms);
}

Je vais me retrouver avec une led autre que la 2 ou 5 qui “clignote” faiblement, comme si j’avais fait un analogWrite(pin,10); sur une pin qui à une PWM…

Je pense que cela est du au fait que entre la led 2 et la 5, on a delai d’execution pour switcher les 5 pins en output low/output high/input, et je me retrouve pendant un temps très court avec une configuration des pins du style :
{0,1,1,2,2}, donc deux pins en output high (par exemple) > deux leds allumées en même temps.

Auriez vous une idée de comment “gommer” ce delai ?

Merci ^^

melka