public RGBLCDShield(MCP23017 mcp23017, byte cols = 16, byte rows = 2, byte dotsize = 0) { this.mcp23017 = mcp23017; this.displayFunction = 0x0; // initialize the MCP23017 for this board mcp23017.PinMode(8, MCP23017.Direction.Output); mcp23017.PinMode(6, MCP23017.Direction.Output); mcp23017.PinMode(7, MCP23017.Direction.Output); //SetBacklight(BacklightColor.White); mcp23017.PinMode(rsPin, MCP23017.Direction.Output); mcp23017.PinMode(rwPin, MCP23017.Direction.Output); mcp23017.PinMode(enablePin, MCP23017.Direction.Output); for (int i = 0; i < dataPins.Length; i++) { mcp23017.PinMode(dataPins[i], MCP23017.Direction.Output); } for (int i = 0; i < buttonPins.Length; i++) { mcp23017.PinMode(buttonPins[i], MCP23017.Direction.Input); mcp23017.PullUp(buttonPins[i], 0x01); } Thread.Sleep(50); mcp23017.DigitalWrite(rsPin, 0x00); mcp23017.DigitalWrite(enablePin, 0x00); mcp23017.DigitalWrite(rwPin, 0x00); // put the LCD screen into 4 bit mode Write4Bits(0x03); Thread.Sleep(5); Write4Bits(0x03); Thread.Sleep(1); Write4Bits(0x03); Write4Bits(0x02); this.displayFunction = DisplayFunction.LCD_2LINE | DisplayFunction.LCD_4BITMODE | DisplayFunction.LCD_5x8DOTS; command((byte)((byte)Commands.LCD_FUNCTIONSET | (byte)this.displayFunction)); this.displayControl = DisplayControl.LCD_DISPLAYON | DisplayControl.LCD_CURSOROFF | DisplayControl.LCD_BLINKOFF; Display(); Clear(); this.displayMode = DisplayMode.LCD_ENTRYLEFT | DisplayMode.LCD_ENTRYSHIFTDECREMENT; command((byte)((byte)Commands.LCD_ENTRYMODESET | (byte)this.displayMode)); }
public RGBLCDShield(MCP23017 mcp23017, byte cols = 16, byte rows = 2, byte dotsize = 0) { this.mcp23017 = mcp23017; this.displayFunction = 0x0; // initialize the MCP23017 for this board mcp23017.PinMode(8, MCP23017.Direction.Output); mcp23017.PinMode(6, MCP23017.Direction.Output); mcp23017.PinMode(7, MCP23017.Direction.Output); //SetBacklight(BacklightColor.White); mcp23017.PinMode(rsPin, MCP23017.Direction.Output); mcp23017.PinMode(rwPin, MCP23017.Direction.Output); mcp23017.PinMode(enablePin, MCP23017.Direction.Output); for (int i = 0; i < dataPins.Length; i++) mcp23017.PinMode(dataPins[i], MCP23017.Direction.Output); for (int i = 0; i < buttonPins.Length; i++) { mcp23017.PinMode(buttonPins[i], MCP23017.Direction.Input); mcp23017.PullUp(buttonPins[i], 0x01); } Thread.Sleep(50); mcp23017.DigitalWrite(rsPin, 0x00); mcp23017.DigitalWrite(enablePin, 0x00); mcp23017.DigitalWrite(rwPin, 0x00); // put the LCD screen into 4 bit mode Write4Bits(0x03); Thread.Sleep(5); Write4Bits(0x03); Thread.Sleep(1); Write4Bits(0x03); Write4Bits(0x02); this.displayFunction = DisplayFunction.LCD_2LINE | DisplayFunction.LCD_4BITMODE | DisplayFunction.LCD_5x8DOTS; command((byte)((byte)Commands.LCD_FUNCTIONSET | (byte)this.displayFunction)); this.displayControl = DisplayControl.LCD_DISPLAYON | DisplayControl.LCD_CURSOROFF | DisplayControl.LCD_BLINKOFF; Display(); Clear(); this.displayMode = DisplayMode.LCD_ENTRYLEFT | DisplayMode.LCD_ENTRYSHIFTDECREMENT; command((byte)((byte)Commands.LCD_ENTRYMODESET | (byte)this.displayMode)); }
public Menu(MCP23017 mcp23017) { lcdBoard = new RGBLCDShield(mcp23017); }
public static void Main() { // the MCP is what allows us to talk with the RGB LCD panel mcp23017 = new MCP23017(); // and this is a class to help us chat with the LCD panel lcdBoard = new RGBLCDShield(mcp23017); // we'll follow the Adafruit example code lcdBoard.Write("Hello, world!"); lcdBoard.SetBacklight(BacklightColor.White); // get the time so that we can track # of seconds since power up DateTime time = DateTime.Now; Button currentButtons = 0; while (true) { lcdBoard.SetPosition(1, 0); // calculate the number of seconds since power on var seconds = (DateTime.Now - time).Ticks / TimeSpan.TicksPerSecond; lcdBoard.Write(seconds.ToString()); Button buttons = lcdBoard.ReadButtons(); // only update the screen if a new button is pressed if (buttons != currentButtons && buttons != 0) { lcdBoard.Clear(); lcdBoard.SetPosition(0, 0); if ((buttons & Button.Up) != 0) { lcdBoard.Write("UP "); if (buttons == Button.Up) lcdBoard.SetBacklight(BacklightColor.Red); } if ((buttons & Button.Down) != 0) { lcdBoard.Write("DOWN "); if (buttons == Button.Down) lcdBoard.SetBacklight(BacklightColor.Yellow); } if ((buttons & Button.Right) != 0) { lcdBoard.Write("RIGHT "); if (buttons == Button.Right) lcdBoard.SetBacklight(BacklightColor.Green); } if ((buttons & Button.Left) != 0) { lcdBoard.Write("LEFT "); if (buttons == Button.Left) lcdBoard.SetBacklight(BacklightColor.Teal); } if ((buttons & Button.Select) != 0) { lcdBoard.Write("SELECT "); if (buttons == Button.Select) lcdBoard.SetBacklight(BacklightColor.Violet); } currentButtons = buttons; } } }
public static void Main() { try { mcp23017 = new MCP23017();//the MCP is what allows us to talk with the RGB LCD panel. I need it in this class so I can read the button presses from the User... mMenu = new Menu(mcp23017);//Configure this one first so that errors can be written to the LCD Shield mMenu.MenuSelection = MenuSelection.PrintLabel; //Setup the interrupt port for button presses from the LCD Shield. //Here I have the Interrupt pin from the LCD Shield (configured in the MCP23017 class) going to the Netduino Digital Pin 5 btnShield = new InterruptPort(Pins.GPIO_PIN_D5, true, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeLow); // Bind the interrupt handler to the pin's interrupt event. btnShield.OnInterrupt += new NativeEventHandler(btnShield_OnInterrupt); //Configure the MUX which allows me to expand my serial ports. Here I am using digital pins 9 thru 10 to send the necessary signals to switch my MUX channels OutputPort DigitalPin9 = new OutputPort(Pins.GPIO_PIN_D9, false); //Goes to S0 OutputPort DigitalPin10 = new OutputPort(Pins.GPIO_PIN_D10, false);//Goes to S1 OutputPort DigitalPin11 = new OutputPort(Pins.GPIO_PIN_D11, false);//Goes to S2 OutputPort DigitalPin12 = new OutputPort(Pins.GPIO_PIN_D12, false);//Goes to S3 Mux = new CD74HC4067(DigitalPin9, DigitalPin10, DigitalPin11, DigitalPin12); Mux.SetPort(MuxChannel.C0); //default it to C0 which is data coming in from the Indicators Serial Port Settings = new Settings(); Settings.Increments = new double[] { .001, .01, .1, 1, 10, 100 }; Settings.IncrementSelection = 3; Settings.RetrieveSettingsFromSDCard(WORKINGDIRECTORY, "LabelFormat.txt", "Job.txt", "Operation.txt", "ShopTrakTransactionsURL.txt", "PieceWeight.txt", "NetWeightAdjustment.txt", "BackgroundColor.txt"); mMenu.SetBackLightColor(Settings.BacklightColor); // initialize the serial port for data being input via COM1 mIndicatorScannerSerialPort = new MySerialPort(SerialPorts.COM1, BaudRate.Baudrate9600, Parity.None, DataBits.Eight, StopBits.One); // initialize the serial port for data being output via COM3 mPrinterSerialPort = new MySerialPort(SerialPorts.COM3, BaudRate.Baudrate9600, Parity.None, DataBits.Eight, StopBits.One); // open the serial-ports, so we can send & receive data mIndicatorScannerSerialPort.Open(); mPrinterSerialPort.Open(); // add an event-handler for handling incoming data mIndicatorScannerSerialPort.DataReceived += new SerialDataReceivedEventHandler(IndicatorScannerSerialPort_DataReceived); //Setup the Onboard button; InterruptEdgeLevelLow only fires the event the first time that the button descends btnBoard = new InterruptPort(Pins.ONBOARD_SW1, false, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeHigh); // Create an event handler for the button btnBoard.OnInterrupt += new NativeEventHandler(btnBoard_OnInterrupt); // write your code here var webServer = new WebServer(); webServer.AddRequestFilter(new RequestFilter()); var fileAndDirectoryService = new FileAndDirectoryService(); fileAndDirectoryService.SetSDCardManager(new SDCardManager(WORKINGDIRECTORY)); webServer.SetFileAndDirectoryService(fileAndDirectoryService); /*Setting a default controller removes the ability to browse the files and folder of the root web directory*/ //webServer.RouteTable.DefaultControllerName = "Scale"; webServer.StartServer(80);//If port is not specified, then default is port 8500 webServer.SetHostName("Cart Scale"); //Display appropriate information to the user... mMenu.DisplayInformation(Settings); } catch (Exception objEx) { Debug.Print("Exception caught in Main()\r\n"); Debug.Print(objEx.Message); mMenu.DisplayError(objEx); } //We are done. The thread must sleep or else the netduino turns off... Thread.Sleep(Timeout.Infinite); }