Ejemplo n.º 1
0
            /// <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;
                }
            }
Ejemplo n.º 2
0
        /// <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();
        }