problème incrémentation afficheur led 8*8

Bonjour,
je suis étudiant et je viens à la recherche d’un peu d’aide.

Je réalise actuellement un bout de programme me permettant d’incrémenter mon afficheur led du chiffre 0 à 9.

J’ai créé un switch case avec case 0, case 1, case 2, case 3, case 4…
Me permettant d’insérer les chiffres de 0 à 9 dans chacun des case.

Par la suite j’ai ajouté les void me permettant de mettre en bon fonctionnement le composant Max7219.

Ainsi j’ai créé ensuite ma boucle me permettant d’incrémenter de case en case les chiffre par chaque appui sur le bouton poussoir.

Merci d’avance! :slight_smile:

Melvin

#define button A0

int Max7219_pinCLK = 10;  // Clk sur broche numéro 10
int Max7219_pinCS = 9; // CS sur la broche numéro 9
int Max7219_pinDIN = 8; // DIN sur la broche numéro 8


void setup()
{
  pinMode(button, INPUT);
  pinMode(Max7219_pinCLK,OUTPUT);
  pinMode(Max7219_pinCS,OUTPUT);
  pinMode(Max7219_pinDIN,OUTPUT);
  delay(50);  // 50 milli secondes pour l'initailisation.
  Init_MAX7219();
}





void Affichage_matricielle(int nb_personne)
{
  switch (nb_personne) {

    
     case 0:                              // affiche la valeur 0
            Write_Max7219(1,B00111100);
            Write_Max7219(2,B01000010);
            Write_Max7219(3,B01000010);
            Write_Max7219(4,B01000010);
            Write_Max7219(5,B01000010);
            Write_Max7219(6,B01000010);
            Write_Max7219(7,B01000010);
            Write_Max7219(8,B00111100);
            
        break;

      
     case 1:                              // affiche la valeur 1
            Write_Max7219(1,B00001000);
            Write_Max7219(2,B00011000);
            Write_Max7219(3,B00101000);
            Write_Max7219(4,B01001000);
            Write_Max7219(5,B00001000);
            Write_Max7219(6,B00001000);
            Write_Max7219(7,B00001000);
            Write_Max7219(8,B00001000);
            
        break;

      
     case 2:                              // affiche la valeur 2    
            Write_Max7219(1,B01111110);
            Write_Max7219(2,B00000010);
            Write_Max7219(3,B00000010);
            Write_Max7219(4,B01111110);
            Write_Max7219(5,B01000000);
            Write_Max7219(6,B01000000);
            Write_Max7219(7,B01000000);
            Write_Max7219(8,B01111110);
           
      break;

      
     case 3:                              // affiche la valeur 3
            Write_Max7219(1,B01111110);
            Write_Max7219(2,B00000010);
            Write_Max7219(3,B00000010);
            Write_Max7219(4,B01111110);
            Write_Max7219(5,B00000010);
            Write_Max7219(6,B00000010);
            Write_Max7219(7,B00000010);
            Write_Max7219(8,B01111110);
            
      break;

      
     case 4:                              // affiche la valeur 4       
            Write_Max7219(1,B00001000);
            Write_Max7219(2,B00011000);
            Write_Max7219(3,B00101000);
            Write_Max7219(4,B01001000);
            Write_Max7219(5,B11111110);
            Write_Max7219(6,B00001000);
            Write_Max7219(7,B00001000);
            Write_Max7219(8,B00001000);
            
      break;

      
     case 5:                              // affiche la valeur 5
            Write_Max7219(1,B01111110);
            Write_Max7219(2,B01000000);
            Write_Max7219(3,B01000000);
            Write_Max7219(4,B01111110);
            Write_Max7219(5,B00000010);
            Write_Max7219(6,B00000010);
            Write_Max7219(7,B00000010);
            Write_Max7219(8,B01111110);
            
      break;

      
     case 6:                              // affiche la valeur 6
            Write_Max7219(1,B01111110);
            Write_Max7219(2,B01000000);
            Write_Max7219(3,B01000000);
            Write_Max7219(4,B01111110);
            Write_Max7219(5,B01000010);
            Write_Max7219(6,B01000010);
            Write_Max7219(7,B01000010);
            Write_Max7219(8,B01111110);
            
      break;


     case 7:                              // affiche la valeur 7
            Write_Max7219(1,B01111110);
            Write_Max7219(2,B01000010);
            Write_Max7219(3,B00000100);
            Write_Max7219(4,B00001000);
            Write_Max7219(5,B00001000);
            Write_Max7219(6,B00001000);
            Write_Max7219(7,B00001000);
            Write_Max7219(8,B00001000);
            
      break;


     case 8:                              // affiche la valeur 8
            Write_Max7219(1,B01111110);
            Write_Max7219(2,B01000010);
            Write_Max7219(3,B01000010);
            Write_Max7219(4,B01111110);
            Write_Max7219(5,B01000010);
            Write_Max7219(6,B01000010);
            Write_Max7219(7,B01000010);
            Write_Max7219(8,B01111110);
      break;


     case 9:                              // affiche la valeur 9
            Write_Max7219(1,B01111110);
            Write_Max7219(2,B01000010);
            Write_Max7219(3,B01000010);
            Write_Max7219(4,B01111110);
            Write_Max7219(5,B00000010);
            Write_Max7219(6,B00000010);
            Write_Max7219(7,B00000010);
            Write_Max7219(8,B01111110);
      break;




      
    }
}

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);
}

//Initialisation du module Max 7219 
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
}
 


    void loop(){

      int nb_personne;
      
      if (digitalRead(button) == HIGH)
          {
            nb_personne++;

        Affichage_matricielle(nb_personne);
          }
      
      
      }

bonjour
et donc la question est? ? ? ?
pourquoi toujours zéro vu ton code, non?

pas à la bonne place, mettre en début de programme

      int nb_personne;

ca revient a faire un

      int nb_personne = 0;

et après la deuxième question va être comment faire quand on arrive à 10 :slight_smile:

Pourquoi ne pas utiliser un affichage 7 segments qui est fait pour ça?

La même chose que toi:

#include "../module/GpioRead.h"
#include "../module/Max7219.h"

int main()
{
 GpioRead button = GpioRead (1, true, 20);
 Max7219 display = Max7219 (2, 1);
 unsigned char countPerson = 0;
 
 while (true)
 {
 button.read();
 
 if (button.momentary == true)
 {
 countPerson++;
 }
 
 display.integer (countPerson, 1, 8, true);
 }
 
 return 0;
}

Voir ici: http://sylvainmahe.xyz/projectDigit.html

Pourquoi ne pas utiliser un affichage 7 segments qui est fait pour ça?

et s'il n'a qu"un 8x8 pour ton projet :slight_smile:

Je veux bien faire un don d'un pcb afficheur 7 segments pour le prix d'une enveloppe dans ce cas :wink:

Possible en matrice aussi: http://sylvainmahe.xyz/projectMatrix.html

Je voudrais bien traduire en langage Arduino, mais Arduino n'est pas un langage, c'est une bibliothèque qui contient une suite de classes et de fonctions (et de structures, de define, de macro, ...), dont l'utilisation est décrite dans le manuel référence ici: Arduino Reference - Arduino Reference

Cela dit en passant, suite de classes en surcouche de la bibliothèque avr, et en surcouche de bibliothèques communément admises en programmation c/c++, c'est pour dire la fainéantise du truc (Quand on sait qu'un simple particulier sans diplômes peut programmer pour l'atmega328p en pur c/c++ sans rien utiliser de tout cela, ...).

Mais cela n’empêche rien au fait qu'avec Arduino sans autre classe ou bibliothèque additionnelle, on ne fait pas grand chose, il faut donc coder énormément de choses soit même (par exemple coder le principe de spi pour s'en servir dans une classe qui fera fonctionner le max7219/21), ou bien utiliser des classes toutes faites proposées depuis un moment par défaut mais dont la simple vue du code donne envie de tout refaire de a à z, comme la vue du code d'Arduino d’ailleurs, et de ses performances.

Le mieux je pense c'est de faire comme moi c'est à dire de partir de fichiers vides, d'ouvrir le datasheet de l'atmega328p, et de programmer, tout simplement.

Le mieux je pense c'est de faire comme moi c'est à dire de partir de fichiers vides, d'ouvrir le datasheet de l'atmega328p, et de programmer, tout simplement.

malgré le "boulot" que tu as fait, tu n'as pas inventé l'eau froide sans être méchant.
tu as recréé des classes qui existent déjà de base dans l'ide en c/c++ en pompant celles existantes et supprimant ce qui ne t'intéresse pas.

comme le dit pepe, arrêtes de faire de la pub pour ton site, ca devient lourd et n'apporte rien à l'aide du forum.

pour les TPE, tu dois le savoir, il y a des fournisseurs officiels reconnus par l'éducation nationnale avec des prix/contrats et le matériel est plus ou moins imposé, donc inutile de proposer de faire un don, car celui qui devra utiliser le matériel devra aussi soutenir son choix et si une communauté ne peut aider, dans ce cas, le travail de l'examiné sera anéanti car il ne pourra apporter une explication et encore plus si ca ne fonctionne pas.

ou alors, monte ta boite, créé un environnement spécifique avec tes classes et tes cartes.

infobarquee:
en pompant celles existantes et supprimant ce qui ne t'intéresse pas

Complètement faux :slight_smile:

Étant à la base nul en math, j'ai passé des semaines avec un prof de math pour qu'il m'explique les fondements de ce qu'il y a derrière les touches sin cos tan arcsin arccos arctan racine carré etc... d'une bête calculatrice afin que je puisse programmer par exemple ma classe Math.h.

J'ai passé 2 ans jours pour jours à programmer mon système donc si c'est pour pomper des choses (la logique couramment admise en programmation maintenant et surtout dans le monde Arduino), alors il n'y aurait aucun intérêt... Enfin moi personnellement j'en vois aucun.

Tu t'embêtes bien à écrire tout ça car je n'ai rien lu, aucun intérêt :slight_smile: Et surtout tellement d’affirmations fausses j'imagine bien.

Bonsoir,
+1 avec pepe

+1 avec vous deux.

+1 à vous 3, vive l'ile de france, et les ingénieurs à la retraite :smiley:

sylvainmahe:
+1 à vous 3, vive l'ile de france, et les ingénieurs à la retraite :smiley:

la puérilité est le reflet de tes interventions sur le forum dédié arduino
j'espère que les guichénois sont plus évolués et ont une autre mentalité que toi :slight_smile:
tout le monde n'est pas à la retraite ni ingénieur, mais au moins, nous avons fait nos preuves, nous.....

+1 infobarquee, je suis complètement d’accord avec toi !