TcMenu supports a wide range of rendering devices, from HD44780 based units using our LiquidCrystal fork through to mono OLED’s and full colour TFT displays using the Adafruit_GFX library. In order to achieve such a wide range of displays the renderer describes things in terms of menu items, active positions, editors and dialogs. This allows each renderer to convert these concepts into something that works for its needs. You can also easily take over the display to draw your own screen at any time.
TcMenu has considerable out of the box remote connectivity on both Arduino and mbed. With support for Ethernet2 library, UipEthernet library, ESP8266 WiFi, ESP32 WiFi and Serial (including Bluetooth Serial) to name a few connectors. Please pay close attention to the following classes in the reference documentation as they are mentioned frequently here: BaseRemoteServerConnection in reference docs TcMenuRemoteService in reference docs. Please bear in mind that TcMenu is able to support a wide range of remote connectors.
Worked example: Building a timer For this example we will create a menu that has two top level menu items; a counter which counts down from the selected value, and a Boolean switch that turns on or off the countdown. It will also have a submenu with one menu item to control the notification method. So lets draw this out conceptually below menu root +- countdown, integer values 0 to 1000 seconds +- enabled, boolean YES, NO.
Measuring voltage from an analog input. Following on from the previous example ( example for driving 7 segment LED displays ). we now build on the same circuit to make a simple voltage meter. Additional requirements: Potentiometer of at least 10Kohms. In order to measure voltage, we need to use an Arduino board analog input. Usually these are marked separately as “analog in”. We are going to use a potentiometer to adjust the voltage at the analog input.
You can connect up a device using just about any arrangement of pins or expander, at the end of the day any device supported by IoAbstraction, including MultiIo (pins and IoExpander mix) can be used here. Examples showing these use cases MCP23017 LiquidCrystal example Shift register 74HC595 LiquidCrystal Back to the main page
Recently, I have made a fork of Arduino LiquidCrystal (HD44780 display driver library) that allows the library to work with the IO abstraction library, meaning you can configure a display to use Arduino pins, an i2c 8574 IO expander or shift registers by simply changing one line of code in your sketch. There are two additional examples provided with this version that show how to use the fork with both a shift register and an 8574 i2c IO expander.
On the previous page covering single digit displays, we dealt with driving one 7-segment digit. On this page we’ll use a multi-digit display and assume 4 digits. Just like single devices, multi-digit 7-segment displays have connections for A-G, DP and common, but they have a common pin for each digit, with one set of A-G and DP pins that are shared. So for a 4 digit display there will be four common pins.
LiquidCrystalIO is now also compatible with mbed boards. It supports regular mbed pins, I2C backpacks based on PCF8574 and MCP23017 based connections. You can adapt any of the Arduino examples for mbed very easily, as the API is 99% the same. Examples showing these use cases Hello Mbed I2C PCF8574 example Back to the main page
Many embedded applications need to present status and allow users to manage settings. TcMenu provides first class support for both presenting status and managing configuration/settings using menu items. It is possible to use with and without a local user interface. All menu item types can be accessed remotely, and we have a remote API, UI solutions, and connectors to commercial IoT endpoints for that. Menu item arrangement and storage Each menu item is part of a tree, if you are unfamiliar with trees, there’s a little terminology worth learning.
In this article I describe how to wire a 20x4 character display to an Arduino. I'm assuming you are using a regular 5V 8bit Arduino, if this is not the case this article will not work for you as you'll need voltage level converters. Most character based LCD displays use the same wiring, but I can't guarantee that all will be the same. If your display is the same it will look like the diagrams on this page and will have 16 pins.