.. note:: Bonjour et bienvenue dans la communauté SunFounder Raspberry Pi & Arduino & ESP32 sur Facebook ! Plongez plus profondément dans le monde de 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** : Obtenez un accès anticipé aux annonces de nouveaux produits et aux avant‑premières. - **Réductions spéciales** : Profitez de remises exclusives sur nos derniers produits. - **Promotions et concours festifs** : Participez à des concours et promotions de vacances. 👉 Prêt à explorer et créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez‑nous dès aujourd’hui ! .. _2.1.9_js_pi5_mcp3008: 2.1.9 Joystick (MCP3008) ========================== Introduction -------------- Dans ce projet, nous allons apprendre comment fonctionne un joystick. Nous manipulons le joystick et affichons les résultats à l’écran. Composants requis ------------------------------- Dans ce projet, nous avons besoin des composants suivants : .. image:: ../img/image317-copy.png Il est définitivement plus pratique d’acheter un kit complet, voici le lien : .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nom - ÉLÉMENTS 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_resistor` - |link_resistor_buy| * - :ref:`cpn_joystick` - \- * - :ref:`cpn_mcp3008` - \- Schéma ----------------- Lors de la lecture des données du joystick, il y a une différence entre les axes : les données des axes X et Y sont analogiques, il faut donc utiliser le MCP3008 pour convertir la valeur analogique en valeur numérique. Les données de l’axe Z sont numériques, vous pouvez donc lire directement avec le GPIO ou via l’ADC. .. image:: ../img/schematic_2.1.9_joystick_mcp3008_js.png Procédure expérimentale ----------------------- **Étape 1 :** Construire le circuit. .. image:: ../img/2.1.9_Joystick_js.png **Étape 2 :** Aller dans le dossier du code. .. raw:: html .. code-block:: cd ~/raphael-kit/nodejs/ **Étape 3 :** Exécuter le code. .. raw:: html .. code-block:: sudo node joystick-2.js Après exécution du code, bougez le joystick ; les valeurs correspondantes de X, Y et Btn sont alors affichées à l’écran. Code ---- .. code-block:: js const Gpio = require('pigpio').Gpio; const mcpadc = require('mcp-spi-adc'); // Ouvrir le canal 1 (axe X) const xChannel = mcpadc.openMcp3008(1, { speedHz: 1350000 }, (err) => { if (err) { console.error('Échec de l’ouverture du canal X :', err); process.exit(1); } }); // Ouvrir le canal 2 (axe Y) const yChannel = mcpadc.openMcp3008(2, { speedHz: 1350000 }, (err) => { if (err) { console.error('Échec de l’ouverture du canal Y :', err); process.exit(1); } }); // Entrée bouton sur GPIO22 avec pull-up const btn = new Gpio(22, { mode: Gpio.INPUT, pullUpDown: Gpio.PUD_UP, }); // Boucle de lecture setInterval(() => { xChannel.read((errX, xReading) => { if (errX) { console.error('Erreur de lecture du canal X :', errX); return; } yChannel.read((errY, yReading) => { if (errY) { console.error('Erreur de lecture du canal Y :', errY); return; } const x_val = Math.round(xReading.value * 1023); const y_val = Math.round(yReading.value * 1023); const btn_val = btn.digitalRead(); console.log(`x = ${x_val}, y = ${y_val}, btn = ${btn_val}\n`); }); }); }, 100); Explication du code ------------------- .. code-block:: js const mcpadc = require('mcp-spi-adc'); Cette ligne importe le module ``mcp-spi-adc``, qui permet la communication avec le MCP3008 ADC en utilisant l’interface SPI matérielle de la Raspberry Pi. .. code-block:: js const xChannel = mcpadc.openMcp3008(1, { speedHz: 1350000 }, ...); const yChannel = mcpadc.openMcp3008(2, { speedHz: 1350000 }, ...); Ces lignes ouvrent les canaux d’entrée analogiques 1 et 2 du MCP3008 pour lire respectivement les signaux des axes X et Y du joystick. La vitesse de communication SPI est définie à 1,35 MHz. .. code-block:: js const btn = new Gpio(22, { mode: Gpio.INPUT, pullUpDown: Gpio.PUD_UP, }); Initialise la broche GPIO 22 comme entrée numérique avec une résistance de tirage interne activée. Cette broche est utilisée pour lire l’état d’un bouton poussoir. .. code-block:: js setInterval(() => { xChannel.read(...); yChannel.read(...); }, 100); Cette fonction s’exécute toutes les 100 millisecondes. Elle lit les valeurs des axes X et Y du joystick via les canaux 1 et 2 du MCP3008 en utilisant SPI. Les valeurs flottantes (plage 0.0–1.0) sont converties en entiers 10 bits (0–1023). Elle lit également l’état du bouton via ``digitalRead()`` sur GPIO22, renvoyant 0 lorsqu’il est pressé et 1 lorsqu’il est relâché. Toutes les valeurs sont affichées dans la console.