TcMenu plugins are extensions that allow the menu library to work with commonly available displays, input devices and remote control capabilities.
STM32/mbed LTDC Frame buffer menu touch driver
STM32 LTDC Frame buffer touch screen support It is possible to generate an impressive menu application using LTDC via the BSP functions. It has been tested to work fully with mbed on a STM32F429 Disc1 with ILI9341 and touch, but also should work with STM32duino and other screens given the right parameters and setup. IMPORTANT NOTE: It should be noted that using this plugin outside the already tested case of mbed, discovery F429 board would be for advanced users only, and may involve a lot of configuration and setup.
Touch screen menu calibration
There are several touch plugins in TcMenu and they all have support for controlling calibration and orientation. The calibration UI is presently at preview quality although works for many cases. Below is an image showing the common options to most touch plugins. Calibration and Orientation options Touch screen calibration The touch screen calibration option provides a very simple UI and calibration load and save feature that works with all IoAbstraction based touch screens.
Using SSD1306 to generate a Uno / low memory multi level OLED menu
It is possible to build multi level menus with an OLED display on an Arduino Uno or other low memory board provided you use SSD1306Ascii instead of the U8G2 library, as it uses a lot less memory at the cost of some flexibility. We’ve tested it with regular I2C SH1106 OLED display units and it works absolutely fine. To use this library, you create the variable globally in your sketch, and then reference it in the code generator properties, the code generator will not create the display object for this type of display.
Embedded Java OpenJFX screen rendering for Raspberry PI
Embedded Java for Raspberry PI can present the menu using OpenJFX. Below we provide an overview of the components involved in rendering with this plugin. High level diagram of OpenJFX rendering
XPT2046 / FT6206 touch screen input plugin
This touch screen input plugin supports both XPT2046 and FT6206 based touch screens. In order for this plugin to work correctly the right underlying library must be installed. These are described below: XPT2046 Paul Stoffregen XPT2046 library, best installed from library manager. FT6206 Adafruit_FT6206 library, best installed from library manager When using this touch plugin, the concept of touching and holding touches is handled by the unit itself, even managing “repeat key” is handled by the library, based on which mode it is in.
TcMenu - Touch pad sensor input plugin
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.
TcMenu - Resistive touch screen input plugin
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. When using this touch unit, the concept of touching and holding touches is handled by the unit itself, even managing “repeat key” is handled by the library, based on which mode it is in.
TcMenu - Using Adafruit_GFX mbed to render menus
In this guide we show how to use the Adafruit_GFX library for mbed RTOS to renderer menu items with tcMenu. This rendering driver for Adafruit_GFX is built into the core menu designer download, meaning it’s available out of the box when MBED_RTOS is selected. We maintain a fork of Adafruit_GFX library for mbed that currently supports OLED displays only. Therefore, at the moment all options are memory buffered. Before proceeding, you’ll need to make sure you’ve installed the Adafruit_GFX for mbed library and the library; which also contains the OLED drivers.
TcMenu - Using U8G2 to render menus onto an OLED
In this guide we show how to use the U8G2 library to renderer menu items to an OLED unit with tcMenu. This rendering driver for U8G2 is built into the core menu designer download, meaning it’s available out of the box. The U8G2 library supports a lot of different displays, with very different capabilities. This plugin concentrates on monochrome displays, mainly OLED that are supported by this library. It’s worth reading this guide fully so that you understand how we manage the various capabilities.
TcMenu - DfRobot input and display plugin
DfRobot input and display plugin make generating a menu for DfRobot shields very simple. There’s no configuration needed in order to produce a menu. This plugin auto configures the display to use LiquidCrystalIO library and sets up switches to use the micro-switches connected to analog input A0. Setting up for your menu First, ensure your menu structure is saved and then choose Code -> Generate Code from the menu. Once the code generation dialog appears, to the right of the current input type will be a button named “Change”.
TcMenu - Rotary encoder and switch input plugin
TcMenu base input plugin supports Rotary Encoders that are either connected directly to Arduino pins or via an I2C expander such as a PCF8574 or MCP23017. This support is provided by the IoAbstraction library that’s automatically included by the menu designer UI. The only limitation for rotary encoders is that PinA must be connected to an interrupt capable pin (or if connected to an i2c device that must be connected to an interrupt capable pin).
TcMenu - Rendering menus to LCD using LiquidCrystalIO library
In this guide we show how to render menu items using LiquidCrystalIO library, onto displays compatible with HD44780 (often referred to as LCD). This rendering driver is built into the core menu designer download, meaning it’s available out of the box. The LiquidCrystalIO library is a fork of the LiquidCrystal library, with a few additional capabilities. Most importantly, updating HD44780 displays is slow, think 270Khz slow. This library avoids long pauses by using task manager for managing these delays, so is uniquely able to keep your tasks running.
TcMenu - Using Adafruit_GFX to render menus
In this guide we show how to use the Adafruit_GFX library to renderer menu items with tcMenu. This rendering driver for Adafruit_GFX is built into the core menu designer download, meaning it’s available out of the box. The Adafruit_GFX library supports a lot of different displays, with very different capabilities. Some are monochrome with an in-memory buffer; whereas others are high resolution colour displays that are not buffered in memory. In order to make our renderer as generic as possible it supports both of these capabilities through configuration.
TcMenu - Using TFT_eSPI library to render menus
In this guide we show how to use the TFT_eSPI library to renderer menu items with tcMenu. This rendering driver for TFT_eSPI library is built into the core menu designer download, meaning it’s available right out of the box. This plugin simply wraps the functionality that the library provides. The TFT_eSPI menu plugin supports a lot of different displays, that cover a range of resolutions. However, we have mainly tested with both a ILI9341 and ST7735 based TFT, but it should work with other supported displays.
Changes in graphics configurations for renderers
Like any library, we occasionally need to make changes to the way that things work, this makes the library more viable going forward, and often provides major improvements in what’s possible for nearly everyone. However, sometimes we need to deprecate features so that it reduces the support burden, we do this as infrequently as possible, and try and give users long enough to move to the new version. Here we do not define all changes, just things that have changed in the library code by major version.