PCA9555

Dependents:   Telliskivi2_2014 PowerManagementBoard_Rev_A_2017

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?

UserRevisionLine numberNew 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 }