Remarks

Pcf8575
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.IOExpanders.Pcx857x

Code Example

private Pcf8575 device;

public override Task Initialize()
{
    device = new Pcf8575(Device.CreateI2cBus(1), 0x20, Device.Pins.D01);

    return base.Initialize();
}

public override Task Run()
{
    TestDigitalOutputPorts(10);

    return Task.CompletedTask;
}

private void TestDigitalOutputPorts(int loopCount)
{
    var out00 = device.CreateDigitalOutputPort(device.Pins.P00);
    var out01 = device.CreateDigitalOutputPort(device.Pins.P01);
    var out02 = device.CreateDigitalOutputPort(device.Pins.P02);
    var out03 = device.CreateDigitalOutputPort(device.Pins.P03);
    var out04 = device.CreateDigitalOutputPort(device.Pins.P04);
    var out05 = device.CreateDigitalOutputPort(device.Pins.P05);
    var out06 = device.CreateDigitalOutputPort(device.Pins.P06);
    var out07 = device.CreateDigitalOutputPort(device.Pins.P07);

    var out10 = device.CreateDigitalOutputPort(device.Pins.P10);
    var out11 = device.CreateDigitalOutputPort(device.Pins.P11);
    var out12 = device.CreateDigitalOutputPort(device.Pins.P12);
    var out13 = device.CreateDigitalOutputPort(device.Pins.P13);
    var out14 = device.CreateDigitalOutputPort(device.Pins.P14);
    var out15 = device.CreateDigitalOutputPort(device.Pins.P15);
    var out16 = device.CreateDigitalOutputPort(device.Pins.P16);
    var out17 = device.CreateDigitalOutputPort(device.Pins.P17);

    var outputPorts = new List<IDigitalOutputPort>()
    {
        out00, out01, out02, out03,
        out04, out05, out06, out07,
        out10, out11, out12, out13,
        out14, out15, out16, out17
    };

    foreach (var outputPort in outputPorts)
    {
        outputPort.State = true;

        Thread.Sleep(1000);
    }

    for (int l = 0; l < loopCount; l++)
    {
        // loop through all the outputs
        for (int i = 0; i < outputPorts.Count; i++)
        {
            // turn them all off
            device.AllOff();

            Thread.Sleep(1000);

            // turn them all on
            device.AllOn();
            Thread.Sleep(1000);

            // turn on just one
            Resolver.Log.Info($"Update pin {i} to {true}");
            outputPorts[i].State = true;
            Thread.Sleep(250);

            // turn off just one
            Resolver.Log.Info($"Update pin {i} to {false}");
            outputPorts[i].State = false;
            Thread.Sleep(250);
        }
    }

    // cleanup
    for (int i = 0; i < outputPorts.Count; i++)
    {
        outputPorts[i].Dispose();
    }
}

Sample project(s) available on GitHub

Characteristic Locus
Inheritance object Pcx857x Pcx8575 > Pcf8575
Implements IDigitalOutputController IDigitalInputController IDigitalInterruptController IPinController II2cPeripheral IDisposable
Inherited Members Pcx8575.Pins Pcx8575.NumberOfPins Pcx8575.IsValidPin(IPin) Pcx8575.GetPin(string) Pcx8575.SetPinDirection(bool, byte) Pcx8575.GetPinState(IPin) Pcx8575.SetPinState(IPin, bool) Pcx8575.ReadState() Pcx8575.WriteState(ushort) Pcx8575.SetState(ushort) Pcx857x.GetAddressFromPins(bool, bool, bool, bool) Pcx857x.DefaultI2cAddress Pcx857x.IsDisposed Pcx857x.createdPorts Pcx857x.i2cComms Pcx857x.CreateDigitalOutputPort(IPin, bool, OutputType) Pcx857x.CreateDigitalInputPort(IPin, ResistorMode) Pcx857x.CreateDigitalInterruptPort(IPin, InterruptMode, ResistorMode) Pcx857x.CreateDigitalInterruptPort(IPin, InterruptMode, ResistorMode, TimeSpan) Pcx857x.CreateDigitalInterruptPort(IPin, InterruptMode, ResistorMode, TimeSpan, TimeSpan) Pcx857x.AllOff() Pcx857x.AllOn() Pcx857x.Dispose(bool) Pcx857x.Dispose() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString()
Namespace Meadow.Foundation.ICs.IOExpanders
Assembly Pcx857x.dll

Syntax

public class Pcf8575 : Pcx8575, IDigitalOutputController, IDigitalInputController, IDigitalInterruptController, IPinController, II2cPeripheral, IDisposable

Constructors

Pcf8575(II2cBus, byte, IDigitalInterruptPort?)

Initializes a new instance of the Pcf8575 device

Declaration
public Pcf8575(II2cBus i2cBus, byte address, IDigitalInterruptPort? interruptPort = null)

Parameters

Type Name Description
II2cBus i2cBus

The I2C bus the peripheral is connected to

byte address

The I2C bus address of the peripheral

IDigitalInterruptPort interruptPort

The interrupt port

Remarks

Pcf8575
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.IOExpanders.Pcx857x

Code Example

private Pcf8575 device;

public override Task Initialize()
{
    device = new Pcf8575(Device.CreateI2cBus(1), 0x20, Device.Pins.D01);

    return base.Initialize();
}

public override Task Run()
{
    TestDigitalOutputPorts(10);

    return Task.CompletedTask;
}

private void TestDigitalOutputPorts(int loopCount)
{
    var out00 = device.CreateDigitalOutputPort(device.Pins.P00);
    var out01 = device.CreateDigitalOutputPort(device.Pins.P01);
    var out02 = device.CreateDigitalOutputPort(device.Pins.P02);
    var out03 = device.CreateDigitalOutputPort(device.Pins.P03);
    var out04 = device.CreateDigitalOutputPort(device.Pins.P04);
    var out05 = device.CreateDigitalOutputPort(device.Pins.P05);
    var out06 = device.CreateDigitalOutputPort(device.Pins.P06);
    var out07 = device.CreateDigitalOutputPort(device.Pins.P07);

    var out10 = device.CreateDigitalOutputPort(device.Pins.P10);
    var out11 = device.CreateDigitalOutputPort(device.Pins.P11);
    var out12 = device.CreateDigitalOutputPort(device.Pins.P12);
    var out13 = device.CreateDigitalOutputPort(device.Pins.P13);
    var out14 = device.CreateDigitalOutputPort(device.Pins.P14);
    var out15 = device.CreateDigitalOutputPort(device.Pins.P15);
    var out16 = device.CreateDigitalOutputPort(device.Pins.P16);
    var out17 = device.CreateDigitalOutputPort(device.Pins.P17);

    var outputPorts = new List<IDigitalOutputPort>()
    {
        out00, out01, out02, out03,
        out04, out05, out06, out07,
        out10, out11, out12, out13,
        out14, out15, out16, out17
    };

    foreach (var outputPort in outputPorts)
    {
        outputPort.State = true;

        Thread.Sleep(1000);
    }

    for (int l = 0; l < loopCount; l++)
    {
        // loop through all the outputs
        for (int i = 0; i < outputPorts.Count; i++)
        {
            // turn them all off
            device.AllOff();

            Thread.Sleep(1000);

            // turn them all on
            device.AllOn();
            Thread.Sleep(1000);

            // turn on just one
            Resolver.Log.Info($"Update pin {i} to {true}");
            outputPorts[i].State = true;
            Thread.Sleep(250);

            // turn off just one
            Resolver.Log.Info($"Update pin {i} to {false}");
            outputPorts[i].State = false;
            Thread.Sleep(250);
        }
    }

    // cleanup
    for (int i = 0; i < outputPorts.Count; i++)
    {
        outputPorts[i].Dispose();
    }
}

Sample project(s) available on GitHub

Pcf8575(II2cBus, byte, IPin?)

Initializes a new instance of the Pcf8575 device

Declaration
public Pcf8575(II2cBus i2cBus, byte address, IPin? interruptPin)

Parameters

Type Name Description
II2cBus i2cBus

The I2C bus the peripheral is connected to

byte address

The I2C bus address of the peripheral

IPin interruptPin

The interrupt pin

Remarks

Pcf8575
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.IOExpanders.Pcx857x

Code Example

private Pcf8575 device;

public override Task Initialize()
{
    device = new Pcf8575(Device.CreateI2cBus(1), 0x20, Device.Pins.D01);

    return base.Initialize();
}

public override Task Run()
{
    TestDigitalOutputPorts(10);

    return Task.CompletedTask;
}

private void TestDigitalOutputPorts(int loopCount)
{
    var out00 = device.CreateDigitalOutputPort(device.Pins.P00);
    var out01 = device.CreateDigitalOutputPort(device.Pins.P01);
    var out02 = device.CreateDigitalOutputPort(device.Pins.P02);
    var out03 = device.CreateDigitalOutputPort(device.Pins.P03);
    var out04 = device.CreateDigitalOutputPort(device.Pins.P04);
    var out05 = device.CreateDigitalOutputPort(device.Pins.P05);
    var out06 = device.CreateDigitalOutputPort(device.Pins.P06);
    var out07 = device.CreateDigitalOutputPort(device.Pins.P07);

    var out10 = device.CreateDigitalOutputPort(device.Pins.P10);
    var out11 = device.CreateDigitalOutputPort(device.Pins.P11);
    var out12 = device.CreateDigitalOutputPort(device.Pins.P12);
    var out13 = device.CreateDigitalOutputPort(device.Pins.P13);
    var out14 = device.CreateDigitalOutputPort(device.Pins.P14);
    var out15 = device.CreateDigitalOutputPort(device.Pins.P15);
    var out16 = device.CreateDigitalOutputPort(device.Pins.P16);
    var out17 = device.CreateDigitalOutputPort(device.Pins.P17);

    var outputPorts = new List<IDigitalOutputPort>()
    {
        out00, out01, out02, out03,
        out04, out05, out06, out07,
        out10, out11, out12, out13,
        out14, out15, out16, out17
    };

    foreach (var outputPort in outputPorts)
    {
        outputPort.State = true;

        Thread.Sleep(1000);
    }

    for (int l = 0; l < loopCount; l++)
    {
        // loop through all the outputs
        for (int i = 0; i < outputPorts.Count; i++)
        {
            // turn them all off
            device.AllOff();

            Thread.Sleep(1000);

            // turn them all on
            device.AllOn();
            Thread.Sleep(1000);

            // turn on just one
            Resolver.Log.Info($"Update pin {i} to {true}");
            outputPorts[i].State = true;
            Thread.Sleep(250);

            // turn off just one
            Resolver.Log.Info($"Update pin {i} to {false}");
            outputPorts[i].State = false;
            Thread.Sleep(250);
        }
    }

    // cleanup
    for (int i = 0; i < outputPorts.Count; i++)
    {
        outputPorts[i].Dispose();
    }
}

Sample project(s) available on GitHub