PCA9555
Dependents: Telliskivi2_2014 PowerManagementBoard_Rev_A_2017
PCA9555.cpp@1:a6699cd826bb, 2013-08-31 (annotated)
- Committer:
- Reiko
- Date:
- Sat Aug 31 15:57:14 2013 +0000
- Revision:
- 1:a6699cd826bb
- Parent:
- 0:011622696878
- Child:
- 2:fae93e0841f6
Added IO direction changing, changed read and write methods to send correct data, added methods for changing individual pins
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 | #include "mbed.h" |
Reiko | 0:011622696878 | 3 | |
Reiko | 0:011622696878 | 4 | PCA9555::PCA9555(PinName sda, PinName scl, int address) |
Reiko | 0:011622696878 | 5 | : _i2c(sda, scl) { |
Reiko | 0:011622696878 | 6 | _address = address; |
Reiko | 0:011622696878 | 7 | } |
Reiko | 1:a6699cd826bb | 8 | |
Reiko | 1:a6699cd826bb | 9 | void PCA9555::setDirection(int data) { |
Reiko | 1:a6699cd826bb | 10 | char foo[2]; |
Reiko | 1:a6699cd826bb | 11 | foo[0]=0x06; |
Reiko | 1:a6699cd826bb | 12 | foo[1]=data; |
Reiko | 1:a6699cd826bb | 13 | _i2c.write(_address, foo, 2); |
Reiko | 1:a6699cd826bb | 14 | foo[0]=0x07; |
Reiko | 1:a6699cd826bb | 15 | foo[1]=data>>8; |
Reiko | 1:a6699cd826bb | 16 | _i2c.write(_address, foo, 2); |
Reiko | 1:a6699cd826bb | 17 | } |
Reiko | 0:011622696878 | 18 | |
Reiko | 0:011622696878 | 19 | int PCA9555::read() { |
Reiko | 1:a6699cd826bb | 20 | char rx_array[2] = {0x00, 0x00}; |
Reiko | 1:a6699cd826bb | 21 | char tx_array[1] = {0x000}; |
Reiko | 1:a6699cd826bb | 22 | |
Reiko | 1:a6699cd826bb | 23 | tx_array[0] = 0; |
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 | 1:a6699cd826bb | 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 | 1:a6699cd826bb | 36 | _i2c.write(_address, foo, 3); |
Reiko | 1:a6699cd826bb | 37 | } |
Reiko | 1:a6699cd826bb | 38 | |
Reiko | 1:a6699cd826bb | 39 | void PCA9555::setPin(unsigned int pinNumber) { |
Reiko | 1:a6699cd826bb | 40 | currentWriteState |= ((unsigned int)1 << pinNumber); |
Reiko | 1:a6699cd826bb | 41 | write(currentWriteState); |
Reiko | 1:a6699cd826bb | 42 | } |
Reiko | 1:a6699cd826bb | 43 | |
Reiko | 1:a6699cd826bb | 44 | void PCA9555::clearPin(unsigned int pinNumber) { |
Reiko | 1:a6699cd826bb | 45 | currentWriteState &= ~((unsigned int)1 << pinNumber); |
Reiko | 1:a6699cd826bb | 46 | write(currentWriteState); |
Reiko | 1:a6699cd826bb | 47 | } |
Reiko | 1:a6699cd826bb | 48 | |
Reiko | 1:a6699cd826bb | 49 | void PCA9555::togglePin(unsigned int pinNumber) { |
Reiko | 1:a6699cd826bb | 50 | currentWriteState ^= ((unsigned int)1 << pinNumber); |
Reiko | 1:a6699cd826bb | 51 | write(currentWriteState); |
Reiko | 0:011622696878 | 52 | } |