查看: 2278|回复: 4

Adarfruit的触摸库

[复制链接]

该用户从未签到

发表于 2016-9-10 08:45 | 显示全部楼层 |阅读模式
之前我介绍过一个MPR121 触摸传感器模块的库【参考1】,这次再介绍另外一个实现同样功能的库,差别在于这个新的库可以从Arduino IDE中直接下载到:
image001.png
                              
国内买到的板子都是根据 Adafruit仿造的,下图就是 Adafruit的原图
image002.png
引出的 12个触摸脚,还有如下控制pin:
1.IRQ 可以做到按下时同时 Arduino
2.SDA/SCL I2C通讯用的
3.ADDR: 作用是选择I2C的地址,模块本身有下拉电阻,这里可以不接。默认地址是0x5B
image003.png
image004.png
4.GND 地
5. 3.3V 电源
6. VIN 模块本身有一个电压转换芯片,可以接入 5V
image005.png

运行库自带的例子,接线上只要接3.3V GND SDA SCL 四根线即可,这个库本身是用轮询的方法来处理引脚的触摸信息的。
代码如下:

kittenblock中小学创客名师推荐的图形化编程软件


/*********************************************************
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"
 
// 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() {
  while (!Serial);        // needed to keep leonardo/micro from starting too fast!
 
  Serial.begin(9600);
  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);
}

运行结果:

image006.png
需要注意的是模块的地址问题,根据DataSheet ADDR 如果接到GND,地址应该是0x5B ,但是实际上是 0x5A。
参考:
1.   http://www.lab-z.com/mpr121/  MPR121 触摸传感器模块

打赏作者鼓励一下!
  • TA的每日心情
    开心
    2016-9-12 15:43
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-9-12 15:38 | 显示全部楼层
    这是个好东西,我正在使用TTP229做东西,可以试试这个芯片。
  • TA的每日心情
    开心
    2016-9-12 15:43
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-9-12 15:40 | 显示全部楼层
    可惜你提供的资料地址都打不开

    点评

    哪个资料打不开?  发表于 2016-9-12 15:51
  • TA的每日心情
    奋斗
    2019-5-5 21:49
  • 签到天数: 208 天

    [LV.7]常住居民III

    发表于 2016-9-13 11:56 | 显示全部楼层
    之前买过一个这个芯片的那种电容键盘~
    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    新手求助,串口通信AT指令发送无反应
    新手求助,串口通信AT指令
    现在想用arduino uno板连接esp12-N无线模块发送数据,但是使用串口助手发送AT指令
    【Arduino】108种传感器模块系列实验(40)---旋转编码器模块
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    Arduino串口事件
    Arduino串口事件
    向各位大佬求助,学习了serialEvent(),按照书上的程序,我是直接使用的示例中的serial
    基于arduino的delta并联机械手
    基于arduino的delta并联机
    delta并联机械手现在广泛应用于工业,因为资金有限,用舵机做的,底座这些也是
    基于机器视觉的智能分拣机械臂
    基于机器视觉的智能分拣机
    本作品是一个基于机器视觉的智能机械臂操作平台,其采用atmega32单片机作为主控制系统
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表