Hello,

 

Today I am going to show you how I have managed to use capacitive touch in conjunction with the piezo transducer to enable pitch changes within a pad.

 

In the example I was given at QMUL for using MPR121s, a sine wave of different frequencies plays every time a different electrode is touched. However, in order to have all of the control on the Pure Data side of things, I wanted to send a raw data stream, same as I had been doing with the Raspberry Pi in the old setup.

 

Luckily, I found a couple of commented out lines for debugging that did exactly that and printed the data. With some help from Chris at Enzien Audio, I managed to turn this into a message that could be interpreted by Heavy audio tools and sent into my compiled pure data patch. Then in Pure Data, I would be able to receive those values and use them for anything I could think of (within the possible).

The function looks like this:

void readMPR121()
{
  for(int i = 0; i < NUM_TOUCH_PINS; i++) {
  sensorValue[i] = -(mpr121.filteredData(i) - mpr121.baselineData(i));
  sensorValue[i] -= threshold;
  if(sensorValue[i] < 0)
  sensorValue[i] = 0;
        hv_vscheduleMessageForReceiver(gHeavyContext, "sensorValues", 0, "ff", (float)i, (float)sensorValue[i]);
  }
}

 

For now, all I wanted is to check this worked so I made each electrode send a different frequency to the KarplusStrong patch I was already using. This is how it looks on Pure Data:

 

 

And this is what it sounds like:

 

Not a bad start. The next steps are getting all four MPR121s to work simultaneously (by giving them different I2C addresses) and setting rules for multi-touch within each pad (like playing a chord when more than 2 electrodes are touched at the same time).

 

On another note, Bela platform gets released on Kickstarter tomorrow so make sure to check Bela.io!