.. note:: Bonjour et bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi & Arduino & ESP32 sur Facebook ! Plongez dans l'univers du Raspberry Pi, d'Arduino et de l'ESP32 avec d'autres passionnés. **Pourquoi nous rejoindre ?** - **Support d'experts** : Résolvez vos problèmes après-vente et surmontez vos défis techniques grâce à 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** : Obtenez un accès anticipé aux annonces de nouveaux produits et à des avant-premières. - **Réductions spéciales** : Profitez de remises exclusives sur nos derniers produits. - **Promotions festives et cadeaux** : Participez à des concours et à des promotions pendant les fêtes. 👉 Prêt à explorer et à créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! Afficheur 7 segments à 4 chiffres ==================================== Introduction -------------- Dans ce projet, nous allons apprendre à contrôler un afficheur 7 segments à 4 chiffres. Composants ------------- .. image:: img/list_4_digit.png .. note:: Dans ce projet, nous utilisons un modèle BS pour l'afficheur 7 segments à 4 chiffres. Si vous utilisez un modèle AS, il se peut qu'il ne s'allume pas. Schéma de câblage ------------------- .. image:: img/schmatic_4_digit.png Procédures expérimentales --------------------------- **Étape 1 :** Construire le circuit. .. image:: img/image80.png **Étape 2 :** Accéder au dossier du code. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/nodejs/ **Étape 3 :** Exécuter le code. .. raw:: html .. code-block:: sudo node 4_digit_7_segment_display.js Après l'exécution du code, le programme commence à compter, en augmentant de 1 chaque seconde, et l'afficheur 7 segments à 4 chiffres affiche le nombre correspondant. **Code** .. code-block:: js const Gpio = require('pigpio').Gpio; var counter = 0; const number = [0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90]; //for BS const SDI = new Gpio(24, { mode: Gpio.OUTPUT }); const RCLK = new Gpio(23, { mode: Gpio.OUTPUT }); const SRCLK = new Gpio(18, { mode: Gpio.OUTPUT }); const pin1 = new Gpio(10, { mode: Gpio.OUTPUT }); const pin2 = new Gpio(22, { mode: Gpio.OUTPUT }); const pin3 = new Gpio(27, { mode: Gpio.OUTPUT }); const pin4 = new Gpio(17, { mode: Gpio.OUTPUT }); const placePin = [pin1, pin2, pin3, pin4]; function clearDisplay() { hc595_shift(0xff); //for BS } function hc595_shift(dat) { for (let j = 0; j < 8; j++) { let code = 0x80 & (dat << j); if (code != 0) { code = 1; } SDI.digitalWrite(code); SRCLK.trigger(1,1); } RCLK.trigger(1,1); } function pickDigit(digit) { for(let i=0;i<4;i++){ placePin[i].digitalWrite(0); } placePin[digit].digitalWrite(1); } let digit = -1 setInterval(() => { digit = (digit +1)% 4 clearDisplay(); pickDigit(digit); switch(digit){ case 0: hc595_shift(number[Math.floor(counter % 10)]); break; case 1: hc595_shift(number[Math.floor(counter % 100 / 10)]); break; case 2: hc595_shift(number[Math.floor(counter % 1000 / 100)]); break; case 3: hc595_shift(number[Math.floor(counter % 10000 / 1000)]); break; } }, 5); setInterval(() => { counter++; }, 1000); **Explication du code** .. code-block:: js const pin1 = new Gpio(10, {mode: Gpio.OUTPUT}); const pin2 = new Gpio(25, {mode: Gpio.OUTPUT}); const pin3 = new Gpio(27, {mode: Gpio.OUTPUT}); const pin4 = new Gpio(17, {mode: Gpio.OUTPUT}); const placePin = [pin1,pin2,pin3,pin4]; Initialiser les broches 10, 25, 27 et 17 en mode sortie et les placer dans le tableau ``placePin`` pour faciliter le contrôle de l'anode commune de l'afficheur 7 segments à 4 chiffres. .. code-block:: js const number = [0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90]; Définir un tableau constant ``number`` pour représenter les codes hexadécimaux des segments de 0 à 9 (anode commune). .. code-block:: js function clearDisplay() { hc595_shift(0xff); } Écrire 0xff pour éteindre l'afficheur. .. code-block:: js function pickDigit(digit) { for(let i=0;i<4;i++){ placePin[i].digitalWrite(0); } placePin[digit].digitalWrite(1); } Sélectionner le chiffre à afficher. Une seule position doit être activée à la fois. La position activée sera définie à l’état haut. .. code-block:: js let digit = -1 setInterval(() => { digit = (digit +1)% 4 clearDisplay(); pickDigit(digit); switch(digit){ case 0: hc595_shift(number[Math.floor(counter % 10)]); break; case 1: hc595_shift(number[Math.floor(counter % 100 / 10)]); break; case 2: hc595_shift(number[Math.floor(counter % 1000 / 100)]); break; case 3: hc595_shift(number[Math.floor(counter % 10000 / 1000)]); break; } }, 5); Ce code est utilisé pour définir le chiffre affiché sur l'afficheur 7 segments à 4 chiffres. Tout d’abord, on active le quatrième segment, puis on y écrit le chiffre des unités. Ensuite, on active le troisième segment et on y écrit le chiffre des dizaines. Puis on active le second et le premier segment respectivement pour y afficher les centaines et les milliers. Comme la vitesse de rafraîchissement est très rapide, on perçoit un affichage complet de quatre chiffres. .. code-block:: js setInterval(() => { counter++; }, 1000); Ajouter une unité au ``counter`` chaque seconde qui passe (ce qui correspond à l’affichage incrémenté d’une unité chaque seconde). Image du résultat --------------------- .. image:: img/image81.jpeg