Array et matrice de leds

Bonjour,

Voilà mon problème j'ai fais une matrice de led où chaque led est indépendante mais les pins ne sont pas unique
--> exemple : la led 1 & 2 partagent le pin 13 relié à leur anode (+), mais d'un autre côté la led 5 ne partage pas le même pin en étant sur la même ligne.

Ce que j'aimerais faire c'est transformer tout ça en quelque chose de clair (tableau ? fonction ?) pour avoir une sorte de coordonnée cartésienne.
Le but est de pouvoir créer une suite entre les leds (décalage de ligne / décalage de colonne) sans registre à décalage, juste en prog.
--> exemple : une fonction simple ou pour allumer la première led il suffirai d'une fonction du style allumer(1,1) avec 1,1 les coordonnées.

J’espère avoir été assez clair n'hésitez pas à demander plus d'info. Merci d'avance :slight_smile:

Salut,

Tu as été assez clair dans ta demande, sauf sur 2 points (j'y viens tout à l'heure). Par contre, ton montage a l'air, excuse moi, assez affreux, dans le sens compliqué ^^ ..

Ce que tu ne précise pas, c'est la taille de ta matrice pour commencer.
Ensuite, comment commande-tu les colonnes?

Si j'ai bien compris, ton montage ressemble grosso-modo (d'après tes descriptions) à ça:

pin 13 -------O--------O O (3 leds sur la même ligne, mais pas la même pin de commande)
pin ? ------------------------|

Bonjour,

Comme ça, avec la description actuelle ça ressemble à du charlieplexing :

Mais sans un schéma complet du câblage (même sous paint) c'est assez compliqué de se représenter le fonctionnement du montage ...

J'ai trouvé la solution finalement, pour ceux qui passeraient et qui ont le même problème que moi je suis passé par deux array en stockant dans l'ordre toutes mes valeurs pour les bornes positives dans un tableau et toutes les bornes négatives dans un autre tableau, quand je dois allumer une led je fais appelle à la colonne et la ligne correspondante.

Mon schéma est celui d'une plaque vendu dans le commerce il me semble :
Imgur

LuPouCky:
Mon schéma est celui d'une plaque vendu dans le commerce il me semble :
All sizes | LED shield schematic | Flickr - Photo Sharing!

Héhé sans même le savoir j'avais deviné que c'était du charlieplexing :grin:

ahah ! en même temps c'est le meilleur moyen d'avoir quelque chose de correct sans trop se casser la tête ]:smiley:

LuPouCky:
ahah ! en même temps c'est le meilleur moyen d'avoir quelque chose de correct sans trop se casser la tête ]:smiley:

Pas forcément.

Le charlieplexing c'est pratique en terme de rapport nombre de broches / leds mais pour de l'affichage "rapide" c'est pas top.
Vu que tu ne peut allumer qu'une led par "branche" du circuit si tu veut avoir une image "fixe" il faut une fréquence de rafraichissement encore plus élevé qu'avec un rafraichissement par lignes/colonnes.

Bon en fait mon sujet n'est absolument pas résolu après avoir chercher et encore chercher des solutions sur internet toujours pas trouver. Le problème de ma solution :
L'arduino renvoi un état bas par défaut et donc alimente toutes mes broches en - ce qui fausse completement.

Est-il possible d'obtenir des "contacts secs" avec l'arduino ? c'est a dire que les broches n'étant pas utilisés ne sont pas en - par défaut ?

LuPouCky:
L'arduino renvoi un état bas par défaut et donc alimente toutes mes broches en - ce qui fausse completement.

Est-il possible d'obtenir des "contacts secs" avec l'arduino ? c'est a dire que les broches n'étant pas utilisés ne sont pas en - par défaut ?

Une broche en OUTPUT = niveau 0v ou 5v, ya pas d'état par défaut c'est toi qui fixe la valeur.
Une broche en INPUT = niveau HiZ (haute impédance = fil "en l'air")
Tu peut passer d'OUTPUT à INPUT quand tu veut dans ton programme.
(je sait pas si j'ai répondu à ta question ... j'ai pas tout compris pour être franc :sweat_smile:)

Non en fait j'ai ma matrice de 9x14, les leds défilent de x = 1 à x = 14, arrivé en bas (comme dans un tétris) la led dois rester allumée et la prochaine "vague" dois défiler de x = 1 à x = 13.
Le problème c'est qu'une fois que j'ai ma LED d'allumé tout en bas tout s'excite puisque je met en OUTPUT permanent au moins 1 des pins.
Je sais qu'il existe des méthodes de fréquence de rafraîchissement ou quelque chose comme ca mais peu de recherches aboutissent à quelque chose de concret.

mon bout de code correspondant :

int led_pos[] = {0,9,9,9,9,9,9,9,9,9,4,9,3,9,2};
int led_neg[] = {0,5,6,7,8,10,11,12,13,4,9,3,9,2,9};
int i;
int n = 14;


for(i = 1; i <= n; i++)
  {
    pinMode(led_pos[i], OUTPUT);
    pinMode(led_neg[i], OUTPUT);
    digitalWrite(led_pos[i], HIGH);
    digitalWrite(led_neg[i], LOW);
    
    delay(75);
    
    pinMode(led_pos[i], INPUT);
    pinMode(led_neg[i], INPUT);
  } 

  n -= 1;
  
  while(n == 1)
  {
    pinMode(led_pos[1], OUTPUT);
    pinMode(led_neg[1], OUTPUT);
    digitalWrite(led_pos[1], HIGH);
    digitalWrite(led_neg[1], LOW);
    delay(25);
    pinMode(led_pos[1], INPUT);
    pinMode(led_neg[1], INPUT);
    delay(25); 
  }

Voilà et la mon problème est pour allumé cette derniere led a chaque fois au lieu de contourné le probleme en laissant eteint et en reduisant le xmax du chenillard.

bonsoir LuPoucky

pour ma part j'utilise un MAX7219 pour piloter la matrice a led
et avec la librairy LedControl je me positionne ou je veut sur la matrice
c'est peut etre une solution a ton probleme

cordialement

Jean-Pierre