1

Тема: MPR121 - малопотребляющий контроллер сенсорных емкостных клавиатур

Основная статья - http://rcl-radio.ru/?p=131456

http://forum.rcl-radio.ru/uploads/images/2024/01/72b13a16fc04d843e129b2635a214af9.png

Данный контент доступен только зарегистрированным пользователям.


#include <MPR121.h>
#include <Wire.h>

const uint8_t LEDPIN = 13;  // pin 4 is the MPR121 interrupt on the Bare Touch Board

void setup() {
   Serial.begin(9600);
   MPR121.begin(0x5A);   // MPR121 I2C address 
   MPR121.setInterruptPin(LEDPIN);
   MPR121.setTouchThreshold(40);  // Устанавливает порог касания равным 40, допустимые значения от 0 до>255
   MPR121.setReleaseThreshold(20);  // Устанавливает порог разблокировки равным 20, допустимые значения от 0 до>255.ПРИМЕЧАНИЕ: это значение должно быть меньше значения касания.
   MPR121.setFFI(FFI_10);
   MPR121.setSFI(SFI_10);
   MPR121.setGlobalCDT(CDT_4US);  // reasonable for larger capacitances
   MPR121.autoSetElectrodes();  // autoset all electrode settings
}

void loop() {
  MPR121.updateAll();
  for (int i = 0; i < 12; i++) {
    if (MPR121.isNewTouch(i)) {
      Serial.print("button ");
      Serial.println(i);
    }
  }

}

2

Re: MPR121 - малопотребляющий контроллер сенсорных емкостных клавиатур

#include <MPR121.h>
#include <Wire.h>

int k0;

void setup() {
   Serial.begin(9600);
   MPR121.begin(0x5A);   // MPR121 I2C address 
   MPR121.setNumDigPins(1);
   MPR121.pinMode(11, OUTPUT);// 8 pins (E4..E11)
}

void loop() {
  MPR121.updateAll();
  if(MPR121.isNewTouch(0)){
    Serial.print("k0= ");
    Serial.println(k0);
    k0++;if(k0>1){k0=0;}
    MPR121.digitalWrite(11,k0);
    }
}

3

Re: MPR121 - малопотребляющий контроллер сенсорных емкостных клавиатур

#include <MPR121.h>
#include <Wire.h>

int i;

void setup() {
   Serial.begin(9600);
   MPR121.begin(0x5A);   // MPR121 I2C address 
   MPR121.setNumDigPins(2);
   MPR121.pinMode(11, OUTPUT);// 8 pins (E4..E11)
   MPR121.pinMode(10, INPUT_PULLUP);
}

void loop() {
  if(MPR121.digitalRead(10)==LOW && i==0){i=1; MPR121.digitalWrite(11, HIGH);delay(200);}
  if(MPR121.digitalRead(10)==LOW && i==1){i=0; MPR121.digitalWrite(11, LOW);delay(200);}
}

4

Re: MPR121 - малопотребляющий контроллер сенсорных емкостных клавиатур

#include <MPR121.h>
#include <Wire.h>


void setup() {
   Serial.begin(9600);
   MPR121.begin(0x5A);   // MPR121 I2C address 
   MPR121.setNumDigPins(1);
   MPR121.pinMode(11, OUTPUT);// 8 pins (E4..E11)
}

void loop() {
   for (int i = 0; i < 255; i++) {
    MPR121.analogWrite(11, i);
    delay(10);
  }

  for (int i = 255; i >= 0; i--) {
    MPR121.analogWrite(11, i);
    delay(10);
  }
}

5

Re: MPR121 - малопотребляющий контроллер сенсорных емкостных клавиатур

Прикольная микруха, но больно специфическая.
Как расширение портов ввода(12-2) это класс.
Ну а что делать с нажатием? Программа обработки, мне кажется, будет огромной.
Хотя как 6 входов на 6 выходов при занятых 2 портах Ардуино(или Атмеги13) это уже кое-что.