/// <summary> /// Constructor /// </summary> public ButtonCatcher(PiAndBash.Driver PiAndBashDriver) { _states = new List <ButtonState>(); _states.Add(new ButtonState() { Button = ButtonType.Up, Pin = Mcp23017Pin.B1 }); _states.Add(new ButtonState() { Button = ButtonType.Down, Pin = Mcp23017Pin.B5 }); _states.Add(new ButtonState() { Button = ButtonType.Enter, Pin = Mcp23017Pin.B3 }); _states.Add(new ButtonState() { Button = ButtonType.TopSel, Pin = Mcp23017Pin.B6 }); _states.Add(new ButtonState() { Button = ButtonType.BotSel, Pin = Mcp23017Pin.B7 }); deviceConnection = PiAndBashDriver.i2cConnection; // Always for PnB foreach (ButtonState btn in _states) { deviceConnection.SetDirection(btn.Pin, Mcp23017PinDirection.Input); deviceConnection.SetResistor(btn.Pin, Mcp23017PinResistor.PullUp); } }
/// <summary> /// ctor /// </summary> public Display(PiAndBash.Driver PiAndBashDriver) { deviceConnection = PiAndBashDriver.i2cConnection; // turn on LCD backlight deviceConnection.SetDirection(Mcp23017Pin.A0, Mcp23017PinDirection.Output); SetBacklight(true); // light is on, let's write var settings = new Hd44780LcdConnectionSettings { ScreenWidth = 16, ScreenHeight = 2 }; settings.Encoding = Encoding.ASCII; configuration = Hd44780Configuration.LoadGpioConfiguration(); connection = new Hd44780LcdConnection(settings, configuration.Pins); connection.Clear(); Console.WriteLine("Display initialised"); }
public Mcp23017OutputPin(Mcp23017I2cConnection connection, Mcp23017Pin pin) { this.connection = connection; this.pin = pin; connection.SetDirection(pin, Mcp23017PinDirection.Output); connection.SetPolarity(pin, Mcp23017PinPolarity.Normal); }
public static void WaitForAllButtons() { const ConnectorPin sdaPin = ConnectorPin.P1Pin03; const ConnectorPin sclPin = ConnectorPin.P1Pin05; using (var driver = new I2cDriver(sdaPin.ToProcessor(), sclPin.ToProcessor())) { var deviceConnection = new Mcp23017I2cConnection(driver.Connect(0x20)); Console.WriteLine("Connected"); Console.WriteLine("press all 5 of the buttons"); deviceConnection.SetDirection(Mcp23017Pin.B1, Mcp23017PinDirection.Input); deviceConnection.SetDirection(Mcp23017Pin.B3, Mcp23017PinDirection.Input); deviceConnection.SetDirection(Mcp23017Pin.B5, Mcp23017PinDirection.Input); deviceConnection.SetDirection(Mcp23017Pin.B6, Mcp23017PinDirection.Input); deviceConnection.SetDirection(Mcp23017Pin.B7, Mcp23017PinDirection.Input); deviceConnection.SetResistor(Mcp23017Pin.B1, Mcp23017PinResistor.PullUp); deviceConnection.SetResistor(Mcp23017Pin.B3, Mcp23017PinResistor.PullUp); deviceConnection.SetResistor(Mcp23017Pin.B5, Mcp23017PinResistor.PullUp); deviceConnection.SetResistor(Mcp23017Pin.B6, Mcp23017PinResistor.PullUp); deviceConnection.SetResistor(Mcp23017Pin.B7, Mcp23017PinResistor.PullUp); bool[] btns = { false, false, false, false, false }; bool btnsPushed = false; while (!btnsPushed && !Console.KeyAvailable) { Thread.Sleep(100); if (!deviceConnection.GetPinStatus(Mcp23017Pin.B1)) { btns[0] = true; Console.Write("UP "); } if (!deviceConnection.GetPinStatus(Mcp23017Pin.B3)) { btns[1] = true; Console.Write("ENTER "); } if (!deviceConnection.GetPinStatus(Mcp23017Pin.B5)) { btns[2] = true; Console.Write("DOWN "); } if (!deviceConnection.GetPinStatus(Mcp23017Pin.B6)) { btns[3] = true; Console.Write("TOPSEL "); } if (!deviceConnection.GetPinStatus(Mcp23017Pin.B7)) { btns[4] = true; Console.Write("BOTSEL "); } btnsPushed = btns[0] && btns[1] && btns[2] && btns[3] && btns[4]; } } Console.WriteLine(); Console.WriteLine("All buttons pressed"); }
/// <summary> /// Initializes a new instance of the <see cref="Mcp23017OutputBinaryPin"/> 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 Mcp23017OutputBinaryPin(Mcp23017I2cConnection connection, Mcp23017Pin pin, Mcp23017PinResistor resistor = Mcp23017PinResistor.None, Mcp23017PinPolarity polarity = Mcp23017PinPolarity.Normal) { this.connection = connection; this.pin = pin; connection.SetDirection(pin, Mcp23017PinDirection.Output); connection.SetResistor(pin, resistor); connection.SetPolarity(pin, polarity); }
public Driver() { Console.WriteLine("Initialising Pi & Bash"); this.i2cDriver = new I2cDriver(sdaPin.ToProcessor(), sclPin.ToProcessor()); this.i2cConnection = new Mcp23017I2cConnection(i2cDriver.Connect(0x20)); i2cConnection.SetDirection(ledGreen, Mcp23017PinDirection.Output); i2cConnection.SetDirection(ledYellow, Mcp23017PinDirection.Output); i2cConnection.SetDirection(ledRed, Mcp23017PinDirection.Output); Console.WriteLine("LEDs initialised"); }
public static void WriteToLcd() { Console.WriteLine("writing to the lcd"); const ConnectorPin sdaPin = ConnectorPin.P1Pin03; const ConnectorPin sclPin = ConnectorPin.P1Pin05; using (var driver = new I2cDriver(sdaPin.ToProcessor(), sclPin.ToProcessor())) { var deviceConnection = new Mcp23017I2cConnection(driver.Connect(0x20)); Console.WriteLine("Connected"); // turn on LCD backlight (on/off/on) deviceConnection.SetDirection(Mcp23017Pin.A0, Mcp23017PinDirection.Output); deviceConnection.SetPinStatus(Mcp23017Pin.A0, true); Thread.Sleep(500); // wait deviceConnection.SetPinStatus(Mcp23017Pin.A0, false); Thread.Sleep(500); // wait deviceConnection.SetPinStatus(Mcp23017Pin.A0, true); } // light is on, let's write var settings = new Hd44780LcdConnectionSettings { ScreenWidth = 16, ScreenHeight = 2 }; settings.Encoding = Encoding.ASCII; using (Hd44780Configuration configuration = Hd44780Configuration.LoadGpioConfiguration()) using (var connection = new Hd44780LcdConnection(settings, configuration.Pins)) { // connection.SetCustomCharacter(1, new byte[] { 0x0, 0x0, 0x04, 0xe, 0x1f, 0x0, 0x0 }); // connection.SetCustomCharacter(2, new byte[] { 0x0, 0x0, 0x1f, 0xe, 0x04, 0x0, 0x0 }); connection.Clear(); connection.WriteLine("Pi & Bash>_"); Thread.Sleep(750); connection.WriteLine("Test"); Thread.Sleep(750); connection.WriteLine("Thank You"); Thread.Sleep(750); connection.WriteLine("more text"); Thread.Sleep(750); connection.WriteLine("and another bit"); Thread.Sleep(2000); } }
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))) }); }
static void Main(string[] args) { var sdaPin = ConnectorPin.P1Pin03.ToProcessor(); var sclPin = ConnectorPin.P1Pin05.ToProcessor(); using (var driver = new I2cDriver(sdaPin, sclPin)) { var deviceConnection = new Mcp23017I2cConnection(driver.Connect(0x20)); deviceConnection.SetDirection(Mcp23017Pin.B0, Mcp23017PinDirection.Output); while (!Console.KeyAvailable) { deviceConnection.Toogle(Mcp23017Pin.B0); Thread.Sleep(1000); } } }
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)) }); }
static void Main() { const ConnectorPin sdaPin = ConnectorPin.P1Pin03; const ConnectorPin sclPin = ConnectorPin.P1Pin05; Console.WriteLine("MCP-23017 Sample: Switch LED on B0 pin"); Console.WriteLine(); Console.WriteLine("\tSDA: {0}", sdaPin); Console.WriteLine("\tSCL: {0}", sclPin); Console.WriteLine(); using (var driver = new I2cDriver(sdaPin.ToProcessor(), sclPin.ToProcessor())) { var deviceConnection = new Mcp23017I2cConnection(driver.Connect(0x20)); deviceConnection.SetDirection(Mcp23017Pin.B0, Mcp23017PinDirection.Output); while (!Console.KeyAvailable) { deviceConnection.Toogle(Mcp23017Pin.B0); Thread.Sleep(1000); } } }
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); } }
public static Mcp23017OutputPin Out(this Mcp23017I2cConnection connection, Mcp23017Pin pin) { return(new Mcp23017OutputPin(connection, pin)); }
/// <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)); }