MPR121 I2C Touch

    This page is to Setup and Config MPR121 I2C Touch

Hardware and Software

MPR121 I2C Touch, Arduino or Digispark / ESP8266

    Arduino IDE

Sanki Notes

  • I2C : 
  • SDA : A4  (Digispark D0)
  • SCL : A5  (Digispark D2)
  • IRQ : D2
  • V++ : 3.3V


          This example is ..........
  1. /*********************************************************
    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
Sanki Poon,
2016年5月24日 上午1:53