|
|
本帖最后由 zcy19941015 于 2014-3-31 21:22 编辑

rt,就是左上角的模块~~~有vcc GND SDA SCL四个针脚
可是我上网找了一些例程,代码搞到了,,可是发现真的搞不懂这个模块应该接在arduino的哪几个io口上啊。。。。
lz用的arduino uno,跪求大神给讲讲代码TAT
例程网址在此:
http://www.alsrobot.cn/article-157.html
大神教我把这个例程跑通了就可以了~~~!!!跪谢好心大神~~~!!!
例程代码在此:
- #include <mpr121.h>
- #include <i2c.h>
- #define MPR121_R 0xB5
- #define MPR121_W 0xB4
- #define MPR121addr 0x5a
- int StateOfTouch1 = 0;
- int StateOfTouch2 = 0;
- int StateOfTouch3 = 0;
- int StateOfTouch4 = 0;
- int irqpin = 2;
- uint16_t touchstatus;
- volatile int GetTouchSignal = 0;
- unsigned char reg = 0;
- unsigned char status1 =0;
- unsigned char status2 =0;
- long previousMillis = 0;
- long interval = 100;
- void setup()
- {
- Serial.begin(9600);
- DDRC |= 0b00010011;
- PORTC = 0b00110000;
- i2cInit();
- Serial.println("setting device up..");
- delay(100);
- mpr121QuickConfig();
- }
- void loop()
- {
- unsigned char MPR_Query=0;
- unsigned long currentMillis = millis();
- if(currentMillis - previousMillis > interval)
- {
- previousMillis = currentMillis;
- Read_MPR121();
- }
- if (Serial.available()>0)
- {
- Serial.println("Get a command form PC..");
- reg = Serial.read();
- Serial.print("Quiry the Reg of ");
- Serial.println(reg,BIN);
- MPR_Query = mpr121Read(reg);
- Serial.print("the reg is = 0x");
- Serial.println(MPR_Query,HEX);
- }
- delayMicroseconds(1000);
- }
- void Read_MPR121()
- {
- status1=mpr121Read(0x00);
- status2=mpr121Read(0x01);
- CheckStatus();
- }
- void CheckStatus()
- {
- if ((status1&0x01)==0x01)
- {
- StateOfTouch1 =1;
- }
- else
- {
- if (StateOfTouch1 ==1)
- {
- Serial.println("channel 0 has pressed..");
- digitalWrite(10, HIGH);
- digitalWrite(11, LOW);
- digitalWrite(12, LOW);
- digitalWrite(13, LOW);
- StateOfTouch1 =0;
- }
- }
- if ((status1&0x02)==0x02)
- {
- StateOfTouch2 =1;
- }
- else
- {
- if (StateOfTouch2 ==1)
- {
- Serial.println("channel 1 has pressed..");
- digitalWrite(10, LOW);
- digitalWrite(11, HIGH);
- digitalWrite(12, LOW);
- digitalWrite(13, LOW);
- StateOfTouch2 =0;
- }
- }
- if ((status1&0x04)==0x04)
- {
- StateOfTouch3 =1;
- }
- else
- {
- if (StateOfTouch3 ==1)
- {
- Serial.println("channel 2 has pressed..");
- digitalWrite(10, LOW);
- digitalWrite(11, LOW);
- digitalWrite(12, HIGH);
- digitalWrite(13, LOW);
- StateOfTouch3 =0;
- }
- }
- if ((status1&0x08)==0x08)
- {
- StateOfTouch4 =1;
- }
- else
- {
- if (StateOfTouch4 ==1)
- {
- Serial.println("channel 3 has pressed..");
- digitalWrite(10, LOW);
- digitalWrite(11, LOW);
- digitalWrite(12, LOW);
- digitalWrite(13, HIGH);
- StateOfTouch4 =0;
- }
- }
- }
- byte mpr121Read(uint8_t address)
- {
- byte data;
- i2cSendStart();
- i2cWaitForComplete();
- i2cSendByte(MPR121_W);
- i2cWaitForComplete();
- i2cSendByte(address);
- i2cWaitForComplete();
- i2cSendStart();
- i2cSendByte(MPR121_R);
- i2cWaitForComplete();
- i2cReceiveByte(TRUE);
- i2cWaitForComplete();
- data = i2cGetReceivedByte();
- i2cWaitForComplete();
- i2cSendStop();
- cbi(TWCR, TWEN);
- sbi(TWCR, TWEN);
- return data;
- }
- void mpr121Write(unsigned char address, unsigned char data)
- {
- i2cSendStart();
- i2cWaitForComplete();
- i2cSendByte(MPR121_W);
- i2cWaitForComplete();
- i2cSendByte(address);
- i2cWaitForComplete();
- i2cSendByte(data);
- i2cWaitForComplete();
- i2cSendStop();
- }
- void mpr121QuickConfig(void)
- {
- Serial.println("config MPR121..");
- mpr121Write(MHD_R, 0x01);
- mpr121Write(NHD_R, 0x01);
- mpr121Write(NCL_R, 0x00);
- mpr121Write(FDL_R, 0x00);
- mpr121Write(MHD_F, 0x01);
- mpr121Write(NHD_F, 0x01);
- mpr121Write(NCL_F, 0xFF);
- mpr121Write(FDL_F, 0x02);
- mpr121Write(ELE0_T, TOU_THRESH);
- mpr121Write(ELE0_R, REL_THRESH);
- mpr121Write(ELE1_T, TOU_THRESH);
- mpr121Write(ELE1_R, REL_THRESH);
- mpr121Write(ELE2_T, TOU_THRESH);
- mpr121Write(ELE2_R, REL_THRESH);
- mpr121Write(ELE3_T, TOU_THRESH);
- mpr121Write(ELE3_R, REL_THRESH);
- mpr121Write(ATO_CFGU, 0xC9);
- mpr121Write(ATO_CFGL, 0x82);
- mpr121Write(ATO_CFGT,0xb5);
- mpr121Write(ATO_CFG0, 0x1B);
- mpr121Write(ELE_CFG, 0x8c);
- Serial.println("config MPR121 Done!");
- }
- void checkInterrupt(void)
- {
- int IRQ =0;
- IRQ = digitalRead(irqpin);
- if(IRQ == 0)
- {
- GetTouchSignal=1;
- }
- else
- {
- GetTouchSignal=0;
- }
- }
复制代码
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的SDA接了A4 SCL接了A5还是不行,大神看看是不是代码问题。。。。。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|