Note

Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.

  • Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.

  • Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.

👉 Prêt à explorer et à créer avec nous ? Cliquez [Ici] et rejoignez-nous aujourd’hui !

1.1.6 Module Matrice à LED

Introduction

Dans ce projet, vous allez découvrir le module de matrice à LED. Ce module utilise le driver MAX7219 pour piloter la matrice de LED 8 x 8.

Composants nécessaires

Dans ce projet, nous avons besoin des composants suivants.

../_images/list_dot.png

Il est certainement pratique d’acheter un kit complet, voici le lien :

Name

ITEMS IN THIS KIT

LINK

Raphael Kit

337

Raphael Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Module Matrice LED

ACHETER

Schéma de câblage

Nom T-Board

Physique

wiringPi

BCM

SPIMOSI

Pin 19

12

MOSI

SPICE0

pin 24

10

CE0

SPISCLK

Pin 23

14

SCLK

../_images/schematic_dot.png

Procédures expérimentales

Étape 1 : Construisez le circuit.

../_images/1.1.6fritzing.png

Étape 2: Activez le SPI avant de commencer l’expérience, référez-vous à Configuration SPI pour les détails.

Étape 3: Accédez au dossier du code.

cd ~/raphael-kit/c/1.1.6/

Étape 4: Compilez le code.

make

Étape 5: Exécutez le fichier exécutable.

sudo ./1.1.6_LedMatrix

Après l’exécution du code, la matrice de LED affiche les chiffres de 0 à 9 et les lettres de A à Z en séquence.

Note

Si cela ne fonctionne pas après l’exécution, ou s’il y a une erreur : "wiringPi.h: No such file or directory", veuillez vous référer à Installer et vérifier WiringPi.

Code

#include <wiringPi.h>
#include <wiringPiSPI.h>
#include <stdio.h>

#define SPI_CHANNEL    0           // Define SPI channel (0 or 1)
#define SPI_SPEED      1000000     // SPI speed set to 1 MHz

// Function to write data to a MAX7219 register
void max7219_write(unsigned char address, unsigned char data) {
    unsigned char buffer[2];
    buffer[0] = address;   // Register address to write to
    buffer[1] = data;      // Data to write into the register
    wiringPiSPIDataRW(SPI_CHANNEL, buffer, 2);  // Send data via SPI
}

// Function to initialize the MAX7219 display module
void max7219_init() {
    max7219_write(0x09, 0x00); // Decode Mode: No decoding for digits (useful for 7-segment displays)
    max7219_write(0x0A, 0x03); // Intensity: Set brightness level (0x00 to 0x0F)
    max7219_write(0x0B, 0x07); // Scan Limit: Display digits 0-7 (all 8 digits)
    max7219_write(0x0C, 0x01); // Shutdown Register: Normal operation (not in shutdown mode)
    max7219_write(0x0F, 0x00); // Display Test: Normal operation (no test mode)

    // Clear all digits on the display
    for (int i = 1; i <= 8; i++) {
        max7219_write(i, 0x00); // Write 0 to each digit register
    }
}

// Function to display a pattern on the MAX7219
void max7219_display(unsigned char *data) {
    for (int i = 1; i <= 8; i++) {
        max7219_write(i, data[i - 1]); // Write each row of the pattern to the display
    }
}

// Function to display a pattern for a specified duration
void display_pattern(const unsigned char pattern[8], int delay_ms) {
    max7219_display((unsigned char *)pattern); // Display the pattern
    delay(delay_ms);                           // Wait for the specified time in milliseconds
}

// Array of patterns to display
const unsigned char patterns[][8] = {
    // Square pattern
    {
        0b11111111, // Row 1
        0b10000001, // Row 2
        0b10000001, // Row 3
        0b10000001, // Row 4
        0b10000001, // Row 5
        0b10000001, // Row 6
        0b10000001, // Row 7
        0b11111111  // Row 8
    },
    // Heart pattern
    {
        0b01100110, // Row 1
        0b11111111, // Row 2
        0b11111111, // Row 3
        0b11111111, // Row 4
        0b01111110, // Row 5
        0b00111100, // Row 6
        0b00011000, // Row 7
        0b00000000  // Row 8
    },
    // Number 0
    {
        0b00111100, // Row 1
        0b01100110, // Row 2
        0b11000011, // Row 3
        0b11000011, // Row 4
        0b11000011, // Row 5
        0b11000011, // Row 6
        0b01100110, // Row 7
        0b00111100  // Row 8
    },
    // Number 1
    {
        0b00011000, // Row 1
        0b00111000, // Row 2
        0b01111000, // Row 3
        0b00011000, // Row 4
        0b00011000, // Row 5
        0b00011000, // Row 6
        0b01111110, // Row 7
        0b01111110  // Row 8
    },
    // Number 2
    {
        0b01111110, // Row 1
        0b11000011, // Row 2
        0b00000011, // Row 3
        0b00001110, // Row 4
        0b00110000, // Row 5
        0b11000000, // Row 6
        0b11111111, // Row 7
        0b00000000  // Row 8
    },
    // Number 3
    {
        0b01111110, // Row 1
        0b11000011, // Row 2
        0b00000011, // Row 3
        0b00111110, // Row 4
        0b00000011, // Row 5
        0b11000011, // Row 6
        0b01111110, // Row 7
        0b00000000  // Row 8
    },
    // Number 4
    {
        0b00001110, // Row 1
        0b00011110, // Row 2
        0b00110110, // Row 3
        0b01100110, // Row 4
        0b11111111, // Row 5
        0b00000110, // Row 6
        0b00000110, // Row 7
        0b00000000  // Row 8
    },
    // Number 5
    {
        0b11111111, // Row 1
        0b11000000, // Row 2
        0b11111110, // Row 3
        0b00000011, // Row 4
        0b00000011, // Row 5
        0b11000011, // Row 6
        0b01111110, // Row 7
        0b00000000  // Row 8
    },
    // Number 6
    {
        0b00111110, // Row 1
        0b01100000, // Row 2
        0b11000000, // Row 3
        0b11111110, // Row 4
        0b11000011, // Row 5
        0b11000011, // Row 6
        0b01111110, // Row 7
        0b00000000  // Row 8
    },
    // Number 7
    {
        0b11111111, // Row 1
        0b11000011, // Row 2
        0b00000110, // Row 3
        0b00001100, // Row 4
        0b00011000, // Row 5
        0b00110000, // Row 6
        0b00110000, // Row 7
        0b00000000  // Row 8
    },
    // Number 8
    {
        0b01111110, // Row 1
        0b11000011, // Row 2
        0b11000011, // Row 3
        0b01111110, // Row 4
        0b11000011, // Row 5
        0b11000011, // Row 6
        0b01111110, // Row 7
        0b00000000  // Row 8
    },
    // Number 9
    {
        0b01111110, // Row 1
        0b11000011, // Row 2
        0b11000011, // Row 3
        0b01111111, // Row 4
        0b00000011, // Row 5
        0b00000110, // Row 6
        0b01111100, // Row 7
        0b00000000  // Row 8
    },
};

int main() {
    if (wiringPiSetup() == -1) {
        printf("Failed to initialize WiringPi\n");
        return 1;
    }

    if (wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) {
        printf("Failed to initialize SPI\n");
        return 1;
    }

    max7219_init();  // Initialize the MAX7219 module

    // Display patterns in a loop
    while (1) {
        // Display the square pattern
        display_pattern(patterns[0], 1000);  // Display for 1000 milliseconds

        // Display the heart pattern
        display_pattern(patterns[1], 1000);

        // Display numbers 0-9
        for (int i = 2; i <= 11; i++) {
            display_pattern(patterns[i], 1000);
        }
    }

    return 0;
}

Explication du code

  1. Fichiers d’en-tête :

    • wiringPi.h : Fournit des fonctions pour le contrôle GPIO.

    • wiringPiSPI.h : Fournit des fonctions pour la communication SPI.

    • stdio.h : Bibliothèque d’entrée/sortie standard pour des fonctions comme printf.

  2. Définitions :

    • SPI_CHANNEL : Spécifie le canal SPI (0 ou 1) utilisé pour la communication.

    • SPI_SPEED : Définit la vitesse de communication SPI à 1 MHz.

    #define SPI_CHANNEL    0           // Définit le canal SPI (0 ou 1)
    #define SPI_SPEED      1000000     // Vitesse SPI définie à 1 MHz
    
  3. Fonction max7219_write : Envoie des données à un registre spécifique du pilote d’affichage MAX7219.

    • address : L’adresse du registre à écrire.

    • data : Les données à écrire dans le registre.

    • Crée un buffer contenant l’adresse et les données.

    • Utilise wiringPiSPIDataRW pour envoyer le buffer via SPI.

    void max7219_write(unsigned char address, unsigned char data) {
        unsigned char buffer[2];
        buffer[0] = address;   // Adresse du registre à écrire
        buffer[1] = data;      // Données à écrire dans le registre
        wiringPiSPIDataRW(SPI_CHANNEL, buffer, 2);  // Envoie les données via SPI
    }
    
  4. Fonction max7219_init : Initialise le module d’affichage MAX7219 avec les réglages nécessaires.

    • Définit le mode de décodage sur « sans décodage » car nous contrôlons directement les LED.

    • Définit l’intensité (luminosité) à un niveau modéré (0x03).

    • Définit la limite de balayage à 7 pour activer les 8 chiffres (lignes) de l’affichage.

    • Désactive le mode veille pour allumer l’affichage.

    • Désactive le mode de test de l’affichage.

    • Efface l’affichage en écrivant 0x00 dans tous les registres de chiffres.

    void max7219_init() {
        max7219_write(0x09, 0x00); // Mode de décodage : Pas de décodage pour les chiffres (utile pour les affichages à 7 segments)
        max7219_write(0x0A, 0x03); // Intensité : Définit le niveau de luminosité (0x00 à 0x0F)
        max7219_write(0x0B, 0x07); // Limite de balayage : Affiche les chiffres 0-7 (tous les 8 chiffres)
        max7219_write(0x0C, 0x01); // Registre d'arrêt : Fonctionnement normal (pas en mode veille)
        max7219_write(0x0F, 0x00); // Test d'affichage : Fonctionnement normal (pas en mode de test)
    
        // Efface tous les chiffres de l'affichage
        for (int i = 1; i <= 8; i++) {
            max7219_write(i, 0x00); // Écrit 0 dans chaque registre de chiffre
        }
    }
    
  5. Fonction max7219_display : Met à jour l’affichage avec un modèle de 8 octets donné.

    • data : Un tableau contenant le modèle à afficher.

    • Itère à travers chacune des 8 lignes (chiffres) et écrit les données correspondantes.

    void max7219_display(unsigned char *data) {
        for (int i = 1; i <= 8; i++) {
            max7219_write(i, data[i - 1]); // Écrit chaque ligne du modèle sur l'affichage
        }
    }
    
  6. Fonction display_pattern : Affiche un modèle pendant une durée spécifiée.

    • pattern : Le modèle à afficher (tableau de 8 octets).

    • delay_ms : Durée d’affichage du modèle en millisecondes.

    • Appelle max7219_display pour afficher le modèle.

    • Utilise delay pour attendre la durée spécifiée.

    void display_pattern(const unsigned char pattern[8], int delay_ms) {
        max7219_display((unsigned char *)pattern); // Affiche le modèle
        delay(delay_ms);                           // Attendre la durée spécifiée en millisecondes
    }
    
  7. Modèles de tableaux :

    • Contient des modèles prédéfinis pour le carré, le cœur et les chiffres 0-9.

    • Chaque modèle est un tableau de 8 octets, représentant 8 lignes de la matrice LED 8x8.

    • Chaque octet utilise la notation binaire où chaque bit représente une LED (1 pour allumé, 0 pour éteint).

    const unsigned char patterns[][8] = {
        // Modèle de carré
        {
            0b11111111, // Ligne 1
            0b10000001, // Ligne 2
            0b10000001, // Ligne 3
            0b10000001, // Ligne 4
            0b10000001, // Ligne 5
            0b10000001, // Ligne 6
            0b10000001, // Ligne 7
            0b11111111  // Ligne 8
        },
        ...
        // Chiffre 9
        {
            ...
        },
    };
    
  8. Fonction principale :

    • Initialise l’interface WiringPi et SPI.

      if (wiringPiSetup() == -1) {
          printf("Échec de l'initialisation de WiringPi\n");
          return 1;
      }
      
      if (wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1) {
          printf("Échec de l'initialisation de SPI\n");
          return 1;
      }
      
    • Appelle max7219_init pour configurer le module MAX7219.

      max7219_init();  // Initialise le module MAX7219
      
    • Entre dans une boucle infinie pour afficher les modèles en continu. Affiche chaque modèle pendant 1 seconde avant de passer au suivant.

      while (1) {
          // Affiche le modèle de carré
          display_pattern(patterns[0], 1000);  // Affiche pendant 1000 millisecondes
      
          // Affiche le modèle de cœur
          display_pattern(patterns[1], 1000);
      
          // Affiche les chiffres 0-9
          for (int i = 2; i <= 11; i++) {
              display_pattern(patterns[i], 1000);
          }
      }
      

Comprendre les Modèles

  • Représentation Binaire :

    • Chaque modèle est défini en utilisant des littéraux binaires (préfixe 0b).

    • Chaque octet correspond à une ligne de la matrice LED 8x8.

    • Chaque bit dans l’octet représente une colonne (LED) dans cette ligne.

    • Le bit le plus significatif (à gauche) correspond à la première LED à gauche.

  • Création de Modèles Personnalisés :

    • Vous pouvez créer de nouveaux modèles en définissant de nouveaux tableaux de 8 octets.

    • Chaque modèle peut être ajouté au tableau des modèles.

    • Mettez à jour la boucle d’affichage dans la fonction principale pour inclure vos nouveaux modèles.

Ajustements et Personnalisation

  • Changer la Luminosité : Modifiez le niveau d’intensité dans max7219_init :

    max7219_write(0x0A, brightness_level); // brightness_level entre 0x00 et 0x0F
    
  • Modifier le Temps d’Affichage : Changez le paramètre delay_ms dans les appels à display_pattern pour ajuster la durée d’affichage de chaque modèle.

Image du phénomène

../_images/1.1.6led_dot_matrix.JPG