PCA9555

Dependents:   Telliskivi2_2014 PowerManagementBoard_Rev_A_2017

Committer:
Reiko
Date:
Sat Sep 14 17:19:41 2013 +0000
Revision:
3:bcda053645e2
Parent:
2:fae93e0841f6
Child:
5:73884f49ed97
Changed i2c frequency to 400kHz

Who changed what in which revision?

UserRevisionLine numberNew 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 2:fae93e0841f6 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 2:fae93e0841f6 36 _i2c.write(_address, foo, 3);*/
Reiko 2:fae93e0841f6 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 2:fae93e0841f6 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 1:a6699cd826bb 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 1:a6699cd826bb 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 1:a6699cd826bb 58 write(currentWriteState);
Reiko 2:fae93e0841f6 59 }
Reiko 2:fae93e0841f6 60
Reiko 2:fae93e0841f6 61 bool PCA9555::getPin(unsigned int pinNumber) {
Reiko 2:fae93e0841f6 62 //return ballState;
Reiko 2:fae93e0841f6 63 return (read() & ((unsigned int)1 << pinNumber)) > 0;
Reiko 2:fae93e0841f6 64 }
Reiko 2:fae93e0841f6 65
Reiko 2:fae93e0841f6 66 void PCA9555::change(void (*function)(void)) {
Reiko 2:fae93e0841f6 67 _callbackChange.attach(function);
Reiko 2:fae93e0841f6 68 }
Reiko 2:fae93e0841f6 69 /*
Reiko 2:fae93e0841f6 70 template<typename T>
Reiko 2:fae93e0841f6 71 void PCA9555::change(T *object, void (T::*member)(void)) {
Reiko 2:fae93e0841f6 72 _callbackChange.attach(object, member);
Reiko 2:fae93e0841f6 73 }
Reiko 2:fae93e0841f6 74 */
Reiko 2:fae93e0841f6 75 void PCA9555::callChange(void) {
Reiko 2:fae93e0841f6 76 _callbackChange.call();
Reiko 0:011622696878 77 }