.. 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.