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 [Ici] et rejoignez‑nous dès aujourd’hui !

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 :

../_images/image317-copy.png

Il est définitivement plus pratique d’acheter un kit complet, voici le lien :

Nom

ÉLÉMENTS DANS CE KIT

LIEN

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément via les liens ci‑dessous :

INTRODUCTION DU COMPOSANT

LIEN D’ACHAT

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Résistance

ACHETER

Module Joystick

-

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.

../_images/schematic_2.1.9_joystick_mcp3008_js.png

Procédure expérimentale

Étape 1 : Construire le circuit.

../_images/2.1.9_Joystick_js.png

Étape 2 : Aller dans le dossier du code.

cd ~/raphael-kit/nodejs/

Étape 3 : Exécuter le code.

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

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

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.

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.

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.

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.