Welcome to the OpenMenuOS documentation! This library provides a professional menu system for Arduino projects using TFT displays.
- 📚 Complete API Reference - Detailed API documentation
- 🚀 Getting Started - Quick setup guide
- 💡 Examples - Code examples and tutorials
- 🛠️ Hardware Setup - Wiring and hardware requirements
Install OpenMenuOS through the Arduino Library Manager:
- Open Arduino IDE
- Go to
Tools→Manage Libraries... - Search for "OpenMenuOS"
- Click
Install
#include "OpenMenuOS.h"
OpenMenuOS menu(19, -1, 2); // up, down, select pins
MenuScreen mainMenu("Main Menu");
void setup() {
mainMenu.addItem("Settings", nullptr, showSettings);
menu.begin(&mainMenu);
}
void loop() {
menu.loop();
}
void showSettings() {
PopupManager::showInfo("Settings would open here", "Settings");
}- Multi-level menus with unlimited depth
- Responsive design for any display size
- Customizable themes and styling
- Smooth animations and transitions
- 5 popup types: Info, Success, Warning, Error, Question
- Auto-close functionality
- Encoder and button support
- Visual feedback and animations
- Boolean, Range, Option, and Subscreen settings
- Automatic EEPROM/Preferences storage
- Real-time value updates
- Animated controls
- Button support with debouncing
- Rotary encoder with interrupts
- Configurable pin assignments
- Long-press detection
- ESP32 or ESP8266 microcontroller
- TFT display supported by TFT_eSPI
- 3 GPIO pins for buttons (optional encoder)
ESP32/ESP8266 TFT Display
GND ←→ GND
3.3V ←→ VCC
GPIO_X ←→ CS
GPIO_Y ←→ DC
GPIO_Z ←→ MOSI
...etc (see TFT_eSPI docs)
Buttons:
GPIO_19 ←→ UP button
GPIO_2 ←→ SELECT button
Encoder (optional):
GPIO_5 ←→ CLK
GPIO_2 ←→ DT
GPIO_19 ←→ SW (button)
MenuScreen mainMenu("Device");
mainMenu.addItem("LED Control", nullptr, toggleLED);
mainMenu.addItem("Settings", &settingsScreen);// Success notification (auto-closes)
PopupManager::showSuccess("Data saved successfully!");
// Question dialog
PopupResult result = PopupManager::showQuestion("Delete all data?", "Confirm");
if (result == PopupResult::OK) {
// User confirmed
}SettingsScreen settings("Device Settings");
settings.addBooleanSetting("WiFi", true);
settings.addRangeSetting("Brightness", 0, 100, 75, "%");
const char* modes[] = {"Auto", "Manual", "Off"};
settings.addOptionSetting("Mode", modes, 3, 0);CustomScreen aboutScreen("About");
aboutScreen.customDraw = []() {
canvas.fillScreen(TFT_BLACK);
canvas.setTextColor(TFT_WHITE);
canvas.drawString("Custom Content", 10, 50);
canvas.fillCircle(100, 100, 20, TFT_BLUE);
};menu.setOptimizeDisplayUpdates(true); // Enable frame comparison
menu.setAnimation(false); // Disable for better performancemenu.useStylePreset("Rabbit_R1"); // Built-in theme
menu.setSelectionBorderColor(TFT_CYAN); // Custom colors
menu.setScrollbar(true); // Enable scrollbarmenu.setEncoderPin(5, 2); // Enable encoder support
menu.setButtonsMode("High"); // Button logic level- 📖 Documentation: Complete API reference in api.md
- 🐛 Issues: Report bugs on GitHub Issues
- 💡 Feature Requests: Suggest improvements on GitHub
- ⭐ Star the repository if you find it useful!
MIT License - free for personal and commercial use.
OpenMenuOS v3.1.0 - Professional Menu System for Arduino
Created by The Young Maker