PCA9555
Dependents: Telliskivi2_2014 PowerManagementBoard_Rev_A_2017
PCA9555.cpp
- Committer:
- Reiko
- Date:
- 2013-09-19
- Revision:
- 7:3b54389686ca
- Parent:
- 5:73884f49ed97
- Child:
- 8:8f59b7233e6c
File content as of revision 7:3b54389686ca:
#include "PCA9555.h" 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); _i2c.frequency(400000); } 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 rx_array[2] = {0x00, 0x00}; char tx_array[1] = {0x00}; _i2c.write(_address, tx_array, 1); _i2c.read(_address, rx_array, 2); lastReadState = (rx_array[1] << 8) | rx_array[0]; return lastReadState; } void PCA9555::write(int data) { char foo[3]; foo[0]=0x02; foo[1]=data; foo[2]=data>>8; _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) { 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); } void PCA9555::writePins() { write(currentWriteState); } bool PCA9555::getPin(unsigned int pinNumber) { //return ballState; return (lastReadState & ((unsigned int)1 << pinNumber)) > 0; } void PCA9555::change(void (*function)(void)) { _callbackChange.attach(function); } void PCA9555::callChange(void) { read(); _callbackChange.call(); }