PCA9555
Dependents: Telliskivi2_2014 PowerManagementBoard_Rev_A_2017
PCA9555.cpp@5:73884f49ed97, 2013-09-16 (annotated)
- Committer:
- Reiko
- Date:
- Mon Sep 16 16:09:56 2013 +0000
- Revision:
- 5:73884f49ed97
- Parent:
- 3:bcda053645e2
- Child:
- 7:3b54389686ca
Changed write method to use proper sequence of data, created separate method for writing pin changes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Reiko | 0:011622696878 | 1 | #include "PCA9555.h" |
Reiko | 0:011622696878 | 2 | |
Reiko | 2:fae93e0841f6 | 3 | PCA9555::PCA9555(PinName sda, PinName scl, PinName interrupPin, int address) |
Reiko | 2:fae93e0841f6 | 4 | : _irqpin(interrupPin), _i2c(sda, scl) { |
Reiko | 2:fae93e0841f6 | 5 | _address = address; |
Reiko | 2:fae93e0841f6 | 6 | _irqpin.rise(this, &PCA9555::callChange); |
Reiko | 2:fae93e0841f6 | 7 | _irqpin.fall(this, &PCA9555::callChange); |
Reiko | 3:bcda053645e2 | 8 | _i2c.frequency(400000); |
Reiko | 0:011622696878 | 9 | } |
Reiko | 1:a6699cd826bb | 10 | |
Reiko | 1:a6699cd826bb | 11 | void PCA9555::setDirection(int data) { |
Reiko | 1:a6699cd826bb | 12 | char foo[2]; |
Reiko | 1:a6699cd826bb | 13 | foo[0]=0x06; |
Reiko | 1:a6699cd826bb | 14 | foo[1]=data; |
Reiko | 1:a6699cd826bb | 15 | _i2c.write(_address, foo, 2); |
Reiko | 1:a6699cd826bb | 16 | foo[0]=0x07; |
Reiko | 1:a6699cd826bb | 17 | foo[1]=data>>8; |
Reiko | 1:a6699cd826bb | 18 | _i2c.write(_address, foo, 2); |
Reiko | 1:a6699cd826bb | 19 | } |
Reiko | 0:011622696878 | 20 | |
Reiko | 0:011622696878 | 21 | int PCA9555::read() { |
Reiko | 1:a6699cd826bb | 22 | char rx_array[2] = {0x00, 0x00}; |
Reiko | 2:fae93e0841f6 | 23 | char tx_array[1] = {0x00}; |
Reiko | 1:a6699cd826bb | 24 | |
Reiko | 1:a6699cd826bb | 25 | _i2c.write(_address, tx_array, 1); |
Reiko | 1:a6699cd826bb | 26 | |
Reiko | 1:a6699cd826bb | 27 | _i2c.read(_address, rx_array, 2); |
Reiko | 1:a6699cd826bb | 28 | return (rx_array[1] << 8) | rx_array[0]; |
Reiko | 0:011622696878 | 29 | } |
Reiko | 0:011622696878 | 30 | |
Reiko | 0:011622696878 | 31 | void PCA9555::write(int data) { |
Reiko | 5:73884f49ed97 | 32 | char foo[3]; |
Reiko | 1:a6699cd826bb | 33 | foo[0]=0x02; |
Reiko | 1:a6699cd826bb | 34 | foo[1]=data; |
Reiko | 1:a6699cd826bb | 35 | foo[2]=data>>8; |
Reiko | 5:73884f49ed97 | 36 | _i2c.write(_address, foo, 3); |
Reiko | 5:73884f49ed97 | 37 | /*char foo[2]; |
Reiko | 2:fae93e0841f6 | 38 | foo[0]=0x02; |
Reiko | 2:fae93e0841f6 | 39 | foo[1]=data; |
Reiko | 2:fae93e0841f6 | 40 | _i2c.write(_address, foo, 2); |
Reiko | 2:fae93e0841f6 | 41 | foo[0]=0x03; |
Reiko | 2:fae93e0841f6 | 42 | foo[1]=data>>8; |
Reiko | 5:73884f49ed97 | 43 | _i2c.write(_address, foo, 2);*/ |
Reiko | 1:a6699cd826bb | 44 | } |
Reiko | 1:a6699cd826bb | 45 | |
Reiko | 1:a6699cd826bb | 46 | void PCA9555::setPin(unsigned int pinNumber) { |
Reiko | 1:a6699cd826bb | 47 | currentWriteState |= ((unsigned int)1 << pinNumber); |
Reiko | 5:73884f49ed97 | 48 | //write(currentWriteState); |
Reiko | 1:a6699cd826bb | 49 | } |
Reiko | 1:a6699cd826bb | 50 | |
Reiko | 1:a6699cd826bb | 51 | void PCA9555::clearPin(unsigned int pinNumber) { |
Reiko | 1:a6699cd826bb | 52 | currentWriteState &= ~((unsigned int)1 << pinNumber); |
Reiko | 5:73884f49ed97 | 53 | //write(currentWriteState); |
Reiko | 1:a6699cd826bb | 54 | } |
Reiko | 1:a6699cd826bb | 55 | |
Reiko | 1:a6699cd826bb | 56 | void PCA9555::togglePin(unsigned int pinNumber) { |
Reiko | 1:a6699cd826bb | 57 | currentWriteState ^= ((unsigned int)1 << pinNumber); |
Reiko | 5:73884f49ed97 | 58 | //write(currentWriteState); |
Reiko | 5:73884f49ed97 | 59 | } |
Reiko | 5:73884f49ed97 | 60 | |
Reiko | 5:73884f49ed97 | 61 | void PCA9555::writePins() { |
Reiko | 1:a6699cd826bb | 62 | write(currentWriteState); |
Reiko | 2:fae93e0841f6 | 63 | } |
Reiko | 2:fae93e0841f6 | 64 | |
Reiko | 2:fae93e0841f6 | 65 | bool PCA9555::getPin(unsigned int pinNumber) { |
Reiko | 2:fae93e0841f6 | 66 | //return ballState; |
Reiko | 2:fae93e0841f6 | 67 | return (read() & ((unsigned int)1 << pinNumber)) > 0; |
Reiko | 2:fae93e0841f6 | 68 | } |
Reiko | 2:fae93e0841f6 | 69 | |
Reiko | 2:fae93e0841f6 | 70 | void PCA9555::change(void (*function)(void)) { |
Reiko | 2:fae93e0841f6 | 71 | _callbackChange.attach(function); |
Reiko | 2:fae93e0841f6 | 72 | } |
Reiko | 2:fae93e0841f6 | 73 | /* |
Reiko | 2:fae93e0841f6 | 74 | template<typename T> |
Reiko | 2:fae93e0841f6 | 75 | void PCA9555::change(T *object, void (T::*member)(void)) { |
Reiko | 2:fae93e0841f6 | 76 | _callbackChange.attach(object, member); |
Reiko | 2:fae93e0841f6 | 77 | } |
Reiko | 2:fae93e0841f6 | 78 | */ |
Reiko | 2:fae93e0841f6 | 79 | void PCA9555::callChange(void) { |
Reiko | 2:fae93e0841f6 | 80 | _callbackChange.call(); |
Reiko | 0:011622696878 | 81 | } |