Note

Bonjour et bienvenue dans la communauté des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder sur Facebook ! Plongez dans l’univers du Raspberry Pi, d’Arduino et de l’ESP32 avec d’autres passionnés.

Pourquoi nous rejoindre ?

  • Assistance d’experts : Résolvez vos problèmes après achat et vos défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour perfectionner 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 derniers produits.

  • Promotions festives et concours : Participez à des concours et promotions pendant les fêtes.

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

2.7 Affichage 4-Digits à 7 Segments

Aperçu

Dans cette leçon, vous apprendrez à utiliser un affichage à 4 digits de 7 segments. Il se compose de quatre afficheurs de 7 segments fonctionnant ensemble pour afficher des nombres à 4 chiffres.

Composants requis

../_images/list_2.7.png

Schéma de connexion

../_images/image438.png

Schéma électronique

../_images/image439.png

Code

Note

  • Vous pouvez ouvrir directement le fichier 2.7_4digitalSegment.ino situé dans le chemin sunfounder_vincent_kit_for_arduino\code\2.7_4digitalSegment.

Analyse du Code

Essentiellement, ce code utilise le multiplexage pour afficher un nombre à 4 chiffres sur un afficheur 7 segments. En basculant rapidement entre les chiffres et en affichant un chiffre à la fois, il donne l’illusion que tous les chiffres sont affichés en continu. La fonction chronomètre est réalisée grâce à la fonction millis() intégrée, qui suit le temps et incrémente le nombre affiché toutes les secondes.

  1. Définitions des Variables et des Constantes :

    int segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
    int digitPins[] = {13, 12, 11, 10};
    
    long n = 0; // Variable pour stocker le nombre actuel du chronomètre
    int del = 5; // Temps de délai (en ms) pour maintenir chaque chiffre allumé
    unsigned long previousMillis = 0; // Temps du dernier incrément
    const long interval = 1000; // Intervalle d'une seconde (en ms)
    
    • Les tableaux segmentPins et digitPins définissent les broches connectées aux segments et aux chiffres de l’afficheur, respectivement.

    • n est une variable longue qui garde la trace du nombre actuel du chronomètre.

    • del est le délai pour afficher le chiffre actuel avant de passer au suivant.

    • previousMillis et interval sont liés à la temporisation pour décider quand incrémenter le chronomètre.

  2. Modèles des Chiffres pour Affichage à 7 Segments :

    Le tableau 2D numbers définit comment chaque chiffre de 0 à 9 est représenté sur un afficheur 7 segments. Chaque sous-tableau a 8 valeurs (HIGH ou LOW), correspondant aux 7 segments et au point décimal. Ce modèle permet d’allumer les segments appropriés pour chaque chiffre.

    byte numbers[10][8] = {
        {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, LOW},  // 0
        {LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW},      // 1
        {HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH, LOW},   // 2
        {HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH, LOW},   // 3
        {LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, LOW},    // 4
        {HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH, LOW},   // 5
        {HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, LOW},  // 6
        {HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW},     // 7
        {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW}, // 8
        {HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH, LOW}   // 9
    };
    
  3. Fonction d’Initialisation (Setup) :

    void setup() {
        // Configure toutes les broches de segments et de chiffres en mode OUTPUT
        for (int i = 0; i < 8; i++) {
            pinMode(segmentPins[i], OUTPUT);
        }
        for (int i = 0; i < 4; i++) {
            pinMode(digitPins[i], OUTPUT);
            digitalWrite(digitPins[i], HIGH); // Éteindre tous les chiffres initialement (HIGH signifie OFF pour les afficheurs à cathode commune)
        }
    }
    
    • Toutes les broches de segments et de chiffres sont configurées en mode OUTPUT car elles contrôlent les segments et les chiffres de l’afficheur.

    • Initialement, tous les chiffres sont éteints en écrivant HIGH pour un afficheur à cathode commune.

  4. Boucle Principale (Loop) :

    void loop() {
        // Vérifie si une seconde est passée depuis le dernier incrément
        if (millis() - previousMillis >= interval) {
            previousMillis += interval; // Mettre à jour le dernier temps d'incrément
            n = (n + 1) % 10000; // Incrémenter le chronomètre et revenir à 0 après 9999
        }
    
        displayNumber(n); // Affiche le nombre actuel du chronomètre
    }
    
    • Cette section vérifie si l’intervalle (défini à 1000 ms ou 1 seconde) est écoulé depuis le dernier incrément. Si oui, elle incrémente le nombre.

    • Le nombre est ensuite affiché sur le 7 segments en utilisant la fonction displayNumber().

  5. Fonction displayNumber() :

    // Fonction pour afficher un nombre à 4 chiffres sur le 7 segments
    void displayNumber(long num) {
        for (int digit = 0; digit < 4; digit++) {
            clearLEDs(); // Éteint tous les segments et chiffres
            pickDigit(digit); // Active le chiffre actuel
            int value = (num / (int)pow(10, 3 - digit)) % 10; // Extrait le chiffre spécifique
            pickNumber(value); // Allume les segments pour afficher le chiffre
            delay(del); // Maintient le chiffre allumé un court instant
        }
    }
    
    • Cette fonction décompose le nombre à 4 chiffres en chiffres individuels et affiche chaque chiffre un à un rapidement, créant l’illusion que tous les chiffres sont affichés simultanément grâce à la persistance rétinienne.

    • Pour chaque chiffre, la fonction éteint d’abord tous les segments, sélectionne le chiffre approprié avec pickDigit(), et affiche le nombre sur ce chiffre avec pickNumber().

    • Le delay(del) garantit que chaque chiffre est visible brièvement avant de passer au suivant.

  6. Fonction pickDigit() :

    Cette fonction sélectionne (ou active) un des quatre chiffres de l’afficheur 7 segments en réglant la broche du chiffre correspondant à LOW.

    void pickDigit(int x) {
        digitalWrite(digitPins[x], LOW); // Allume le chiffre sélectionné (LOW signifie ON pour les afficheurs à cathode commune)
    }
    
  7. Fonction pickNumber() :

    Cette fonction, donnée un seul chiffre (0-9), active les segments de l’afficheur pour afficher ce chiffre. Elle utilise le tableau numbers pour savoir quels segments allumer/éteindre.

    void pickNumber(int x) {
        for (int i = 0; i < 8; i++) {
            digitalWrite(segmentPins[i], numbers[x][i]); // Définit chaque segment selon le modèle pour le chiffre donné
        }
    }
    
  8. Fonction clearLEDs() :

    Comme son nom l’indique, cette fonction éteint tous les segments et chiffres. Elle est utilisée pour s’assurer qu’un seul chiffre est actif à la fois pendant le multiplexage dans displayNumber().

    void clearLEDs() {
        for (int i = 0; i < 8; i++) {
            digitalWrite(segmentPins[i], LOW); // Éteint tous les segments
        }
        for (int i = 0; i < 4; i++) {
            digitalWrite(digitPins[i], HIGH); // Éteint tous les chiffres
        }
    }
    

Illustration du Phénomène

../_images/image104.jpeg