123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- #include "PCA9554.h"
- PCA9554::PCA9554(byte SlaveAddress)
- {
- _SlaveAddress = SlaveAddress;
- }
- bool PCA9554::twiRead(byte ®isterAddress)
- {
- Wire.beginTransmission(_SlaveAddress);
- Wire.write(registerAddress);
- if (Wire.endTransmission() == 0)
- {
- delay(15);
- Wire.requestFrom((uint8_t)_SlaveAddress, (uint8_t)1);
- while (Wire.available() < 1);
- registerAddress = Wire.read();
- return true;
- }
- return false;
- }
- bool PCA9554::twiWrite(byte registerAddress, byte dataWrite)
- {
- Wire.beginTransmission(_SlaveAddress);
- Wire.write(registerAddress);
- Wire.write(dataWrite);
- if (Wire.endTransmission() == 0)
- return true;
- return false;
- }
- bool PCA9554::pinMode0(byte pinNumber, bool state)
- {
- byte oldValue = CONFIGPORT0;
- if (this->twiRead(oldValue) && (pinNumber <= 7))
- {
- if (!state)
- {
- oldValue |= (1 << pinNumber);
- if (this->portMode0(oldValue))
- return true;
- return false;
- }
- else if (state)
- {
- oldValue &= ~(1 << pinNumber);
- if (this->portMode0(oldValue))
- return true;
- return false;
- }
- }
- return false;
- }
- /* bool PCA9554::pinMode1(byte pinNumber, bool state)
- {
- byte oldValue = CONFIGPORT1;
- if(this->twiRead(oldValue) && (pinNumber <= 7))
- {
- if(!state)
- {
- oldValue |= (1 << pinNumber);
- if(this->portMode1(oldValue))
- return true;
- return false;
- }
- else if(state)
- {
- oldValue &= ~(1 << pinNumber);
- if(this->portMode1(oldValue))
- return true;
- return false;
- }
- }
- return false;
- } */
- bool PCA9554::portMode0(byte value)
- {
- if (this->twiWrite(CONFIGPORT0, value))
- return true;
- return false;
- }
- /* bool PCA9554::portMode1(byte value)
- {
- if(this->twiWrite(CONFIGPORT1, value))
- return true;
- return false;
- } */
- bool PCA9554::digitalWrite0(byte pinNumber, bool state)
- {
- byte oldValue = OUTPUTPORT0;
- if (this->twiRead(oldValue) && pinNumber <= 7)
- {
- if (state)
- {
- oldValue |= (1 << pinNumber);
- if (this->digitalWritePort0(oldValue))
- return true;
- return false;
- }
- else if (!state)
- {
- oldValue &= ~(1 << pinNumber);
- if (this->digitalWritePort0(oldValue))
- return true;
- return false;
- }
- }
- return false;
- }
- /* bool PCA9554::digitalWrite1(byte pinNumber, bool state)
- {
- byte oldValue = OUTPUTPORT1;
- if(this->twiRead(oldValue) && pinNumber <= 7)
- {
- if(state)
- {
- oldValue |= (1 << pinNumber);
- if(this->digitalWritePort1(oldValue))
- return true;
- return false;
- }
- else if(!state)
- {
- oldValue &= ~(1 << pinNumber);
- if(this->digitalWritePort1(oldValue))
- return true;
- return false;
- }
- }
- return false;
- } */
- bool PCA9554::digitalWritePort0(byte value)
- {
- if (this->twiWrite(OUTPUTPORT0, value))
- return true;
- return false;
- }
- /* bool PCA9554::digitalWritePort1(byte value)
- {
- if(this->twiWrite(OUTPUTPORT1, value))
- return true;
- return false;
- } */
- bool PCA9554::digitalRead0(byte &pinNumber)
- {
- byte oldValue = INPUTPORT0;
- if (this->twiRead(oldValue) && (pinNumber <= 7))
- {
- oldValue &= (1 << pinNumber);
- if (oldValue > 0) pinNumber = 1;
- else pinNumber = 0;
- return true;
- }
- return false;
- }
- /* bool PCA9554::digitalRead1(byte &pinNumber)
- {
- byte oldValue = INPUTPORT1;
- if(this->twiRead(oldValue) && (pinNumber <= 7))
- {
- oldValue &= (1 << pinNumber);
- if(oldValue > 0) pinNumber = 1;
- else pinNumber = 0;
- return true;
- }
- return false;
- }
- */
- bool PCA9554::digitalReadPort0(byte &value)
- {
- value = INPUTPORT0;
- if (this->twiRead(value))
- return true;
- return false;
- }
- /* bool PCA9554::digitalReadPort1(byte &value)
- {
- value = INPUTPORT1;
- if(this->twiRead(value))
- return true;
- return false;
- }
- */
|