PCA9555
Dependents: Telliskivi2_2014 PowerManagementBoard_Rev_A_2017
Diff: PCA9555.cpp
- Revision:
- 2:fae93e0841f6
- Parent:
- 1:a6699cd826bb
- Child:
- 3:bcda053645e2
diff -r a6699cd826bb -r fae93e0841f6 PCA9555.cpp --- a/PCA9555.cpp Sat Aug 31 15:57:14 2013 +0000 +++ b/PCA9555.cpp Mon Sep 09 17:30:51 2013 +0000 @@ -1,9 +1,12 @@ #include "PCA9555.h" -#include "mbed.h" -PCA9555::PCA9555(PinName sda, PinName scl, int address) - : _i2c(sda, scl) { - _address = address; +PCA9555::PCA9555(PinName sda, PinName scl, PinName interrupPin, int address) + : _irqpin(interrupPin), _i2c(sda, scl) { + _address = address; + _irqpin.rise(this, &PCA9555::callChange); + _irqpin.fall(this, &PCA9555::callChange); + //_irqpin.attach_asserted(this, &PCA9555::callChange); + //_irqpin.attach_deasserted(this, &PCA9555::callChange); } void PCA9555::setDirection(int data) { @@ -18,9 +21,7 @@ int PCA9555::read() { char rx_array[2] = {0x00, 0x00}; - char tx_array[1] = {0x000}; - - tx_array[0] = 0; + char tx_array[1] = {0x00}; _i2c.write(_address, tx_array, 1); @@ -29,11 +30,18 @@ } void PCA9555::write(int data) { - char foo[3]; + /*char foo[3]; foo[0]=0x02; foo[1]=data; foo[2]=data>>8; - _i2c.write(_address, foo, 3); + _i2c.write(_address, foo, 3);*/ + char foo[2]; + foo[0]=0x02; + foo[1]=data; + _i2c.write(_address, foo, 2); + foo[0]=0x03; + foo[1]=data>>8; + _i2c.write(_address, foo, 2); } void PCA9555::setPin(unsigned int pinNumber) { @@ -49,4 +57,22 @@ void PCA9555::togglePin(unsigned int pinNumber) { currentWriteState ^= ((unsigned int)1 << pinNumber); write(currentWriteState); +} + +bool PCA9555::getPin(unsigned int pinNumber) { + //return ballState; + return (read() & ((unsigned int)1 << pinNumber)) > 0; +} + +void PCA9555::change(void (*function)(void)) { + _callbackChange.attach(function); +} +/* +template<typename T> +void PCA9555::change(T *object, void (T::*member)(void)) { + _callbackChange.attach(object, member); +} +*/ +void PCA9555::callChange(void) { + _callbackChange.call(); } \ No newline at end of file