[Résolu] afficheur max7219

un serveur en français :smiley:

bon voila j'ai une afficheur max_7219 et je veux faire quelque chose qui fait sa

Write_Max7219 (1, B00011000);

delay(X)

Write_Max7219 (1, B00111100);
Write_Max7219 (2, B00011000);

delay(X)

Write_Max7219 (1, B01111110);
Write_Max7219 (2, B00111100);
Write_Max7219 (3, B00011000);
delay(X)

Write_Max7219 (1, B11111111);
Write_Max7219 (2, B01111110);
Write_Max7219 (3, B00111100);
Write_Max7219 (4, B00011000);
delay(X)

Write_Max7219 (2, B11111111);
Write_Max7219 (3, B01111110);
Write_Max7219 (4, B00111100);
Write_Max7219 (5, B00011000);
delay(X)

en partent de (1, B00011000)
faire une copie du 1 pour la ligne du 2 eme et ajouter 1 a droite et gauche de la ligne 1 sa en boucle avec une commande for

(je n'utilise pas de bibliothèque et oui sa marche tous le reste marche)

je ne comprends pas trop la logique des indices (pour le dernier c'est bien de 2 à 5, pas de 1 à 5 ??) mais une double boucle for imbriquée dont la seconde dépend de l'indice de la première avec un tableau pour les valeurs

en plus visuel sur l'afficheur sa dois faire sa

...XX...
........
........
........
........
........
........
........

delay

..XXXX..
...XX...
........
........
........
........
........
........

delay

.XXXXXX.
..XXXX..
...XX...
........
........
........
........
........


delay

XXXXXXXX
.XXXXXX.
..XXXX..
...XX...
........
........
........
........

delay

XXXXXXXX
XXXXXXXX
.XXXXXX.
..XXXX..
...XX...
........
........
........


delay

XXXXXXXX
XXXXXXXX
XXXXXXXX
.XXXXXX.
..XXXX..
...XX...
........
........

ect ect

x=1 et .=0

J-M-L:
je ne comprends pas trop la logique des indices (pour le dernier c'est bien de 2 à 5, pas de 1 à 5 ??) mais une double boucle for imbriquée dont la seconde dépend de l'indice de la première avec un tableau pour les valeurs

oui jai pas tous mi juste la partie qui change sur l'écrand

OK - donc un truc du genre

const byte lesOctets[] = {
  0b00011000,
  0b00111100,
  0b01111110,
  0b11111111,
  0b11111111
};

const byte total = sizeof(lesOctets) / sizeof(lesOctets[0]);

void imprimeOctet(byte unOctet)
{
  for (char i = 7; i>=0; i--) 
  Serial.write(bitRead(unOctet, i) == 0 ? '-' : 'X');
}

void setup() {
  Serial.begin(115200);
  for (uint8_t i = 0; i < total; i++) {
    for (uint8_t j = 0; j <= i; j++) {
      Serial.print(j + 1);
      Serial.write('\t');
      imprimeOctet(lesOctets[i-j]);
      Serial.println();
    }
    Serial.println(F("delay(X)\n"));
  }
}

void loop() {}

vous devriez voir ça dans la console série (à 115200 bauds)

[color=purple]1	---XX---
delay(X)

1	--XXXX--
2	---XX---
delay(X)

1	-XXXXXX-
2	--XXXX--
3	---XX---
delay(X)

1	XXXXXXXX
2	-XXXXXX-
3	--XXXX--
4	---XX---
delay(X)

1	XXXXXXXX
2	XXXXXXXX
3	-XXXXXX-
4	--XXXX--
5	---XX---
delay(X)

[/color]

c'est exactement sa merci beaucoup ^^

enfin je revien comment on le modifie pour que sa l'écris sur afficheur 8*8 ^^'

Pour ces matrices de leds, il existe une bibliothèque assez puissante : MD_MAX72xx. Installe la et commence à tester les exemples de code.

Ensuite, tu peux utiliser la méthode setPoint :

  /**
   * Set the status of a single LED, addressed as a pixel.
   *
   * The method will set the value of a specific LED element based on its
   * coordinate position. The LED will be turned on or off depending on the
   * value supplied. The column number is dereferenced into the device and
   * column within the device, allowing the LEDs to be treated as a
   * continuous pixel field.
   *
   * \param r     row coordinate for the point [0..ROW_SIZE-1].
   * \param c     column coordinate for the point [0..getColumnCount()-1].
   * \param state true - switch on; false - switch off.
   * \return false if parameter errors, true otherwise.
   */
  bool setPoint(uint8_t r, uint16_t c, bool state);

qui est utilisée dans l'exemple Pacman

ludocraft:
enfin je reviens comment on le modifie pour que ça l'écrive sur afficheur 8*8 ^^'

ben au lieu de faire des print des tirets et des croix vous appelez votre fonction

Write_Max7219 ([color=blue]xxx[/color], [color=red]yyyy[/color]);

xxx c'est le numéro que j'imprime en début de ligne
yyyy c'est l'octet qui est utilisé pour imprimer les tirets et croix

Pas sûr que la fonction Write_Max7219 existe, mais il y en a une ici qui fait le boulot

void Write_Max7219_byte(unsigned char DATA)
{  
          unsigned char i;
     digitalWrite(Max7219_pinCS,LOW);      
     for(i=8;i>=1;i--)
        {        
           digitalWrite(Max7219_pinCLK,LOW);
           digitalWrite(Max7219_pinDIN,DATA&0x80);// Extracting a bit data
           DATA = DATA<<1;
           digitalWrite(Max7219_pinCLK,HIGH);
         }                                
}

void Write_Max7219(unsigned char address,unsigned char dat)
{
      digitalWrite(Max7219_pinCS,LOW);
      Write_Max7219_byte(address);           //address,code of LED
      Write_Max7219_byte(dat);               //data,figure on LED
      digitalWrite(Max7219_pinCS,HIGH);
}

lesept:
Pas sûr que la fonction Write_Max7219 existe, mais il y en a une ici qui fait le boulot

oui c'est celle qu'on voit partout dans les exemples, j'ai supposé que c'était celle là que @ludocraft utilisait

Je ne la connaissais pas, c'est la première fois que je la vois. Quand j'utilise ces matrices de LEDs j'utilise la bibli que j'ai indiquée plus haut.

oui c’est plus simple :slight_smile:

mon code c’est sa (j’ai enlever ce qui est dans le void par ce que voila tros de logne XD

//configuration pin
#define Max7219_pinCLK	10
#define Max7219_pinCS	11
#define Max7219_pinDIN 	12


 
//variable
unsigned char choix  =4;
unsigned char select =0;
char f =0;
char m =1;

//fonction
void Init_MAX7219();
void Write_Max7219(unsigned char address, unsigned char dat);
void Write_Max7219_byte(unsigned char DATA);

void setup() {

	pinMode(Max7219_pinCLK, OUTPUT);	
	pinMode(Max7219_pinCS, OUTPUT);
	pinMode(Max7219_pinDIN, OUTPUT);

  delay(60);
  
	Init_MAX7219();

  delay(50);

}



void loop() {
   

}



void Init_MAX7219(void)
{

  Write_Max7219(0x09, 0x00);       //decoding :BCD
  Write_Max7219(0x0a, 0x03);       //brightness
  Write_Max7219(0x0b, 0x07);       //scanlimit;8 LEDs
  Write_Max7219(0x0c, 0x01);       //power-down mode:0,normal mode:1
  Write_Max7219(0x0f, 0x00);       //test display:1;EOT,display:0
}

//Ecriture sur une rangee
void Write_Max7219(unsigned char address, unsigned char dat)
{

  digitalWrite(Max7219_pinCS, LOW);
  Write_Max7219_byte(address);           //address,code of LED
  Write_Max7219_byte(dat);               //data,figure on LED
  digitalWrite(Max7219_pinCS, HIGH);
}

// Ecriture sur un 8x8
void Write_Max7219_byte(unsigned char DATA)
{

  unsigned char i;
  digitalWrite(Max7219_pinCS, LOW);
  for (i = 8; i >= 1; i--)
  {

    digitalWrite(Max7219_pinCLK, LOW);
    digitalWrite(Max7219_pinDIN, DATA & 0x80); // Extracting a bit data
    DATA = DATA << 1;
    digitalWrite(Max7219_pinCLK, HIGH);
  }
}