.. 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 [|link_sf_facebook|] et rejoignez-nous aujourd'hui ! .. _2.1.6_js: 2.1.6 Module Encodeur Rotatif ================================ Introduction --------------- Dans ce projet, vous allez découvrir l'encodeur rotatif. Un encodeur rotatif est un interrupteur électronique produisant une série de pulses réguliers dans une séquence temporelle stricte. Lorsqu'il est utilisé avec un CI, il peut effectuer des opérations d'incrémentation, de décrémentation, de changement de page et d'autres opérations telles que le défilement de souris, la sélection de menu, etc. Composants Nécessaires ----------------------- Dans ce projet, nous avons besoin des composants suivants. .. image:: ../img/Part_two_25.png Il est certainement pratique d'acheter un kit complet, voici le lien : .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nom - ARTICLES DANS CE KIT - LIEN * - Kit Raphael - 337 - |link_Raphael_kit| Vous pouvez également les acheter séparément via les liens ci-dessous. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCTION DU COMPOSANT - LIEN D'ACHAT * - :ref:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_rotary_encoder` - |link_rotary_encoder_buy| Schéma de Câblage -------------------- .. image:: ../img/image349.png :align: center Procédures Expérimentales ----------------------------- **Étape 1 :** Construisez le circuit. .. image:: ../img/2.1.6_fritzing.png :align: center Dans cet exemple, nous pouvons connecter directement la broche de l'encodeur rotatif au Raspberry Pi en utilisant une breadboard et un câble à 40 broches, connecter le GND de l'encodeur rotatif à GND, « + » à 5V, SW à GPIO numérique 27, DT à GPIO numérique 18, et CLK à GPIO numérique 17. **Étape 2 :** Allez dans le dossier du code. .. raw:: html .. code-block:: cd ~/raphael-kit/nodejs/ **Étape 3 :** Exécutez le code. .. raw:: html .. code-block:: sudo node rotary_encoder_module.js Vous verrez le décompte dans le terminal. Lorsque vous tournez l'encodeur rotatif dans le sens horaire, le décompte augmente ; lorsque vous le tournez dans le sens antihoraire, le décompte diminue. Si vous appuyez sur l'interrupteur de l'encodeur rotatif, les lectures seront réinitialisées à zéro. **Code** .. code-block:: js const Gpio = require('pigpio').Gpio; const clkPin = new Gpio(17, { mode: Gpio.INPUT, pullUpDown: Gpio.PUD_DOWN, edge: Gpio.RISING_EDGE }); const dtPin = new Gpio(18, { mode: Gpio.INPUT, pullUpDown: Gpio.PUD_DOWN, }); const swPin = new Gpio(27, { mode: Gpio.INPUT, pullUpDown: Gpio.PUD_UP, edge: Gpio.FALLING_EDGE }); var globalCounter = 0; clkPin.on('interrupt',()=>{ if(dtPin.digitalRead()==1){ globalCounter--; } else{ globalCounter++; } console.log(`globalCounter = ${globalCounter}`); }); swPin.on('interrupt', () => { globalCounter = 0; console.log(`globalCounter = ${globalCounter}`); }); **Explication du Code** .. code-block:: js var globalCounter = 0; clkPin.on('interrupt',()=>{ if(dtPin.digitalRead()==1){ globalCounter--; } else{ globalCounter++; } console.log(`globalCounter = ${globalCounter}`); }); Lorsque dtPin passe de bas à haut, si clkPin est haut, le compteur diminue, sinon le compteur augmente. .. code-block:: js swPin.on('interrupt', () => { globalCounter = 0; console.log(`globalCounter = ${globalCounter}`); }); swPin émettra un signal bas lorsque l'axe est pressé. À ce moment, globalCounter est réinitialisé à zéro. Image du phénomène ---------------------- .. image:: ../img/2.1.6rotary_ecoder.JPG :align: center