Go Down

Topic: matrice de led 'affichage inversé" (Read 898 times) previous topic - next topic

caps1g3f

Bonjour,
 Je viens de recevoir un(des) matrice led 8*8 ( produit suivant).
Aprés soudure, mise en route et 'test', avec l'exemple de la libraire 'LedControl' les caractéres sont inversé (effet miroir). Effet intéressant mais pas souhaité ;-)
Après moult lecture il semble qu'il y ait une inversion qqpart, mais franchement je suis un peu perdu pour comprendre d'ou vient  le prb ? (interface chaise clavier ? soudure, montage, composant, code....)


Pourriez vous me donner un petit coup de main ?  (la méthode brute de changer les tableaux de bytes me semble un peu relever du travail de force  :smiley-sad: surtout qu'apré je souhaite créer mes propres symboles...)
( cf code et photo ou le 'r' est inversé...)

Merci d'avance
Code: [Select]

//We always have to include the library
#include "LedControl.h"


LedControl lc=LedControl(9,8,10,1);

/* we always wait a bit between updates of the display */
unsigned long delaytime=500;

void setup() {
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
}

void writeArduinoOnMatrix() {
  /* here is the data for the characters */
  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
  byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};
  byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
  byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
  byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};
  byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};
  byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};

  /* now display them one by one with a small delay */

  lc.setRow(0,0,r[0]);
  lc.setRow(0,1,r[1]);
  lc.setRow(0,2,r[2]);
  lc.setRow(0,3,r[3]);
  lc.setRow(0,4,r[4]);
  delay(delaytime);

  }

void loop() {
  writeArduinoOnMatrix();

}

patg_

#1
Jan 06, 2017, 10:52 am Last Edit: Jan 06, 2017, 11:18 am by patg_
Manifestement l'ordre des fils des colonnes sur cette carte est l'inverse de celui qui est attendu par l'exemple de code fourni...
Donc il faut inverser l'ordre des bytes dans les tableaux.

Mes Arduineries: http://breizhmakers.over-blog.com/

troisiemetype

La première idée qui me vient est que, puisque chaque caractère est inversé, il suffit de redéfinir les tableaux d'octets qui définissent lesdits caractères. Ainsi
Code: [Select]
byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
deviendrait
Code: [Select]
byte u[5]={B00111110, B00000010, B00000010, B00000100, B00111100};

D'un point de vue du code, je pense qu'il serait préférable de sortir la définition des caractères de writeArduinoOnMatrix(). Puisqu'ils seront probablement appelés à être utilisés par plusieurs fonction, autant les rendre accessibles en les définissant en début de programme. Et éventuellement dans la mémoire programme, avec l'attribut PROGMEM.

caps1g3f

Ok merci pour le coup de main... y'a pas le choix il va falloir s'y mettre donc
Je viens de trouver ce soft (led matrix studio) qui aide grandement à la configuration pour obtenir le résultat attendu.
Mais j'avoue je reste sur ma faim, car mon objectif final est d'utiliser une cette librairie pour faire des effets. Je commençais par la base car manifestement il y a du travail encore pour + complexe  ::)  et même 'la base' posant problème j'ai un petit coup de mou  :smiley-roll-sweat: Mais bon si c'étais simple ça ne serait pas aussi intéressant.

Sinon concernant la structure du code, pour le moment c'est du copier/coller de l'exemple, sans autre forme de procés (bon en même temps, vu mon niveau pas sur de faire mieux), donc remarque bienvenue ;-)

Merci

Go Up