.. note:: Bonjour et bienvenue dans la communauté SunFounder des passionnés de Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez plus profondément dans l'univers de Raspberry Pi, Arduino et ESP32 avec d'autres passionnés. **Pourquoi nous rejoindre ?** - **Support d'experts** : Résolvez vos problèmes après-vente et vos défis techniques grâce à 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** : Bénéficiez d'un accès anticipé aux annonces de nouveaux produits et aux avant-premières. - **Réductions spéciales** : Profitez de réductions exclusives sur nos derniers produits. - **Promotions festives et concours** : 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 ! .. _ar_mpr121: 2.24 Module MPR121 ===================== Aperçu -------- Dans cette leçon, vous apprendrez à utiliser le MPR121. Il constitue une excellente option lorsque vous souhaitez ajouter de nombreux interrupteurs tactiles à votre projet. L'électrode du MPR121 peut être étendue à l'aide d'un conducteur. Par exemple, en connectant un fil à une banane, vous pouvez transformer cette banane en un interrupteur tactile, réalisant ainsi des projets comme un piano fruité. Composants Requis --------------------- .. image:: img/Part_two_24.png * :ref:`cpn_mega2560` * :ref:`cpn_breadboard` * :ref:`cpn_wires` * :ref:`cpn_mpr121` Circuit Fritzing ----------------- Dans cet exemple, insérez le MPR121 dans la breadboard. Connectez le GND du MPR121 au GND, 3.3V au 3V3, IRQ à la broche numérique 2, SCL à la broche SCL(21) et SDA à la broche SDA(20). Il y a 12 électrodes pour la détection tactile. Notez que le MPR121 est alimenté en 3.3V, et non en 5V. .. image:: img/image201.png :align: center Schéma de Connexion ---------------------- .. image:: img/image202.png :align: center Code ------ .. note:: * Vous pouvez ouvrir directement le fichier ``2.24_mpr121.ino`` situé dans le dossier ``sunfounder_vincent_kit_for_arduino\code\2.24_mpr121``. * La bibliothèque ``Adafruit MPR121`` est utilisée ici. Vous pouvez l'installer depuis le **Gestionnaire de Bibliothèques**. .. image:: img/lib_mpr121.png :align: center .. raw:: html Après avoir téléversé le code sur la carte Mega2560, l'état tactile des broches du MPR121 (soit « 1 », soit « 0 ») sera enregistré dans un tableau de type booléen de 12 bits qui sera affiché dans le moniteur série. Analyse du Code ------------------- Ce code facilite la communication et l'opération du capteur tactile MPR121. Il peut détecter l'état des électrodes tactiles et afficher les informations concernant les électrodes touchées ou libérées sur l'interface série. Si des données détaillées du capteur sont nécessaires, le code correspondant peut être décommenté. Voici l'analyse du code : #. Importation des bibliothèques : .. code-block:: arduino #include #include "Adafruit_MPR121.h" * ``Wire.h`` : Utilisée pour la communication I2C. * ``Adafruit_MPR121.h`` : Bibliothèque Adafruit pour faire fonctionner le capteur tactile MPR121. #. Définition de la macro ``_BV`` : .. code-block:: arduino #ifndef _BV #define _BV(bit) (1 << (bit)) #endif ``_BV(bit)`` définit une macro qui convertit un bit donné en sa valeur binaire correspondante, similaire à 1 << bit. #. Initialisation de l'instance de la classe ``Adafruit_MPR121`` : .. code-block:: arduino Adafruit_MPR121 cap = Adafruit_MPR121(); Crée une instance de la classe ``Adafruit_MPR121`` nommée ``cap``. L'objet ``cap`` sera utilisé pour communiquer avec le capteur tactile MPR121 et l'exploiter. #. Fonction ``setup()`` : Initialisation de la communication série avec un débit de 9600 bauds, puis initialisation du capteur tactile MPR121 avec l'adresse I2C par défaut 0x5A. Si l'initialisation échoue, un message d'erreur est affiché et une boucle infinie est lancée. .. code-block:: arduino void setup() { Serial.begin(9600); while (!Serial) { // nécessaire pour éviter que le Leonardo/micro démarre trop rapidement ! delay(10); } Serial.println("Adafruit MPR121 Capacitive Touch sensor test"); // L'adresse par défaut est 0x5A, si connecté à 3.3V c'est 0x5B // Si connecté à SDA, c'est 0x5C, et si connecté à SCL, c'est 0x5D if (!cap.begin(0x5A)) { Serial.println("MPR121 not found, check wiring?"); while (1); } Serial.println("MPR121 found!"); } #. Fonction ``loop()`` : * Obtenez l'état actuel du toucher, renvoyé sous forme d'entier de 16 bits. .. code-block:: arduino currtouched = cap.touched(); * Itérez à travers l'état des 12 électrodes (numérotées de 0 à 11). .. code-block:: arduino for (uint8_t i=0; i<12; i++) { // si *c'est* touché et *ne l'était pas* auparavant, alerte ! if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) { Serial.print(i); Serial.println(" touched"); } // if it *was* touched and now *isnt*, alert! if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) { Serial.print(i); Serial.println(" released"); } } * Si une électrode est touchée et ne l'était pas auparavant, affichez "x touché", où x est le numéro de l'électrode. * Si une électrode était touchée auparavant mais ne l'est plus, affichez "x relâché". * Mettez à jour ``lasttouched`` pour stocker l'état actuel du toucher afin de le comparer lors de l'itération suivante. .. code-block:: arduino lasttouched = currtouched; * Informations de débogage (section optionnelle) : .. code-block:: arduino // informations de débogage Serial.print("\t\t\t\t\t\t\t\t\t\t\t\t\t 0x"); Serial.println(cap.touched(), HEX); Serial.print("Filt: "); for (uint8_t i=0; i<12; i++) { Serial.print(cap.filteredData(i)); Serial.print("\t"); } Serial.println(); Serial.print("Base: "); for (uint8_t i=0; i<12; i++) { Serial.print(cap.baselineData(i)); Serial.print("\t"); } Serial.println(); // mettez un délai pour éviter la surcharge d'informations delay(100); Illustration du Phénomène ----------------------------- .. image:: img/image203.jpeg :align: center