Salut les amis, ici je vous présente le composant et son code de base mais pour le prochain article je réaliserai un piano a base de ce module 🙂 il est tout simplement génial ^^ j’en rachèterai je m’amuse déja comme un petit fou!

Détails concernant l’achat


  • Objet:  MPR121 V12 Breakout Capacitive Touch Sensor Controller…
  • Prix: 1.73€
  • Site d’achat: Ebay
  • Provenance: Chine.
  • Destination: Belgique
  • Livraison: 16 jours
  • Vendeur:chips-fans

Le MPR121

C’est un capteur tactile capacitif fonctionnant sous le protocole I2C. Il peut contrôler jusqu’a 12 électrodes.



  •  3.3V -> 3.3V de l’Arduino
  • GND -> GND de l’Arduino
  • IRQ -> Digital 2 de l’Arduino
  • SCL -> Analog 5 de l’Arduino
  • SDA -> Analog 4 de l’Arduino


Librairie MPR121 Adafruit

Téléchargez et installer la librairie Adafruit.

Le code Arduino

Lancez l’exemple de la librairie ADAFRUIT MP121:

Fichier -> Exemples -> ADAFRUIT MP121 -> MP121test

vous devriez avoir ce code:

This is a library for the MPR121 12-channel Capacitive touch sensor

Designed specifically to work with the MPR121 Breakout in the Adafruit shop 

These sensors use I2C communicate, at least 2 pins are required 
to interface

Adafruit invests time and resources providing this open source code, 
please support Adafruit and open-source hardware by purchasing 
products from Adafruit!

Written by Limor Fried/Ladyada for Adafruit Industries.  
BSD license, all text above must be included in any redistribution

#include <Wire.h>
#include "Adafruit_MPR121.h"

// You can have up to 4 on one i2c bus but one is enough for testing!
Adafruit_MPR121 cap = Adafruit_MPR121();

// Keeps track of the last pins touched
// so we know when buttons are 'released'
uint16_t lasttouched = 0;
uint16_t currtouched = 0;

void setup() {
  while (!Serial);        // needed to keep leonardo/micro from starting too fast!

  Serial.println("Adafruit MPR121 Capacitive Touch sensor test"); 
  // Default address is 0x5A, if tied to 3.3V its 0x5B
  // If tied to SDA its 0x5C and if SCL then 0x5D
  if (!cap.begin(0x5A)) {
    Serial.println("MPR121 not found, check wiring?");
    while (1);
  Serial.println("MPR121 found!");

void loop() {
  // Get the currently touched pads
  currtouched = cap.touched();
  for (uint8_t i=0; i<12; i++) {
    // it if *is* touched and *wasnt* touched before, alert!
    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");

  // reset our state
  lasttouched = currtouched;

  // comment out this line for detailed data from the sensor!
  // debugging info, what
  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.print("Base: ");
  for (uint8_t i=0; i<12; i++) {
    Serial.print(cap.baselineData(i)); Serial.print("\t");
  // put a delay so it isn't overwhelming





Pin It on Pinterest

Share This