/// <summary> /// Initializes this instance. /// </summary> /// <param name="parent">Controller to which display id conected</param> /// <param name="enableCursor">If <value>true</value> sets ON Cursor and Blink.</param> internal Lcd(Controller parent, bool enableCursor = true) { parent_ = parent; Thread.Sleep(Delay.Setup0Ns); Libmcp23s17.mcp23s17_write_reg(0x3, parent_.lcdPort_, parent_.hardwareAddr_, parent_.mcp23s17Fd_); PulseEnable(); Thread.Sleep(Delay.Setup1Ns); Libmcp23s17.mcp23s17_write_reg(0x3, parent_.lcdPort_, parent_.hardwareAddr_, parent_.mcp23s17Fd_); PulseEnable(); Thread.Sleep(Delay.Setup2Ns); Libmcp23s17.mcp23s17_write_reg(0x3, parent_.lcdPort_, parent_.hardwareAddr_, parent_.mcp23s17Fd_); PulseEnable(); Libmcp23s17.mcp23s17_write_reg(0x2, parent_.lcdPort_, parent_.hardwareAddr_, parent_.mcp23s17Fd_); PulseEnable(); currentFunctionSet_ |= Flag.FoutBitMode | Flag.TwoLine | Flag.FiveXEightDots; SendCommand(Command.FunctionSet | currentFunctionSet_); Display = false; Cursor = false; Blink = false; Clear(); EntryMode = Mode.LeftToRight; Autoscroll = false; Display = true; Backlight = true; if (enableCursor) { Cursor = true; Blink = true; } }
/// <summary> /// Opens the display to messages. /// </summary> /// <param name="interval">Interval for checking if buttons state changed</param> /// <param name="enableCursor">If <value>true</value> sets ON Cursor and Blink on Screen.</param> public Controller(double interval = 100, bool enableCursor = true) { // All PiFace Digital are connected to the same SPI bus, only need 1 fd. if ((mcp23s17Fd_ = Libmcp23s17.mcp23s17_open(bus_, chipSelect_)) < 0) { throw new OpenException("Cannot open connection to PiFace Digital"); } //Set IO config uint ioconfig = Libmcp23s17.Data.BankOff | Libmcp23s17.Data.IntMirrorOff | Libmcp23s17.Data.SeqopOff | Libmcp23s17.Data.DisslwOff | Libmcp23s17.Data.HaenOn | Libmcp23s17.Data.OdrOff | Libmcp23s17.Data.IntpolLow; Libmcp23s17.mcp23s17_write_reg(ioconfig, Libmcp23s17.Data.IoCon, hardwareAddr_, mcp23s17Fd_); // Set GPIO Port A as inputs (switches) Libmcp23s17.mcp23s17_write_reg(0xff, Libmcp23s17.Data.IoDirA, hardwareAddr_, mcp23s17Fd_); Libmcp23s17.mcp23s17_write_reg(0xff, Libmcp23s17.Data.GpPuA, hardwareAddr_, mcp23s17Fd_); // Set GPIO Port B as outputs (connected to HD44780) Libmcp23s17.mcp23s17_write_reg(0x00, Libmcp23s17.Data.IoDirB, hardwareAddr_, mcp23s17Fd_); // enable interrupts Libmcp23s17.mcp23s17_write_reg(0xFF, Libmcp23s17.Data.GpIntEnA, hardwareAddr_, mcp23s17Fd_); Screen = new Lcd(this, enableCursor); HoldMinTime = 2000; timer_ = new Timer(interval); ButtonsArray = new Button[4]; for (int i = 0; i < 4; ++i) { ButtonsArray[i] = new Button(this, i); timer_.Elapsed += ButtonsArray[i].TimerOnElapsed; } SingleButton = new Button(this, 4); timer_.Elapsed += SingleButton.TimerOnElapsed; Switch = new Switch(this, 5, 6, 7); timer_.Elapsed += Switch.TimerOnElapsed; timer_.Start(); }