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)))
            };
        }
Пример #2
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))
                };
        }