Abstract
Arduino Menu is an open-source Internet of Things (IoT) project. Arduino generic menu/interactivity system. Full automated or user code driven navigation system. With this system you can define menus, submenus, input fields and other iteration objects that deal with all input/output and can call user defined handler as a result of user iteration. It is built using C++. Key capabilities include: Small footprint on RAM using PROGMEM on system where it is available; Wide variety of input/output devices supported; Easy to define menus (macros). The complete source code is publicly available on GitHub under the GNU Lesser General Public License v2.1, making it a useful reference for students building an Internet of Things (IoT) mini project or final-year project.
1. Introduction
Full automated or user code driven navigation system. With this system you can define menus, submenus, input fields and other iteration objects that deal with all input/output and can call user defined handler as a result of user iteration. The user function can be operated as a single action called on click/enter or as a event driven function responding to focus In/Out or Enter/Esc events. The system is designed as a non blocking polling system, allowing concurrent task to run. Optionally the system can be operated in semi-automated mode, issuing navigation command from user code.
A successor is in active development, built on HAPI, a zero-overhead compile-time composition engine (github.com/InternetOfPins/HAPI). Menu definitions compile down to code indistinguishable from hand-written C — see it for yourself: Compiler Explorer demo.
This isn't a release. The core (OneMenu) is solid, and a drop-in compatibility layer for existing AM4 sketches is now in progress on the
2. Objective
Arduino generic menu/interactivity system
This project demonstrates how C++ can be applied to a real-world Internet of Things (IoT) problem.
3. Key Features / Modules
- Small footprint on RAM using PROGMEM on system where it is available.
- Wide variety of input/output devices supported.
- Easy to define menus (macros).
- Minimalistic user code base.
- Fields edit values hooked to existing program variables (references).
- Editing text fields with per character validation.
- Fields can edit numeric variables of any type (templates).
- Reflexive fields, showing variable changes done outside the menu system.
- Numerical field edit and range validation.
- Enumerated fields for numeric and non-numeric types
4. Technology Stack
- streamFlow https://github.com/neu-rah/streamFlow (on debug mode)
5. System Requirements
General requirements for this technology stack — check the README for exact versions.
- Arduino IDE / PlatformIO or a C++ compiler (g++)
- Target board (e.g. Arduino, ESP32) where applicable
- Git (to clone the repository)
6. Installation & Setup
git clone https://github.com/neu-rah/ArduinoMenu.git
cd ArduinoMenuFull setup instructions are in the project README.
7. Future Enhancements
Suggested extensions you can add to make this your own project.
- Add a mobile dashboard using Blynk or Firebase
- Store readings in a cloud database for history charts
- Add alerts via SMS / Telegram when thresholds are crossed
8. Viva / Review Questions
Common questions examiners ask for projects in this domain.
- Which microcontroller / board and sensors are used and why?
- How does the device send data (Wi-Fi, MQTT, HTTP, Bluetooth)?
- Where is the sensor data stored and visualised?
- How is power consumption managed?
- How would you secure the device and its communication?
9. Source Code & License
This project is developed by neu-rah and published on GitHub under the GNU Lesser General Public License v2.1. Please follow the license terms and credit the original author when you use or modify this code.
Want to build this as your internship project?
Work on an Internet of Things (IoT) project like this with mentor guidance, weekly reviews and an internship certificate from Training Trains, Erode — online or offline.
Apply for Internet of Things (IoT) Internship