Arduino makes me feel desperate. ūüôĀ

O.M.G. He…..lp……Me…….

Although the code I wrote was right, it still didn’t work. TAT. Mr. Arduino

Mr. Arduino!! Please tell me which part I made mistake.


Anyway, I used the MPR121 and firstly wanna touch certain thresholds to trigger the Servo Motor. For testing, I only turn on one threshold and use LED to replace the Motor. I get the code online and use Switch-Case to program. If the threshold is touched, the LED will turn on.

Now, the problem is I wrote¬†Serial.print within the¬†Switch-Case¬†and it could print “Kai” when I touched. But the LED can’t illuminate. So I think the code should work but actually it can’t….


Code (have higlighted the part I adjust.):

#include “mpr121.h”
#include <Wire.h>
#define ledPin 13

int irqpin = 2; // Digital 2
boolean touchStates[12]; //to keep track of the previous touch states

void setup(){
pinMode(irqpin, INPUT);
digitalWrite(irqpin, HIGH); //enable pullup resistor
pinMode(ledPin, OUTPUT);
digitalWrite( ledPin, LOW);



void loop(){
void readTouchInputs(){

//read the touch state from the MPR121

byte LSB =;
byte MSB =;

uint16_t touched = ((MSB << 8) | LSB); //16bits that make up the touch states
for (int i=0; i < 1; i++){ // Check what electrodes were pressed
if(touched & (1<<i)){

if(touchStates[i] == 0){
//pin i was just touched
Serial.print(“pin “);
Serial.println(” was just touched”);

switch (i) {
case 0:
digitalWrite( ledPin, HIGH);

}else if(touchStates[i] == 1){
//pin i is still being touched

touchStates[i] = 1;
if(touchStates[i] == 1){
Serial.print(“pin “);
Serial.println(” is no longer being touched”);

//pin i is no longer being touched

touchStates[i] = 0;


void mpr121_setup(void){

set_register(0x5A, ELE_CFG, 0x00);

// Section A – Controls filtering when data is > baseline.
set_register(0x5A, MHD_R, 0x01);
set_register(0x5A, NHD_R, 0x01);
set_register(0x5A, NCL_R, 0x00);
set_register(0x5A, FDL_R, 0x00);

// Section B – Controls filtering when data is < baseline.
set_register(0x5A, MHD_F, 0x01);
set_register(0x5A, NHD_F, 0x01);
set_register(0x5A, NCL_F, 0xFF);
set_register(0x5A, FDL_F, 0x02);

// Section C – Sets touch and release thresholds for each electrode
set_register(0x5A, ELE0_T, TOU_THRESH);
set_register(0x5A, ELE0_R, REL_THRESH);

set_register(0x5A, ELE1_T, TOU_THRESH);
set_register(0x5A, ELE1_R, REL_THRESH);

set_register(0x5A, ELE2_T, TOU_THRESH);
set_register(0x5A, ELE2_R, REL_THRESH);

set_register(0x5A, ELE3_T, TOU_THRESH);
set_register(0x5A, ELE3_R, REL_THRESH);

set_register(0x5A, ELE4_T, TOU_THRESH);
set_register(0x5A, ELE4_R, REL_THRESH);

set_register(0x5A, ELE5_T, TOU_THRESH);
set_register(0x5A, ELE5_R, REL_THRESH);

set_register(0x5A, ELE6_T, TOU_THRESH);
set_register(0x5A, ELE6_R, REL_THRESH);

set_register(0x5A, ELE7_T, TOU_THRESH);
set_register(0x5A, ELE7_R, REL_THRESH);

set_register(0x5A, ELE8_T, TOU_THRESH);
set_register(0x5A, ELE8_R, REL_THRESH);

set_register(0x5A, ELE9_T, TOU_THRESH);
set_register(0x5A, ELE9_R, REL_THRESH);

set_register(0x5A, ELE10_T, TOU_THRESH);
set_register(0x5A, ELE10_R, REL_THRESH);

set_register(0x5A, ELE11_T, TOU_THRESH);
set_register(0x5A, ELE11_R, REL_THRESH);

// Section D
// Set the Filter Configuration
// Set ESI2
set_register(0x5A, FIL_CFG, 0x04);

// Section E
// Electrode Configuration
// Set ELE_CFG to 0x00 to return to standby mode
set_register(0x5A, ELE_CFG, 0x0C); // Enables all 12 Electrodes

// Section F
// Enable Auto Config and auto Reconfig
/*set_register(0x5A, ATO_CFG0, 0x0B);
set_register(0x5A, ATO_CFGU, 0xC9); // USL = (Vdd-0.7)/vdd*256 = 0xC9 @3.3V set_register(0x5A, ATO_CFGL, 0x82); // LSL = 0.65*USL = 0x82 @3.3V
set_register(0x5A, ATO_CFGT, 0xB5);*/ // Target = 0.9*USL = 0xB5 @3.3V

set_register(0x5A, ELE_CFG, 0x0C);

boolean checkInterrupt(void){
return digitalRead(irqpin);
void set_register(int address, unsigned char r, unsigned char v){