Pages: [1]   Go Down
Author Topic: Pb de latence en charliplexing  (Read 708 times)
0 Members and 1 Guest are viewing this topic.
Grenoble/Lyon - France
Offline Offline
Sr. Member
****
Karma: 0
Posts: 363
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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



et voilà le code :
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 :
Code:
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
Logged


Pages: [1]   Go Up
Jump to: