Go Down

Topic: Pb de latence en charliplexing (Read 801 times) previous topic - next topic

melka

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



et voilà le code :
Code: [Select]
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 :
Code: [Select]

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
http://melka.one.free.fr/blog/
http://www.flickr.com/photos/melkaone/

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy