/// <summary> /// Initializes a new instance of the <see cref="Pcf8574InputBinaryPin"/> class. /// </summary> /// <param name="connection">The connection.</param> /// <param name="pin">The pin.</param> public Pcf8574InputBinaryPin(Pcf8574I2cConnection connection, Pcf8574Pin pin) { this.connection = connection; this.pin = pin; connection.SetInputPin(pin, true); }
/// <summary> /// Initializes a new instance of the <see cref="Pcf8574OutputBinaryPin"/> class. /// </summary> /// <param name="connection">The connection.</param> /// <param name="pin">The pin.</param> public Pcf8574OutputBinaryPin(Pcf8574Device connection, Pcf8574Pin pin) { this.connection = connection; this.pin = pin; connection.SetInputPin(pin, false); }
internal void SetInputPin(Pcf8574Pin pin, bool isInput) { var bit = GetPinBit(pin); inputPins = (byte)(isInput ? inputPins | bit : inputPins & ~bit); }
/// <summary> /// Gets the pin status. /// </summary> /// <param name="pin">The pin.</param> /// <returns></returns> public bool GetPinStatus(Pcf8574Pin pin) { var bit = GetPinBit(pin); if ((inputPins & bit) == 0x00) throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Cannot get value of input pin {0}", pin)); var status = connection.ReadByte(); return (status & bit) != 0x00; }
internal void SetInputPin(Pcf8574Pin pin, bool isInput) { var bit = GetPinBit(pin); this.inputPins = (byte)(isInput ? this.inputPins | bit : this.inputPins & ~bit); this.connection.Write((byte)(this.currentStatus | this.inputPins)); }
internal void SetInputPin(Pcf8574Pin pin, bool isInput) { var bit = GetPinBit(pin); inputPins = (byte)(isInput ? inputPins | bit : inputPins & ~bit); connection.Write((byte)(currentStatus | inputPins)); }
private static Hd44780Configuration LoadPcf8574Configuration(IEnumerable <string> args) { var addressText = args.SkipWhile(s => !String.Equals(s, "pcf8574", StringComparison.InvariantCultureIgnoreCase)).Skip(1).DefaultIfEmpty("0x20").First(); var address = addressText.StartsWith("0x", StringComparison.InvariantCultureIgnoreCase) ? Int32.Parse(addressText.Substring(2), NumberStyles.HexNumber) : Int32.Parse(addressText); const Pcf8574Pin clockPin = Pcf8574Pin.P2; const Pcf8574Pin readWritePin = Pcf8574Pin.P1; const Pcf8574Pin registerSelectPin = Pcf8574Pin.P0; const Pcf8574Pin backlightPin = Pcf8574Pin.P3; var dataPins = new[] { Pcf8574Pin.P4, Pcf8574Pin.P5, Pcf8574Pin.P6, Pcf8574Pin.P7 }; Console.WriteLine(); Console.WriteLine("Using I2C connection over PCF8574 expander"); Console.WriteLine("\tRegister Select: {0}", registerSelectPin); Console.WriteLine("\tClock: {0}", clockPin); Console.WriteLine("\tData 1: {0}", dataPins[0]); Console.WriteLine("\tData 2: {0}", dataPins[1]); Console.WriteLine("\tData 3: {0}", dataPins[2]); Console.WriteLine("\tData 4: {0}", dataPins[3]); Console.WriteLine("\tBacklight: {0}", backlightPin); Console.WriteLine("\tRead/write: {0}", readWritePin); Console.WriteLine(); const ConnectorPin sdaPin = ConnectorPin.P1Pin03; const ConnectorPin sclPin = ConnectorPin.P1Pin05; var driver = new I2cDriver(sdaPin.ToProcessor(), sclPin.ToProcessor()) { ClockDivider = 512 }; var connection = new Pcf8574I2cConnection(driver.Connect(address)); return(new Hd44780Configuration(driver) { Pins = new Hd44780Pins( connection.Out(registerSelectPin), connection.Out(clockPin), dataPins.Select(p => (IOutputBinaryPin)connection.Out(p))) { Backlight = connection.Out(backlightPin), ReadWrite = connection.Out(readWritePin), } }); }
/// <summary> /// Gets the pin status. /// </summary> /// <param name="pin">The pin.</param> /// <returns></returns> public bool GetPinStatus(Pcf8574Pin pin) { var bit = GetPinBit(pin); if ((inputPins & bit) == 0x00) { throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Cannot get value of input pin {0}", pin)); } var status = connection.ReadByte(); return((status & bit) != 0x00); }
/// <summary> /// Sets the pin status. /// </summary> /// <param name="pin">The pin.</param> /// <param name="enabled">if set to <c>true</c>, specified pin is enabled.</param> public void SetPinStatus(Pcf8574Pin pin, bool enabled) { var bit = GetPinBit(pin); if ((inputPins & bit) != 0x00) throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Cannot set value of input pin {0}", pin)); var status = currentStatus; var newStatus = (byte)(enabled ? status | bit : status & ~bit); connection.Write((byte)(newStatus | inputPins)); currentStatus = newStatus; }
/// <summary> /// Sets the pin status. /// </summary> /// <param name="pin">The pin.</param> /// <param name="enabled">if set to <c>true</c>, specified pin is enabled.</param> public void SetPinStatus(Pcf8574Pin pin, bool enabled) { var bit = GetPinBit(pin); if ((inputPins & bit) != 0x00) { throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Cannot set value of input pin {0}", pin)); } var status = currentStatus; var newStatus = (byte)(enabled ? status | bit : status & ~bit); connection.Write((byte)(newStatus | inputPins)); currentStatus = newStatus; }
/// <summary> /// Toogles the specified pin. /// </summary> /// <param name="pin">The pin.</param> public void Toogle(Pcf8574Pin pin) { var bit = GetPinBit(pin); if ((this.inputPins & bit) != 0x00) { throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Cannot set value of input pin {0}", pin)); } var status = this.currentStatus; var bitEnabled = (status & bit) != 0x00; var newBitEnabled = !bitEnabled; var newStatus = (byte)(newBitEnabled ? status | bit : status & ~bit); this.connection.Write((byte)(newStatus | this.inputPins)); this.currentStatus = newStatus; }
/// <summary> /// Creates an input binary pin. /// </summary> /// <param name="connection">The connection.</param> /// <param name="pin">The pin.</param> /// <returns>The pin.</returns> public static Pcf8574InputBinaryPin In(this Pcf8574I2cConnection connection, Pcf8574Pin pin) { return new Pcf8574InputBinaryPin(connection, pin); }
/// <summary> /// Creates an input binary pin. /// </summary> /// <param name="connection">The connection.</param> /// <param name="pin">The pin.</param> /// <returns>The pin.</returns> public static Pcf8574InputBinaryPin In(this Pcf8574I2cConnection connection, Pcf8574Pin pin) { return(new Pcf8574InputBinaryPin(connection, pin)); }
/// <summary> /// Creates an output binary pin. /// </summary> /// <param name="connection">The connection.</param> /// <param name="pin">The pin.</param> /// <returns>The output pin.</returns> public static Pcf8574OutputBinaryPin Out(this Pcf8574Device connection, Pcf8574Pin pin) { return(new Pcf8574OutputBinaryPin(connection, pin)); }
private static byte GetPinBit(Pcf8574Pin pin) { return((byte)(int)pin); }
private static byte GetPinBit(Pcf8574Pin pin) { return (byte) (int) pin; }
internal void SetInputPin(Pcf8574Pin pin, bool isInput) { var bit = GetPinBit(pin); inputPins = (byte) (isInput ? inputPins | bit : inputPins & ~bit); }
internal void SetInputPin(Pcf8574Pin pin, bool isInput) { var bit = GetPinBit(pin); inputPins = (byte) (isInput ? inputPins | bit : inputPins & ~bit); connection.Write((byte) (currentStatus | inputPins)); }