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.
Using a matrix keyboard with TcMenu is straightforward, we use the IoAbstraction Keyboard Manager component to handle the keyboard, along with a custom listener for tcMenu that feeds the menu manager with appropriate events upon key presses. This library allows you to connect your keyboard either using Arduino pin, or any supported IoAbstraction such as the I2C PCF8574 or MCP23017. Setting up the menu sketch for a Matrix Keyboard Step 1 is to wire up your keyboard in accordance with the above linked keyboard manager page, I recommend at this point testing it through the packaged IoAbstraction example.
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.
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.
Examples of this theme Information about themes in general. Below we show two examples of this theme, one running modern in dark mode, and one running modern in traditional mode. TFT screen using modern dark mode TFT screen using modern cool blue TcMenu ships with four color themes, a cool blue theme and a dark mode theme revolving around black and dark grey. Each color scheme has a traditional mode aimed at smaller resolutions, and a modern theme designed for larger fonts, with more spacing between elements.
Examples of this theme Information about themes in general. Below we show three examples of this theme, first you see an inverse title example, but with sliders turned on, we don’t do this by default as it comes with some issues, but some may like it. Second, we show inverse video on a dual color OLED, and lastly, we show the bordered theme. oled menu using border theme plugin Two color oled inverse theme plugin oled menu using inverse title theme plugin TcMenu ships with two monochrome themes, one that uses borders for the title and avoids the use of inverse video to a large extent, and one where the title and selection use inverse video.
From tcMenu 2.1 onwards the designer download also has a CLI available. This CLI can be used to completely round trip menus for those with a UI dislike, or even for small changes for the rest of us. We’ve optimized the flow so that it works really well with Visual Studio code (VS-code), but most editors would work fairly well. In the youtube video above, the later half of it demos how to use the CLI.
Requirements Requires tcMenu V2.0 or greater. Current support: ESP32 touch sensor hardware. Touch-pad sensor summary Touch-pad sensors check for button presses without an actual switch, instead the rely on a change in capacitance when the user touches an area (usually a small metal plate around the size of a finger. Given that this procedure is quite complex, it usually requires hardware support for such inputs, so it can only ever be supported when hardware allows.
Requires tcMenu V2.0 or greater. TcMenu resistive touch screen input plugin supports four wire resistive touch devices that are often fitted in front of color TFT displays. This plugin requires two ADC analog inputs, but note that all pins must be output capable. The connectors are often referred to as X+, X-, Y+ and Y-. In all cases X- and Y+ must be connected to ADC (analog input) capable pins.