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
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ètresLEFT,CENTERetRIGHTdéterminent l’affichage du texte par rapport aux valeurs x et y passées en paramètres de la fonctiontext().textSize(): Définit la taille actuelle de la police. Cette taille sera appliquée à tous les appels ultérieurs de la fonctiontext(). 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.