[Resolue] Afficheur LED 64X16

Hello

Pour un gros projet, je cherche à faire un timer min:sec;millis
Afficher le plus gros possible dessus.

j'ai donc acheter un panneau de led 64x16

http://www.ebay.com/itm/64x16-dot-Matrix-LED-Sign-Light-Neon-Bright-UNO-MCU-Provide-Arduino-Demo-Code-/231073428506

Il marche nikel avec le code fournis par le vendeur.
Sauf que le code est fait pour afficher uniquement une image fixe. prêt coder dans l'arduino.

Je ne trouve pas comment faire pour l'utiliser comme écran standard (Équivalent d'un lcd.print en faite)

Merci de votre aide !!! Bonne journée !

Bonjour,
peux-tu communiquer le code qui fonctionne ?
ce sera une bonne base de départ

Hello

Voila le programme fournis par le vendeur:
http://www.canton-electronics.com/product_extra_files/3.75MM%206416%20Matrix%20LED.rar

Hello,
peux-tu extraire le code et nous le communiquer entre balises ?

Yep, pas de soucis.

//Author: cantone-electonics
//More information welcome to : http://www.canton-electronics.com 
//Arduino 1.0.4
//Arduino uno R3
//64x16 Matrix LED

#define COL_PIXEL     64
#define ROW_PIXEL     16

int latchPin=8; //LT
int clockPin=12;//SK
int dataPin=11; //R1

int en_74138 = 2;
int la_74138 = 3;
int lb_74138 = 4;
int lc_74138 = 5;
int ld_74138 = 6;
 
unsigned int ROW_xPixel;
unsigned int ROW_num;
unsigned char Col_num_1;
unsigned char Col_num_2;
unsigned char Col_num_3;
unsigned char Col_num_4;
unsigned char Col_num_5;
unsigned char Col_num_6;
unsigned char Col_num_7;
unsigned char Col_num_8;


//Data code: Horizontal modulus ,Bytes reverse order
unsigned char  Bmp1[]=
{
/*------------------------------------------------------------------------------
;  Width X height (pixels): 64X16
;I Love You
------------------------------------------------------------------------------*/
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xff, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xc, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x3, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x30, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x3, 0xc0, 0x3, 0x3, 0x30, 0xf0, 0x0, 0xc0, 0xc, 
0xf0, 0xc0, 0x0, 0x3, 0x0, 0xc, 0x0, 0x3, 0x30, 0xc, 0x3, 0x30, 0xc, 0x3, 0x0, 0x3, 0xc, 0xc3, 0x0, 0x3, 0x0, 0xc,
0x0, 0x3, 0xc, 0x30, 0x3, 0x30, 0x3, 0xc, 0x0, 0x3, 0x3, 0xcc, 0x0, 0x3, 0x0, 0xc, 0x0, 0x3, 0xc, 0x30, 0x3, 0x30,
0x3, 0xc, 0x0, 0x3, 0x3, 0xcc, 0x0, 0x3, 0x0, 0xc, 0x0, 0x3, 0xc, 0x30, 0x3, 0x30, 0xf, 0xc, 0x0, 0x3, 0x3, 0xcc, 
0x0, 0x3, 0x0, 0xc, 0x0, 0x3, 0xc, 0x30, 0x3, 0x30, 0xf3, 0x3, 0x0, 0x3, 0x3, 0xcc, 0x0, 0x3, 0x0, 0xc, 0x0, 0x3, 
0xc, 0x30, 0xc, 0xc, 0x3, 0x0, 0x0, 0x3, 0x3, 0xcc, 0x0, 0x3, 0x0, 0xc, 0x0, 0xc3, 0x30, 0xc, 0x30, 0x3, 0x3, 0xc, 
0x0, 0x3, 0xc, 0xc3, 0x0, 0x3, 0xc0, 0xff, 0x0, 0xff, 0xc0, 0x3, 0xc0, 0x0, 0xfc, 0x3, 0x0, 0x3, 0xf0, 0x0, 0xff, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 
};



unsigned char  Bmp2[]=
{
/*------------------------------------------------------------------------------
; Width X height (pixels): 16X16
;WELCOME 64 16
------------------------------------------------------------------------------*/
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x30, 0xf0, 
};

unsigned char  Bmp3[]=
{
/*------------------------------------------------------------------------------
;  Width X height (pixels): 64X16
;diameter_3.75mm
------------------------------------------------------------------------------*/
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0xf0, 

};

unsigned char  Bmp4[]=
{
/*------------------------------------------------------------------------------
;  Width X height (pixels): 64X16
; ARDUINO
------------------------------------------------------------------------------*/
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0xc0, 0xff,  
};

unsigned char  Bmp5[]=
{
/*------------------------------------------------------------------------------
;  Width X height (pixels): 16X16
;arduino_martix
------------------------------------------------------------------------------*/
0xc0, 0xc0, 0xf, 0x3f, 0xc, 0xf3, 0x33, 0xc, 0xf, 0xc, 0x33, 0xc, 0xf, 0xfc, 0xc0, 0x3, 0x30, 0xc3, 

};

unsigned char  Bmp6[]=
{
/*------------------------------------------------------------------------------
;  Width X height (pixels): 64X16
;merry_christmas
------------------------------------------------------------------------------*/
 0x0, 0x0, 0x30, 0x30, 0xff, 0xfc, 0xf0, 0xc3, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 


};


void shiftOut(unsigned char dataOut)
{
  
    for(int i=0;i<=7;i++)
   {
      PORTB &=~(1<<(clockPin-8));//equate digitalWrite(clockPin,LOW);
       
     if(dataOut & (0x01<<i))  PORTB |=1<<(dataPin-8); //equate digitalWrite(dataPin,HIGH);
     else  PORTB &=~(1<<(dataPin-8));//equate digitalWrite(dataPin,LOW);
     
     PORTB |=1<<(clockPin-8);//equate digitalWrite(clockPin,HIGH);
     
   }
}

//Combine 2 bits/pixel to 1 bits/pixel 
unsigned char Combine_2BitsTo1Bit(unsigned char num,unsigned char *BMP)
{
  
  unsigned char Col_num_tem_1;
  unsigned char Col_num_tem_2;
  unsigned int Col_num_tem = 0;
  unsigned char i=0;
  unsigned char Col_num_1bit = 0x00;
  
  Col_num_tem_1 = *(BMP+num);
  Col_num_tem_2 = *(BMP+num+1);
  
  Col_num_tem = Col_num_tem_1;
  Col_num_tem |= (Col_num_tem_2 << 8);
  
 for(i=0;i<8;i++)
  {   
    if(Col_num_tem&(0x0003<<i*2)) Col_num_1bit |= (0x01<<i);
  }
  return ~Col_num_1bit;
}

//display one picture 
void display_martix(unsigned char *BMP)
{
  //Display count
  unsigned int dis_cnt=256;
  unsigned int i;
  
   for(i=0;i<dis_cnt*16;i++)
   {
     
     digitalWrite(en_74138, HIGH);//Turn off display
  
     //Col scanning
    shiftOut(Col_num_1);
    shiftOut(Col_num_2);
    shiftOut(Col_num_3);
    shiftOut(Col_num_4);
    shiftOut(Col_num_5);
    shiftOut(Col_num_6);
    shiftOut(Col_num_7);
    shiftOut(Col_num_8);
  
    digitalWrite(latchPin, LOW);
    digitalWrite(latchPin, HIGH);
  
    //Row scanning
    // AVR Port Operation 
    PORTD = ((ROW_xPixel << 3 ) & 0X78) | (PORTD & 0X87);//Write PIN 3 4 5 6 la_74138 lb_74138 lc_74138 ld_74138
     
    digitalWrite(en_74138, LOW);//Turn on display
  

     
    if(ROW_xPixel==15) ROW_xPixel=0; else ROW_xPixel++;
  
   /*
   // Single color,1 bits/pixel
   Col_num_1=~BMP[(COL_PIXEL/8)*ROW_xPixel];
   Col_num_2=~BMP[(COL_PIXEL/8)*ROW_xPixel+1];
   Col_num_3=~BMP[(COL_PIXEL/8)*ROW_xPixel+2];
   Col_num_4=~BMP[(COL_PIXEL/8)*ROW_xPixel+3];
   Col_num_5=~BMP[(COL_PIXEL/8)*ROW_xPixel+4];
   Col_num_6=~BMP[(COL_PIXEL/8)*ROW_xPixel+5];
   Col_num_7=~BMP[(COL_PIXEL/8)*ROW_xPixel+6];
   Col_num_8=~BMP[(COL_PIXEL/8)*ROW_xPixel+7];
 */
   
   //Single color,2 bits/pixel 
   Col_num_1 = Combine_2BitsTo1Bit((COL_PIXEL/8)*ROW_xPixel*2,BMP);
   Col_num_2 = Combine_2BitsTo1Bit((COL_PIXEL/8)*ROW_xPixel*2+2,BMP);
   Col_num_3 = Combine_2BitsTo1Bit((COL_PIXEL/8)*ROW_xPixel*2+4,BMP);
   Col_num_4 = Combine_2BitsTo1Bit((COL_PIXEL/8)*ROW_xPixel*2+6,BMP);
   Col_num_5 = Combine_2BitsTo1Bit((COL_PIXEL/8)*ROW_xPixel*2+8,BMP);
   Col_num_6 = Combine_2BitsTo1Bit((COL_PIXEL/8)*ROW_xPixel*2+10,BMP);
   Col_num_7 = Combine_2BitsTo1Bit((COL_PIXEL/8)*ROW_xPixel*2+12,BMP);
   Col_num_8 = Combine_2BitsTo1Bit((COL_PIXEL/8)*ROW_xPixel*2+14,BMP);
  
  // delayMicroseconds(1000); 
   
  }
  
}

void setup()
{
  pinMode(latchPin,OUTPUT);
  pinMode(clockPin,OUTPUT);
  pinMode(dataPin,OUTPUT);
  
  pinMode(en_74138,OUTPUT);
  pinMode(la_74138,OUTPUT);
  pinMode(lb_74138,OUTPUT);
  pinMode(lc_74138,OUTPUT);
  pinMode(ld_74138,OUTPUT);
  
  
  digitalWrite(en_74138, LOW);
  
  // AVR Port Settings
  DDRD |= 0x78; //Set PIN 3 4 5 6 output  
  
  
  
  
}




void loop()
{

  
 display_martix(Bmp1);

 display_martix(Bmp2);

 display_martix(Bmp3);

 display_martix(Bmp4);
 
 display_martix(Bmp5);
 
 display_martix(Bmp6);

 
 
}

J'ai raccourcie les BMP, sinon le message ne passe pas.c'est ce qu'il forme l'image

salut ...

je vois que tu as posté dans un forum anglais sur le même sujet ...

lis bien les anciens posts, surtout celui de kaziewip dans lequel il met en téléchargement un exemple

  • Matrix_LED_12816_PK.ino *

ça devrait être un bon début pour commencer ! (voire même pour finir puisque son code affiche un timer sur la matrice !)

Oui, j'ai trouver le post.
mais j'ai un problème avec l'exemple qu'il donne.

Lorsque je compile, il me donne pas mal d'erreur.
je suis en version 1.5.8

In file included from Matrix_LED_6432_PK.ino:5:0:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/pgmspace.h:28:37: error: 'int sprintf' redeclared as different kind of symbol
 #define sprintf_P(s, f, ...) sprintf((s), (f), __VA_ARGS__)
                                     ^
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:24:0,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:223,
                 from Matrix_LED_6432_PK.ino:8:
/Arduino/hardware/tools/avr/avr/include/stdio.h:669:12: error: previous declaration of 'int sprintf(char*, const char*, ...)'
 extern int sprintf(char *__s, const char *__fmt, ...);
            ^
In file included from Matrix_LED_6432_PK.ino:5:0:
/Arduino/hardware/tools/avr/avr/include/stdio.h:675:12: error: expected primary-expression before 'char'
 extern int sprintf_P(char *__s, const char *__fmt, ...);
            ^
/Arduino/hardware/tools/avr/avr/include/stdio.h:675:12: error: expected ')' before 'char'
Erreur lors de la compilation.

Mais j'avance gentiment.
:slight_smile:

essaie une version inférieur de l'IDE (ils ont changé la gestion de progmem entre autre)

sous 1.5.6-r2 je n'ai aucune erreur de compilation ...

il faudra faire des modifs dans le programme pour pouvoir l'utiliser avec 1 seule matrice 64x16 ... relis bien le post original

Ok, je vais tester avec la 1.5.6

J'ai bien regarder le code, s'il marche comme j'ai comprit, sa devrait être asser simple au final.

Hello

Après pas mal de mal à la tête:

Sa marche, j'ai changé de version de l'IDE, j'arrive à envoyer le code.

J'ai réussi à comprendre comment était fait le code, et il tout bonnement géniale !!!!!!

Il me reste juste un petit problème:

Actuellement, avec mon chronomètre j'affiche le temps sur un LCD avec ça:

TempsSec = (TempsReel /1000)%60;
TempsMil = (TempsReel %1000)/10;
TempsMin = (TempsReel /1000)/60;

Seul problème, pour le panneau de LED, il faut le faire caractère par caractère (de 0 à 9)

Pour faire afficher les dizaine c'est simple, je prend ma valeur divisé par 10 (TempsSEC/10)
Par contre impossible de trouver pour faire afficher les unités.

Merci de votre aide !!!

Bonjour,
c'est TempsSEC%10

Parfait !!!!!!!! ca fonctionne nikel maintenant !!

Grand merci !!

Comment marche le % (modulo ? ) j'ai regardé sur le net, mais je comprend pas.

Hello

J'ai pu beaucoup avancer sur mon projet.

Niveau code, j'ai tout comprit, sa deviens facile maintenant :slight_smile:

Petite question:

Le panneau de LED a plusieurs entrée:
Les 16 pins à brancher à l'arduino
Et un petit bornier GND et 5V

Lors de mes premier test, j'avais uniquement branché les 16 pins à l'arduino.
Sa fonctionnais bien.

Depuis peu, j'ai comme des artefact sur mon afficheur. (des pixel qui s'allume et mon texte qui clignote)

Je me suis dit que je devais le brancher au 5V.

Mais après avoir alimenté le panneau en 5v, et lorsque j'allume mon arduino, le panneau de LED allume toute les LED !!!
Et lorsque je débranche l'alimentation en 5V, l'afficheur affiche bien mon timer, mais toujours avec des artefact.

Des idée du problème ?
Merci de votre aide !!

Comment marche le % (modulo ? )

c'est tout simplement le reste de la division :
en français:
7:2 = 3 reste 1

en c:
7/2 = 3
7%2 = 1

Je me suis dit que je devais le brancher au 5V

indispensable pour éviter le fonctionnement erratique que tu as constaté

le 5v doit provenir d'une alimentation stabilisée indépendante, est-ce le cas ?

Ho merci !!!

Oui j'alimente bien le panneau avec du 5v

Tester avec le 5v du port usb de mon PC, et du 5v d'une batterie de secours.

Tester avec l'arduino brancher en usb pc et le panneau en usb batterie et inversement.
Aussi tester en alimentant arduino et panneau de led avec la même source de 5v, mais toujours le même probleme.

mystère ...
peux-tu nous faire une photo des branchements ?

Hello

J'ai refait le câblage, et changer d'arduino.

Maintenant le panneau de led marche nikel.
Sans 5V -> sa marche nikel
Avec 5V -> Sa marche nikel, mais luminosité encor plus fort !!!

Le câblage est asser sensible, si ya un faut contact sa déconne.

En tout cas, merci de votre aide !!!!!!!

Si jamais, le programme du chrono:

panneau_64x16_led_chrono.ino (28.6 KB)

Sans 5V -> sa marche nikel

Bonsoir,
à éviter car l'arduino n'aime pas

en tous cas bravo !