/// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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;
        }
示例#6
0
        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));
        }
示例#7
0
        internal void SetInputPin(Pcf8574Pin pin, bool isInput)
        {
            var bit = GetPinBit(pin);

            inputPins = (byte)(isInput
                ? inputPins | bit
                : inputPins & ~bit);

            connection.Write((byte)(currentStatus | inputPins));
        }
示例#8
0
        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),
                }
            });
        }
示例#9
0
        /// <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;
        }
示例#11
0
        /// <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;
        }
示例#12
0
        /// <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);
 }
示例#14
0
 /// <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));
 }
示例#15
0
 /// <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));
 }
示例#16
0
 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));
        }