极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10578|回复: 7

小白求助~~~touch sensor不懂io口怎么接~~

[复制链接]
发表于 2014-3-31 18:32:16 | 显示全部楼层 |阅读模式
本帖最后由 zcy19941015 于 2014-3-31 21:22 编辑


rt,就是左上角的模块~~~有vcc GND SDA SCL四个针脚
可是我上网找了一些例程,代码搞到了,,可是发现真的搞不懂这个模块应该接在arduino的哪几个io口上啊。。。。
lz用的arduino uno,跪求大神给讲讲代码TAT
例程网址在此:
http://www.alsrobot.cn/article-157.html
大神教我把这个例程跑通了就可以了~~~!!!跪谢好心大神~~~!!!
例程代码在此:

  1. #include <mpr121.h>
  2. #include <i2c.h>

  3. #define MPR121_R    0xB5
  4. #define MPR121_W    0xB4
  5. #define MPR121addr  0x5a

  6. int StateOfTouch1 = 0;
  7. int StateOfTouch2 = 0;
  8. int StateOfTouch3 = 0;
  9. int StateOfTouch4 = 0;
  10. int irqpin        = 2;
  11. uint16_t touchstatus;
  12. volatile int GetTouchSignal = 0;
  13. unsigned char reg = 0;
  14. unsigned char status1 =0;
  15. unsigned char status2 =0;
  16. long previousMillis = 0;
  17. long interval = 100;

  18. void setup()
  19. {
  20.   Serial.begin(9600);
  21.   DDRC |= 0b00010011;
  22.   PORTC = 0b00110000;
  23.   i2cInit();
  24.   Serial.println("setting device up..");
  25.   delay(100);
  26.   mpr121QuickConfig();
  27. }

  28. void loop()
  29. {
  30.   unsigned char MPR_Query=0;
  31.   unsigned long currentMillis = millis();
  32.   if(currentMillis - previousMillis > interval)
  33.   {
  34.     previousMillis = currentMillis;
  35.     Read_MPR121();
  36.   }
  37.   if (Serial.available()>0)
  38.   {
  39.     Serial.println("Get a command form PC..");
  40.     reg = Serial.read();
  41.     Serial.print("Quiry the Reg of ");
  42.     Serial.println(reg,BIN);
  43.     MPR_Query = mpr121Read(reg);
  44.     Serial.print("the reg is = 0x");
  45.     Serial.println(MPR_Query,HEX);
  46.   }
  47.   delayMicroseconds(1000);
  48. }

  49. void Read_MPR121()
  50. {
  51.   status1=mpr121Read(0x00);
  52.   status2=mpr121Read(0x01);
  53.   CheckStatus();  
  54. }

  55. void  CheckStatus()
  56. {
  57.   if ((status1&0x01)==0x01)
  58.   {
  59.     StateOfTouch1 =1;
  60.   }
  61.   else
  62.   {
  63.     if (StateOfTouch1 ==1)
  64.     {
  65.       Serial.println("channel 0 has pressed..");
  66.       digitalWrite(10, HIGH);
  67.       digitalWrite(11, LOW);
  68.       digitalWrite(12, LOW);
  69.       digitalWrite(13, LOW);
  70.       StateOfTouch1 =0;
  71.     }
  72.   }
  73.   if ((status1&0x02)==0x02)
  74.   {
  75.     StateOfTouch2 =1;
  76.   }
  77.   else
  78.   {
  79.     if (StateOfTouch2 ==1)
  80.     {
  81.       Serial.println("channel 1 has pressed..");
  82.       digitalWrite(10, LOW);
  83.       digitalWrite(11, HIGH);
  84.       digitalWrite(12, LOW);
  85.       digitalWrite(13, LOW);
  86.       StateOfTouch2 =0;
  87.     }
  88.   }
  89.   if ((status1&0x04)==0x04)
  90.   {
  91.     StateOfTouch3 =1;
  92.   }
  93.   else
  94.   {
  95.     if (StateOfTouch3 ==1)
  96.     {
  97.       Serial.println("channel 2 has pressed..");
  98.       digitalWrite(10, LOW);
  99.       digitalWrite(11, LOW);
  100.       digitalWrite(12, HIGH);
  101.       digitalWrite(13, LOW);
  102.       StateOfTouch3 =0;
  103.     }
  104.   }
  105.   if ((status1&0x08)==0x08)
  106.   {
  107.     StateOfTouch4 =1;
  108.   }
  109.   else
  110.   {
  111.     if (StateOfTouch4 ==1)
  112.     {
  113.       Serial.println("channel 3 has pressed..");
  114.       digitalWrite(10, LOW);
  115.       digitalWrite(11, LOW);
  116.       digitalWrite(12, LOW);
  117.       digitalWrite(13, HIGH);
  118.       StateOfTouch4 =0;
  119.     }
  120.   }
  121. }

  122. byte mpr121Read(uint8_t address)
  123. {
  124.   byte data;
  125.   i2cSendStart();
  126.   i2cWaitForComplete();
  127.   i2cSendByte(MPR121_W);
  128.   i2cWaitForComplete();
  129.   i2cSendByte(address);
  130.   i2cWaitForComplete();
  131.   i2cSendStart();
  132.   i2cSendByte(MPR121_R);
  133.   i2cWaitForComplete();
  134.   i2cReceiveByte(TRUE);
  135.   i2cWaitForComplete();
  136.   data = i2cGetReceivedByte();
  137.   i2cWaitForComplete();
  138.   i2cSendStop();
  139.   cbi(TWCR, TWEN);
  140.   sbi(TWCR, TWEN);
  141.   return data;
  142. }

  143. void mpr121Write(unsigned char address, unsigned char data)
  144. {
  145.   i2cSendStart();
  146.   i2cWaitForComplete();
  147.   i2cSendByte(MPR121_W);
  148.   i2cWaitForComplete();
  149.   i2cSendByte(address);
  150.   i2cWaitForComplete();
  151.   i2cSendByte(data);
  152.   i2cWaitForComplete();
  153.   i2cSendStop();
  154. }

  155. void mpr121QuickConfig(void)
  156. {
  157.   Serial.println("config MPR121..");
  158.   mpr121Write(MHD_R, 0x01);
  159.   mpr121Write(NHD_R, 0x01);
  160.   mpr121Write(NCL_R, 0x00);
  161.   mpr121Write(FDL_R, 0x00);
  162.   mpr121Write(MHD_F, 0x01);
  163.   mpr121Write(NHD_F, 0x01);
  164.   mpr121Write(NCL_F, 0xFF);
  165.   mpr121Write(FDL_F, 0x02);
  166.   mpr121Write(ELE0_T, TOU_THRESH);
  167.   mpr121Write(ELE0_R, REL_THRESH);
  168.   mpr121Write(ELE1_T, TOU_THRESH);
  169.   mpr121Write(ELE1_R, REL_THRESH);
  170.   mpr121Write(ELE2_T, TOU_THRESH);
  171.   mpr121Write(ELE2_R, REL_THRESH);
  172.   mpr121Write(ELE3_T, TOU_THRESH);
  173.   mpr121Write(ELE3_R, REL_THRESH);

  174.   mpr121Write(ATO_CFGU, 0xC9);
  175.   mpr121Write(ATO_CFGL, 0x82);
  176.   mpr121Write(ATO_CFGT,0xb5);
  177.   mpr121Write(ATO_CFG0, 0x1B);
  178.   mpr121Write(ELE_CFG, 0x8c);
  179.   Serial.println("config MPR121 Done!");
  180. }

  181. void  checkInterrupt(void)
  182. {
  183.   int IRQ =0;
  184.   IRQ = digitalRead(irqpin);
  185.   if(IRQ == 0)
  186.   {
  187.     GetTouchSignal=1;
  188.   }
  189.   else
  190.   {
  191.     GetTouchSignal=0;
  192.   }
  193. }
复制代码



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的SDA接了A4 SCL接了A5还是不行,大神看看是不是代码问题。。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2014-3-31 18:35:46 | 显示全部楼层
现在的问题就是我搞不懂这个东西应该接在哪几个io口上,,,代码里也没写(或许我没看懂),也没有文字叙述,硬件连接图
回复 支持 反对

使用道具 举报

发表于 2014-3-31 19:24:23 | 显示全部楼层
Hardware i2c 的話 A5 -SCL, A4 - SDA
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-31 21:20:09 | 显示全部楼层
Super169 发表于 2014-3-31 19:24
Hardware i2c 的話 A5 -SCL, A4 - SDA

额,还是不可以,是代码问题么
回复 支持 反对

使用道具 举报

发表于 2014-3-31 21:47:56 | 显示全部楼层
irqpin = 2,
IRQ腳未接好,要接往Arduino 的 D2 接口。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-31 21:50:22 | 显示全部楼层
eddiewwm 发表于 2014-3-31 21:47
irqpin = 2,
IRQ腳未接好,要接往Arduino 的 D2 接口。

没有irq这个脚啊,,只有VCC GND SCL SDA
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-31 22:17:32 | 显示全部楼层
eddiewwm 发表于 2014-3-31 21:47
irqpin = 2,
IRQ腳未接好,要接往Arduino 的 D2 接口。

接好了~~~谢谢~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-31 22:18:07 | 显示全部楼层
eddiewwm 发表于 2014-3-31 21:47
irqpin = 2,
IRQ腳未接好,要接往Arduino 的 D2 接口。

~~接好了~~谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 16:30 , Processed in 0.038326 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表