MPR121 Capacitive Touch Sensor Module

  • RM8.00

  • Product Code: MPR121 Capacitive Touch Sensor Module
  • Availability: In Stock

Module pinout:

This module has 18 pins:

6 Pins on the left:

  • VCC: Module power supply – 3.3V
  • IRQ: Interrupt output
  • SCL: Serial Clock Input for I2C protocol
  • SDA: Serial Data Input/Output for I2C protocol
  • ADD: Adjusting address for I2C protocol
  • GND: Ground

12 pins on the right:

  • 0-11: Touch buttons

            SEN-25-003-MPR121-Capacitive-Touch-Sensor-Pin

Interfacing MPR121 Capacitive Touch Sensor Module with Arduino

MPR121 Module Arduino circuit

Code:

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

#ifndef _BV
#define _BV(bit) (1 << (bit))
#endif

// 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 () {
  Serial.begin(9600);

  while (!Serial) { // needed to keep leonardo/micro from starting too fast!
    delay(10);
  }

  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.print("  touched");
    }
    // if it *was* touched and now *isnt*, alert!
    if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) {
      Serial.println("         released");
    }
  }

  // reset our state
  lasttouched = currtouched;

  // comment out this line for detailed data from the sensor!
  return;

  // 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.println();
  Serial.print("Base: ");
  for (uint8_t i = 0; i < 12; i++) {
    Serial.print(cap.baselineData(i)); Serial.print("\t");
  }
  Serial.println();

  // put a delay so it isn't overwhelming
  delay(1000);
}

 

Write a review

Note: HTML is not translated!
    Bad           Good