public Mcp23017OutputPin(Mcp23017I2cConnection connection, Mcp23017Pin pin)
        {
            this.connection = connection;
            this.pin = pin;

            connection.SetDirection(pin, Mcp23017PinDirection.Output);
            connection.SetPolarity(pin, Mcp23017PinPolarity.Normal);
        }
Example #2
0
        public Mcp23017OutputPin(Mcp23017I2cConnection connection, Mcp23017Pin pin)
        {
            this.connection = connection;
            this.pin        = pin;

            connection.SetDirection(pin, Mcp23017PinDirection.Output);
            connection.SetPolarity(pin, Mcp23017PinPolarity.Normal);
        }
        public bool GetPinStatus(Mcp23017Pin pin)
        {
            var register = ((int)pin & 0x0100) == 0x0000 ? Register.GPIOA : Register.GPIOB;

            connection.WriteByte((byte)register);
            var status = connection.ReadByte();

            var bit = (byte)((int)pin & 0xFF);
            return (status & bit) != 0x00;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="Mcp23017InputBinaryPin"/> class.
        /// </summary>
        /// <param name="connection">The connection.</param>
        /// <param name="pin">The pin.</param>
        /// <param name="resistor">The resistor.</param>
        /// <param name="polarity">The polarity.</param>
        public Mcp23017InputBinaryPin(Mcp23017I2cConnection connection, Mcp23017Pin pin,
            Mcp23017PinResistor resistor = Mcp23017PinResistor.None,
            Mcp23017PinPolarity polarity = Mcp23017PinPolarity.Normal)
        {
            this.connection = connection;
            this.pin = pin;

            connection.SetDirection(pin, Mcp23017PinDirection.Input);
            connection.SetResistor(pin, resistor);
            connection.SetPolarity(pin, polarity);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="Mcp23017InputBinaryPin"/> class.
        /// </summary>
        /// <param name="connection">The connection.</param>
        /// <param name="pin">The pin.</param>
        /// <param name="resistor">The resistor.</param>
        /// <param name="polarity">The polarity.</param>
        public Mcp23017InputBinaryPin(Mcp23017I2cConnection connection, Mcp23017Pin pin,
                                      Mcp23017PinResistor resistor = Mcp23017PinResistor.None,
                                      Mcp23017PinPolarity polarity = Mcp23017PinPolarity.Normal)
        {
            this.connection = connection;
            this.pin        = pin;

            connection.SetDirection(pin, Mcp23017PinDirection.Input);
            connection.SetResistor(pin, resistor);
            connection.SetPolarity(pin, polarity);
        }
        /// <summary>
        /// Gets the pin status.
        /// </summary>
        /// <param name="pin">The pin.</param>
        /// <returns>The pin status.</returns>
        public bool GetPinStatus(Mcp23017Pin pin)
        {
            var register = ((int)pin & 0x0100) == 0x0000 ? Register.GPIOA : Register.GPIOB;

            connection.WriteByte((byte)register);
            var status = connection.ReadByte();

            var bit = (byte)((int)pin & 0xFF);

            return((status & bit) != 0x00);
        }
        public void SetPolarity(Mcp23017Pin pin, Mcp23017PinPolarity polarity)
        {
            var register = ((int)pin & 0x0100) == 0x0000 ? Register.IPOLA : Register.IPOLB;

            connection.WriteByte((byte)register);
            var polarities = connection.ReadByte();

            var bit = (byte)((int)pin & 0xFF);
            var newPolarities = (polarity == Mcp23017PinPolarity.Inverted)
                                    ? polarities | bit
                                    : polarities & ~bit;

            connection.Write(new[] { (byte)register, (byte)newPolarities });
        }
        public void SetPinStatus(Mcp23017Pin pin, bool enabled)
        {
            var register = ((int)pin & 0x0100) == 0x0000 ? Register.GPIOA : Register.GPIOB;

            connection.WriteByte((byte)register);
            var status = connection.ReadByte();

            var bit = (byte)((int)pin & 0xFF);
            var newStatus = enabled
                                    ? status | bit
                                    : status & ~bit;

            connection.Write((byte)register, (byte)newStatus);
        }
        public void SetDirection(Mcp23017Pin pin, Mcp23017PinDirection direction)
        {
            var register = ((int) pin & 0x0100) == 0x0000 ? Register.IODIRA : Register.IODIRB;

            connection.WriteByte((byte)register);
            var directions = connection.ReadByte();

            var bit = (byte)((int)pin & 0xFF);
            var newDirections = (direction == Mcp23017PinDirection.Input)
                                    ? directions | bit
                                    : directions & ~bit;

            connection.Write(new[] { (byte)register, (byte)newDirections });
        }
        /// <summary>
        /// Sets the polarity.
        /// </summary>
        /// <param name="pin">The pin.</param>
        /// <param name="polarity">The polarity.</param>
        public void SetPolarity(Mcp23017Pin pin, Mcp23017PinPolarity polarity)
        {
            var register = ((int)pin & 0x0100) == 0x0000 ? Register.IPOLA : Register.IPOLB;

            connection.WriteByte((byte)register);
            var polarities = connection.ReadByte();

            var bit           = (byte)((int)pin & 0xFF);
            var newPolarities = (polarity == Mcp23017PinPolarity.Inverted)
                                    ? polarities | bit
                                    : polarities & ~bit;

            connection.Write(new[] { (byte)register, (byte)newPolarities });
        }
        /// <summary>
        /// Sets the resistor.
        /// </summary>
        /// <param name="pin">The pin.</param>
        /// <param name="resistor">The resistor.</param>
        public void SetResistor(Mcp23017Pin pin, Mcp23017PinResistor resistor)
        {
            var register = ((int) pin & 0x0100) == 0x0000 ? Register.GPPUA : Register.GPPUB;

            connection.WriteByte((byte) register);
            var resistors = connection.ReadByte();

            var bit = (byte) ((int) pin & 0xFF);
            var newResistors = (resistor == Mcp23017PinResistor.PullUp)
                                   ? resistors | bit
                                   : resistors & ~bit;

            connection.Write(new[] {(byte) register, (byte) newResistors});
        }
        /// <summary>
        /// Sets the pin status.
        /// </summary>
        /// <param name="pin">The pin.</param>
        /// <param name="enabled">if set to <c>true</c>, pin is enabled.</param>
        public void SetPinStatus(Mcp23017Pin pin, bool enabled)
        {
            var register = ((int)pin & 0x0100) == 0x0000 ? Register.GPIOA : Register.GPIOB;

            connection.WriteByte((byte)register);
            var status = connection.ReadByte();

            var bit       = (byte)((int)pin & 0xFF);
            var newStatus = enabled
                                ? status | bit
                                : status & ~bit;

            connection.Write((byte)register, (byte)newStatus);
        }
        /// <summary>
        /// Sets the direction.
        /// </summary>
        /// <param name="pin">The pin.</param>
        /// <param name="direction">The direction.</param>
        public void SetDirection(Mcp23017Pin pin, Mcp23017PinDirection direction)
        {
            var register = ((int)pin & 0x0100) == 0x0000 ? Register.IODIRA : Register.IODIRB;

            connection.WriteByte((byte)register);
            var directions = connection.ReadByte();

            var bit           = (byte)((int)pin & 0xFF);
            var newDirections = (direction == Mcp23017PinDirection.Input)
                                    ? directions | bit
                                    : directions & ~bit;

            connection.Write(new[] { (byte)register, (byte)newDirections });
        }
        /// <summary>
        /// Toogles the specified pin.
        /// </summary>
        /// <param name="pin">The pin.</param>
        public void Toogle(Mcp23017Pin pin)
        {
            var register = ((int)pin & 0x0100) == 0x0000 ? Register.GPIOA : Register.GPIOB;

            connection.WriteByte((byte)register);
            var status = connection.ReadByte();

            var bit           = (byte)((int)pin & 0xFF);
            var bitEnabled    = (status & bit) != 0x00;
            var newBitEnabled = !bitEnabled;

            var newStatus = newBitEnabled
                                ? status | bit
                                : status & ~bit;

            connection.Write((byte)register, (byte)newStatus);
        }
Example #15
0
        private static Hd44780Configuration LoadMcp23017Configuration(IEnumerable <string> args)
        {
            var addressText = args.SkipWhile(s => !String.Equals(s, "mcp23017", 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 Mcp23017Pin registerSelectPin = Mcp23017Pin.B7;
            const Mcp23017Pin clockPin          = Mcp23017Pin.B5;
            var dataPins = new[]
            {
                Mcp23017Pin.B1,
                Mcp23017Pin.B2,
                Mcp23017Pin.B3,
                Mcp23017Pin.B4
            };

            Console.WriteLine();
            Console.WriteLine("Using I2C connection over MCP23017 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: VCC");
            Console.WriteLine("\tRead/write: GND");
            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 Mcp23017I2cConnection(driver.Connect(address));

            return(new Hd44780Configuration(driver)
            {
                Pins = new Hd44780Pins(
                    connection.Out(registerSelectPin),
                    connection.Out(clockPin),
                    dataPins.Select(pin => (IOutputBinaryPin)connection.Out(pin)))
            });
        }
Example #16
0
        private static Hd44780Configuration LoadI2cConfiguration()
        {
            const Mcp23017Pin registerSelectPin = Mcp23017Pin.B0;
            const Mcp23017Pin clockPin          = Mcp23017Pin.B1;
            var dataPins = new[]
            {
                Mcp23017Pin.B2,
                Mcp23017Pin.B3,
                Mcp23017Pin.B4,
                Mcp23017Pin.B5
            };

            Console.WriteLine();
            Console.WriteLine("Using I2C connection");
            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();

            const ConnectorPin sdaPin = ConnectorPin.P1Pin03;
            const ConnectorPin sclPin = ConnectorPin.P1Pin05;

            var driver = new I2cDriver(sdaPin.ToProcessor(), sclPin.ToProcessor());

            driver.ClockDivider = 2048;

            var connection = new Mcp23017I2cConnection(driver.Connect(0x20));

            return(new Hd44780Configuration(driver)
            {
                RegisterSelect = connection.Out(registerSelectPin),
                Clock = connection.Out(clockPin),
                Data = dataPins.Select(pin => connection.Out(pin))
            });
        }
Example #17
0
        public static void TurnOnGreenLed()
        {
            const ConnectorPin sdaPin = ConnectorPin.P1Pin03;
            const ConnectorPin sclPin = ConnectorPin.P1Pin05;

            const Mcp23017Pin ledGreen = Mcp23017Pin.B0;


            using (var driver = new I2cDriver(sdaPin.ToProcessor(), sclPin.ToProcessor()))
            {
                var deviceConnection = new Mcp23017I2cConnection(driver.Connect(0x20));
                Console.WriteLine("Connected");

                deviceConnection.SetDirection(ledGreen, Mcp23017PinDirection.Output);
                // green light off

                deviceConnection.SetPinStatus(ledGreen, true);

                System.Threading.Thread.Sleep(1000); // wait  a sec

                deviceConnection.SetPinStatus(ledGreen, false);
            }
        }
 /// <summary>
 /// Creates an output binary pin.
 /// </summary>
 /// <param name="connection">The connection.</param>
 /// <param name="pin">The pin.</param>
 /// <param name="resistor">The resistor.</param>
 /// <param name="polarity">The polarity.</param>
 /// <returns>The pin.</returns>
 public static Mcp23017OutputBinaryPin Out(this Mcp23017I2cConnection connection, Mcp23017Pin pin, Mcp23017PinResistor resistor = Mcp23017PinResistor.None, Mcp23017PinPolarity polarity = Mcp23017PinPolarity.Normal)
 {
     return(new Mcp23017OutputBinaryPin(connection, pin, resistor, polarity));
 }
 /// <summary>
 /// Creates an input binary pin.
 /// </summary>
 /// <param name="connection">The connection.</param>
 /// <param name="pin">The pin.</param>
 /// <param name="resistor">The resistor.</param>
 /// <param name="polarity">The polarity.</param>
 /// <returns>The pin.</returns>
 public static Mcp23017InputBinaryPin In(this Mcp23017I2cConnection connection, Mcp23017Pin pin, Mcp23017PinResistor resistor = Mcp23017PinResistor.None, Mcp23017PinPolarity polarity = Mcp23017PinPolarity.Normal)
 {
     return new Mcp23017InputBinaryPin(connection, pin, resistor, polarity);
 }
Example #20
0
 /// <summary>
 /// Creates an input binary pin.
 /// </summary>
 /// <param name="connection">The connection.</param>
 /// <param name="pin">The pin.</param>
 /// <param name="resistor">The resistor.</param>
 /// <param name="polarity">The polarity.</param>
 /// <returns>The input pin.</returns>
 public static Mcp23017InputBinaryPin In(this Mcp23017Device connection, Mcp23017Pin pin, Mcp23017PinResistor resistor = Mcp23017PinResistor.None, Mcp23017PinPolarity polarity = Mcp23017PinPolarity.Normal)
 {
     return(new Mcp23017InputBinaryPin(connection, pin, resistor, polarity));
 }
 public static Mcp23017OutputPin Out(this Mcp23017I2cConnection connection, Mcp23017Pin pin)
 {
     return new Mcp23017OutputPin(connection, pin);
 }
        public void Toogle(Mcp23017Pin pin)
        {
            var register = ((int)pin & 0x0100) == 0x0000 ? Register.GPIOA : Register.GPIOB;

            connection.WriteByte((byte)register);
            var status = connection.ReadByte();

            var bit = (byte)((int)pin & 0xFF);
            var bitEnabled = (status & bit) != 0x00;
            var newBitEnabled = !bitEnabled;

            var newStatus = newBitEnabled
                                    ? status | bit
                                    : status & ~bit;

            connection.Write((byte)register, (byte)newStatus);
        }
 public static Mcp23017OutputPin Out(this Mcp23017I2cConnection connection, Mcp23017Pin pin)
 {
     return(new Mcp23017OutputPin(connection, pin));
 }