Контроллер сенсорных кнопок MPR121

Модуль MPR121 представляет собой контроллер сенсорных кнопок, а так же может являться расширителем порта.

MPR121 имеет настраиваемый адрес на I²C шине, улучшенную систему фильтрации и полностью независимые настраиваемые входы со встроенной системой автоматической калибровки.

Благодаря малому энергопотреблению прибор может применяться в том числе и в мобильных устройствах с батарейным питанием.

Характеристики:

  • напряжение питания 1,7 В – 3,6 В
  • 29 мкА при периоде опроса 16 мс
  • 3 мкА в режиме малого потребления
  • 12 электродов
  • автоматическая калибровка входов
  • возможность настройки пороговых значений срабатывания для каждого электрода
  • I²C интерфейс, и выход прерывания IRQ, срабатывает при изменения состояния электродов
  • 8 GPIO (цифровой вход/выход, PWM) с 4 по 12 электрод

Если вам недостаточно 12 выводов модуля, то на одну шину I2C можно каскадом повесить дополнительные модули, изменив при этом адрес при помощи перемычек на нижней стороне платы (по умолчанию 0x5A).

Для определения I2C адреса можно воспользоваться I2C сканером — http://forum.rcl-radio.ru/viewtopic.php?pid=93#p93.

Как ранее отмечалось модуль MPR121 может работать как контроллер сенсорных кнопок, а так же часть его электродов (с 4 по 12) могут работать как цифровые входы и выходы, так же эти выводы могут работать в режиме PWM.

Ниже показаны примеры работы модуля MPR121 в различных режимах.

Контроллер сенсорных кнопок

#include <MPR121.h>  // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=2463&download=1
#include <Wire.h>

const uint8_t LEDPIN = 13;  // pin 13 MPR121 interrupt 

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);
    }
  }
}

Показанный выше скетч позволят постоянно сканировать сенсорные кнопки модуля и выводить в монитор порта номер кнопки к которой произошло касание. Так же в момент касания кнопки сигнал прерывания выводится на вывод D13 платы Ardunio.

Комбинированный режим работы

Вы этом примере активна одна сенсорная кнопка под номером 0, а вывод 11 используется как цифровой выход, к нему подключен светодиод отображающий режим работы сенсорной кнопки.

#include <MPR121.h>  // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=2463&download=1
#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);
    }
}

При касании сенсорного контакта 0, загорается светодиод, при повторном касании светодиод гаснет.

Расширитель порта

В этом примере сенсорные контакты работают как расширитель порта, один контакт используется как цифровой вход (с внутренним подтягивающим резистором), а другой как выход.

#include <MPR121.h>  // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=2463&download=1
#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);}
}

При нажатии на кнопку загорается светодиод, при повторном нажатии на кнопку светодиод гаснет.

Режим PWM

В этом примере вывод сенсорной кнопки используется как выход ШИМ сигнала.

#include <MPR121.h>  // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=2463&download=1
#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);
  }
}

Светодиод в этом примере медленно меняет свою яркость от минимального значения до максимального и наоборот.

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=9329#p9329
Nouveaux jeux : clé succès casinos en ligne

Добавить комментарий

Войти с помощью: