PCA9555
Dependents: Telliskivi2_2014 PowerManagementBoard_Rev_A_2017
Diff: PCA9555.cpp
- Revision:
- 1:a6699cd826bb
- Parent:
- 0:011622696878
- Child:
- 2:fae93e0841f6
diff -r 011622696878 -r a6699cd826bb PCA9555.cpp --- a/PCA9555.cpp Mon Jul 29 20:36:59 2013 +0000 +++ b/PCA9555.cpp Sat Aug 31 15:57:14 2013 +0000 @@ -5,16 +5,48 @@ : _i2c(sda, scl) { _address = address; } + +void PCA9555::setDirection(int data) { + char foo[2]; + foo[0]=0x06; + foo[1]=data; + _i2c.write(_address, foo, 2); + foo[0]=0x07; + foo[1]=data>>8; + _i2c.write(_address, foo, 2); +} int PCA9555::read() { - char foo[2]; - _i2c.read(_address, foo, 2); - return (foo[1] << 8) | foo[0]; + char rx_array[2] = {0x00, 0x00}; + char tx_array[1] = {0x000}; + + tx_array[0] = 0; + + _i2c.write(_address, tx_array, 1); + + _i2c.read(_address, rx_array, 2); + return (rx_array[1] << 8) | rx_array[0]; } void PCA9555::write(int data) { - char foo[2]; - foo[0]=data; - foo[1]=data>>8; - _i2c.write(_address, foo, 2); + char foo[3]; + foo[0]=0x02; + foo[1]=data; + foo[2]=data>>8; + _i2c.write(_address, foo, 3); +} + +void PCA9555::setPin(unsigned int pinNumber) { + currentWriteState |= ((unsigned int)1 << pinNumber); + write(currentWriteState); +} + +void PCA9555::clearPin(unsigned int pinNumber) { + currentWriteState &= ~((unsigned int)1 << pinNumber); + write(currentWriteState); +} + +void PCA9555::togglePin(unsigned int pinNumber) { + currentWriteState ^= ((unsigned int)1 << pinNumber); + write(currentWriteState); } \ No newline at end of file