小白求助~~~touch sensor不懂io口怎么接~~
本帖最后由 zcy19941015 于 2014-3-31 21:22 编辑http://www.alsrobot.cn/images/upload/Image/IIC%20Touch%20Sensor.jpg
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 MPR121addr0x5a
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();
}
voidCheckStatus()
{
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!");
}
voidcheckInterrupt(void)
{
int IRQ =0;
IRQ = digitalRead(irqpin);
if(IRQ == 0)
{
GetTouchSignal=1;
}
else
{
GetTouchSignal=0;
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的SDA接了A4 SCL接了A5还是不行,大神看看是不是代码问题。。。。。
现在的问题就是我搞不懂这个东西应该接在哪几个io口上,,,代码里也没写(或许我没看懂),也没有文字叙述,硬件连接图 Hardware i2c 的話 A5 -SCL, A4 - SDA Super169 发表于 2014-3-31 19:24 static/image/common/back.gif
Hardware i2c 的話 A5 -SCL, A4 - SDA
额,还是不可以,是代码问题么 irqpin = 2,
IRQ腳未接好,要接往Arduino 的 D2 接口。
eddiewwm 发表于 2014-3-31 21:47 static/image/common/back.gif
irqpin = 2,
IRQ腳未接好,要接往Arduino 的 D2 接口。
没有irq这个脚啊,,只有VCC GND SCL SDA eddiewwm 发表于 2014-3-31 21:47 static/image/common/back.gif
irqpin = 2,
IRQ腳未接好,要接往Arduino 的 D2 接口。
接好了~~~谢谢~~:) eddiewwm 发表于 2014-3-31 21:47 static/image/common/back.gif
irqpin = 2,
IRQ腳未接好,要接往Arduino 的 D2 接口。
~~接好了~~谢谢!
页:
[1]