MPR 121 for Daisy Seed, Sensor not found

Hello all!
I am using a Board from Electrosmith called Daisy Seed and trying to get input from an MPR 121 sensor.
Somehow tho, it doesn’t recognize the sensor and tells me to check my cabelling.

“Adafruit MPR121 Capacitive Touch sensor test
MPR121 not found, check wiring?”

At the moment i have the SCL hooked up to the Daisy Seed ADC4 and the SDA to the Daisy seed ADC 5.

(on the Arduino uno, with wich the mpr 121 was working for me i hooked the SCL to the A5 and the SDA to the A4.

Anybody here who could help me out please ?
Thank you very much

/*********************************************************

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

Designed specifically to work with the MPR121 Breakout in the Adafruit shop
----> https://www.adafruit.com/products/

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”

#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.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!
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(100);
}

The issue could be that the pins you’re using on the Arduino are the actual hardware SDA/SCL (I2C) pins, whereas on the Daisy Seed you have it wired to ADC pins that are not hardware I2C pins.

If you try to connect to physical pins 12 and 13 (labeled I2C SDA and I2C SCL in the pinout) it may solve your problem as those pins should work with the Wire library.

I have not personally used this Adafruit library. So I’m not familiar with it’s inner workings. It may also have software I2C support, but judging by your experience I would guess not.

1 Like

Thank you very much, this did the thing!

Best, Franz

1 Like

Glad I was able to help! Seems like a cool project, we’d love to see a demo or something once you’ve got it all up and running!

1 Like