2012-12-03 105 views
0

我正嘗試從arduino中的PCA9554中讀取數據。 硬件設置很簡單:PCA9554的全部3個地址線連接到高電平(+5v),因此該器件的地址爲0x27。 ,我使用讀取值的代碼如下:在Arduino中從PCA 9554(i2c)中讀取

uint8_t i2cr8(uint8_t dev, uint8_t addr) 
{ 
     uint8_t val=-1; 
     Wire.requestFrom(dev,(uint8_t)1); 
     if(Wire.available()) { 
      val = Wire.read(); 
     } 
     return val; 
    } 

,但它始終爲0。

什麼是錯的代碼?

我認爲硬件沒有錯誤,因爲我可以從I2C總線上的其他設備讀取。

+0

'uint8_t VAL = -1;'沒有任何意義。 – Lundin

+0

@Lundin:我的不好,把它改爲val = 0xff;這是有效的。 – mans

回答

0

這種方法的工作原理:

//exact address depends on IC model and <A0:A2> wiring 
#define dip_addr  0x38 
... 

byte rdata = 0xFF; 

Wire.beginTransmission(dip_addr); 
Wire.send((uint8_t)0); 
Wire.endTransmission(); 

Wire.requestFrom(dip_addr,1); 

if (Wire.available()) rdata = Wire.receive(); 

Serial.println ("DIP: " + String(rdata, DEC));