Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
AD0ND committed Sep 24, 2017
1 parent 856dccb commit 96e144d
Show file tree
Hide file tree
Showing 3 changed files with 397 additions and 0 deletions.
152 changes: 152 additions & 0 deletions PCA9554-master/Examples/pca9554/pca9554.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
/***************************************************************************
Title: PCA9554 sketch (PCA9554) - Output Example
Created by: Mach-1 Electronics - AD0ND
For: Arduino Users Everywhere!
This file is free software; you can redistribute it and/or modify
it under the terms of either the GNU General Public License version 2
or the GNU Lesser General Public License version 2.1, both as
published by the Free Software Foundation.
***************************************************************************/

#include <PCA9554.h> // Load the PCA9554 Library
#include <Wire.h> // Load the Wire Library

PCA9554 ioCon1(0x20); // Create an object at this address
//PCA9554 ioCon1(0x21); // Additional object at next address, etc


void setup()
{
Serial.begin(9600);
Wire.begin();
ioCon1.portMode0(ALLOUTPUT); //Set the port as all output
}



void loop()
{
ioCon1.digitalWrite0(0, LOW);
ioCon1.digitalWrite0(1, LOW);
ioCon1.digitalWrite0(2, LOW);
ioCon1.digitalWrite0(3, LOW);
ioCon1.digitalWrite0(4, LOW);
ioCon1.digitalWrite0(5, LOW);
ioCon1.digitalWrite0(6, LOW);
ioCon1.digitalWrite0(7, HIGH);
delay(25);
ioCon1.digitalWrite0(0, LOW);
ioCon1.digitalWrite0(1, LOW);
ioCon1.digitalWrite0(2, LOW);
ioCon1.digitalWrite0(3, LOW);
ioCon1.digitalWrite0(4, LOW);
ioCon1.digitalWrite0(5, LOW);
ioCon1.digitalWrite0(6, HIGH);
ioCon1.digitalWrite0(7, HIGH);
delay(25);
ioCon1.digitalWrite0(0, LOW);
ioCon1.digitalWrite0(1, LOW);
ioCon1.digitalWrite0(2, LOW);
ioCon1.digitalWrite0(3, LOW);
ioCon1.digitalWrite0(4, LOW);
ioCon1.digitalWrite0(5, HIGH);
ioCon1.digitalWrite0(6, HIGH);
ioCon1.digitalWrite0(7, HIGH);
delay(25);
ioCon1.digitalWrite0(0, LOW);
ioCon1.digitalWrite0(1, LOW);
ioCon1.digitalWrite0(2, LOW);
ioCon1.digitalWrite0(3, LOW);
ioCon1.digitalWrite0(4, HIGH);
ioCon1.digitalWrite0(5, HIGH);
ioCon1.digitalWrite0(6, HIGH);
ioCon1.digitalWrite0(7, HIGH);
delay(25);
ioCon1.digitalWrite0(0, LOW);
ioCon1.digitalWrite0(1, LOW);
ioCon1.digitalWrite0(2, LOW);
ioCon1.digitalWrite0(3, HIGH);
ioCon1.digitalWrite0(4, HIGH);
ioCon1.digitalWrite0(5, HIGH);
ioCon1.digitalWrite0(6, HIGH);
ioCon1.digitalWrite0(7, HIGH);
delay(25);
ioCon1.digitalWrite0(0, LOW);
ioCon1.digitalWrite0(1, LOW);
ioCon1.digitalWrite0(2, HIGH);
ioCon1.digitalWrite0(3, HIGH);
ioCon1.digitalWrite0(4, HIGH);
ioCon1.digitalWrite0(5, HIGH);
ioCon1.digitalWrite0(6, HIGH);
ioCon1.digitalWrite0(7, LOW);
delay(25);
ioCon1.digitalWrite0(0, LOW);
ioCon1.digitalWrite0(1, HIGH);
ioCon1.digitalWrite0(2, HIGH);
ioCon1.digitalWrite0(3, HIGH);
ioCon1.digitalWrite0(4, HIGH);
ioCon1.digitalWrite0(5, HIGH);
ioCon1.digitalWrite0(6, LOW);
ioCon1.digitalWrite0(7, LOW);
delay(25);
ioCon1.digitalWrite0(0, HIGH);
ioCon1.digitalWrite0(1, HIGH);
ioCon1.digitalWrite0(2, HIGH);
ioCon1.digitalWrite0(3, HIGH);
ioCon1.digitalWrite0(4, HIGH);
ioCon1.digitalWrite0(5, LOW);
ioCon1.digitalWrite0(6, LOW);
ioCon1.digitalWrite0(7, LOW);
delay(25);
ioCon1.digitalWrite0(0, HIGH);
ioCon1.digitalWrite0(1, HIGH);
ioCon1.digitalWrite0(2, HIGH);
ioCon1.digitalWrite0(3, HIGH);
ioCon1.digitalWrite0(4, LOW);
ioCon1.digitalWrite0(5, LOW);
ioCon1.digitalWrite0(6, LOW);
ioCon1.digitalWrite0(7, LOW);
delay(25);
ioCon1.digitalWrite0(0, HIGH);
ioCon1.digitalWrite0(1, HIGH);
ioCon1.digitalWrite0(2, HIGH);
ioCon1.digitalWrite0(3, LOW);
ioCon1.digitalWrite0(4, LOW);
ioCon1.digitalWrite0(5, LOW);
ioCon1.digitalWrite0(6, LOW);
ioCon1.digitalWrite0(7, LOW);
delay(25);
ioCon1.digitalWrite0(0, HIGH);
ioCon1.digitalWrite0(1, HIGH);
ioCon1.digitalWrite0(2, LOW);
ioCon1.digitalWrite0(3, LOW);
ioCon1.digitalWrite0(4, LOW);
ioCon1.digitalWrite0(5, LOW);
ioCon1.digitalWrite0(6, LOW);
ioCon1.digitalWrite0(7, LOW);
delay(25);
ioCon1.digitalWrite0(0, HIGH);
ioCon1.digitalWrite0(1, LOW);
ioCon1.digitalWrite0(2, LOW);
ioCon1.digitalWrite0(3, LOW);
ioCon1.digitalWrite0(4, LOW);
ioCon1.digitalWrite0(5, LOW);
ioCon1.digitalWrite0(6, LOW);
ioCon1.digitalWrite0(7, LOW);
delay(25);
ioCon1.digitalWrite0(0, LOW);
ioCon1.digitalWrite0(1, LOW);
ioCon1.digitalWrite0(2, LOW);
ioCon1.digitalWrite0(3, LOW);
ioCon1.digitalWrite0(4, LOW);
ioCon1.digitalWrite0(5, LOW);
ioCon1.digitalWrite0(6, LOW);
ioCon1.digitalWrite0(7, LOW);
delay(25);
for(byte i = 0; i < 16; i++)
{
ioCon1.digitalWritePort0(~(1 << i));
delay(75);
}
}
197 changes: 197 additions & 0 deletions PCA9554-master/PCA9554.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
#include <PCA9554.h>

PCA9554::PCA9554(byte SlaveAddress)
{
_SlaveAddress = SlaveAddress;
}


bool PCA9554::twiRead(byte &registerAddress)
{
Wire.beginTransmission(_SlaveAddress);
Wire.write(registerAddress);

if(Wire.endTransmission() == 0)
{
delay(15);
Wire.requestFrom(_SlaveAddress, 1, true);
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;
}
*/
Loading

0 comments on commit 96e144d

Please sign in to comment.