Note

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

Pourquoi nous rejoindre ?

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

  • Apprendre & 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 bénéficiez d’aperçus privilégiés.

  • Réductions spéciales : Profitez de remises exclusives sur nos nouveaux produits.

  • Promotions festives et cadeaux : Participez à des promotions spéciales et à des tirages au sort.

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

Show Number

Dans cette leçon, nous utilisons Processing pour contrôler un afficheur 7 segments afin d’afficher un chiffre de 0 à 9 ainsi que les lettres de A à F.

Câblage

../_images/image1251.png

Code

import processing.io.*;

int SDI = 17;   // Entrée de données série
int RCLK = 18;  // Entrée de l'horloge de mémoire (STCP)
int SRCLK = 27; // Entrée de l'horloge du registre de décalage (SHCP)

    int[] SegCode= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

    void hc595_shift(int dat){
    int i;

      for(i=0;i<8;i++){
            int n=(0x80 & (dat << i));
            if ( n==0){
            GPIO.digitalWrite(SDI, 0);
        } else {
            GPIO.digitalWrite(SDI, 1);
        }
        GPIO.digitalWrite(SRCLK, 1);
        delay(1);
        GPIO.digitalWrite(SRCLK, 0);
    }

    GPIO.digitalWrite(RCLK, 1);
    delay(1);
    GPIO.digitalWrite(RCLK, 0);
}

void setup() {
    size(400, 200);
    frameRate(10);

    GPIO.pinMode(SDI, GPIO.OUTPUT);
    GPIO.pinMode(RCLK, GPIO.OUTPUT);
    GPIO.pinMode(SRCLK, GPIO.OUTPUT);

    GPIO.digitalWrite(SDI, 0);
    GPIO.digitalWrite(RCLK, 0);
    GPIO.digitalWrite(SRCLK, 0);

            fill(0,25,88);
            textAlign(CENTER,CENTER);
            textSize(height*0.8);
}

void draw() {

    background(255);
            int number = (frameCount%100)/10;
            text(number, width/2, height/2);
    hc595_shift(SegCode[number]);
}

Comment ça fonctionne ?

Importez processing.io.* et utilisez la bibliothèque de fonctions GPIO pour contrôler les broches de l’afficheur numérique.

Définissez le tableau SegCode = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}, qui représente les codes des segments de 0 à F en Hexadécimal (cathode commune).

La fonction setup() configure les trois broches SDI, RCLK et SRCLK comme sorties, et initialise les données à 0.

La fonction hc595_shift(int dat) permet de transférer les valeurs du tableau SegCode vers le circuit intégré 74HC595.

void hc595_shift(int dat){
int i;

  for(i=0;i<8;i++){
        int n=(0x80 & (dat << i));
        if ( n==0){
        GPIO.digitalWrite(SDI, 0);
    } else {
        GPIO.digitalWrite(SDI, 1);
    }
    GPIO.digitalWrite(SRCLK, 1);
    delay(1);
    GPIO.digitalWrite(SRCLK, 0);
}

        GPIO.digitalWrite(RCLK, 1);
        delay(1);
        GPIO.digitalWrite(RCLK, 0);
}

n = (0x80 & (dat << i)) signifie que dat est décalé de i bits vers la gauche, puis l’opération & est effectuée avec 0x80.

La règle de l’opérateur & est que le résultat est 1 lorsque les deux bits comparés valent 1, sinon le résultat est 0.

Par exemple, supposons dat = 0x3f et i = 2 (0011 1111 << 2 devient 1111 1100), alors 1111 1100 & 1000 0000 (0x80) = 1000 0000.

Enfin, la valeur de dat est affectée bit par bit à SDI (DS).

digitalWrite(SRCLK, 1) : lorsque SRCLK génère une impulsion montante (passage de 0 à 1), les données sont transférées du registre DS au registre de décalage ;

digitalWrite(RCLK, 1) : lorsque RCLK génère une impulsion montante (passage de 0 à 1), les données sont transférées du registre de décalage au registre de stockage.

fill(0,25,88);
textAlign(CENTER,CENTER);
textSize(height*0.8);
  • fill() : Définit la couleur utilisée pour remplir les formes.

  • textAlign(CENTER, CENTER) : Définit l’alignement du texte. Les paramètres LEFT, CENTER et RIGHT déterminent l’affichage du texte par rapport aux valeurs x et y passées en paramètres de la fonction text().

  • textSize() : Définit la taille actuelle de la police. Cette taille sera appliquée à tous les appels ultérieurs de la fonction text(). La taille de la police est mesurée en pixels.

Ces fonctions permettent de personnaliser le style du texte affiché dans Processing.

void draw() {

        background(255);
        int number = (frameCount%100)/10;
        text(number, width/2, height/2);
        hc595_shift(SegCode[number]);
}

La variable frameCount agit comme une base de temps, et est liée à frameRate. Par défaut, frameRate est de 60, ce qui signifie que frameCount s’incrémente 60 fois par seconde.

Ainsi, nous pouvons utiliser Processing et l’afficheur 7 segments pour afficher simultanément les chiffres de 0 à 9 et les lettres de A à F.

Pour plus d’informations, consultez la Processing Reference.