Project Icon

ArduinoMenu

Arduino通用菜单和交互系统库

ArduinoMenu是一个开源的Arduino菜单库,提供自动和手动导航功能。支持创建菜单、子菜单和输入字段,处理输入输出并执行用户定义的操作。采用非阻塞设计,可与其他任务并行运行。支持多种I/O设备,内存占用小,菜单定义简单。适用于各种Arduino平台,方便开发交互式项目。

ArduinoMenu 4

Arduino框架的通用菜单/交互系统

许可证: LGPL-2.1+ 构建状态 捐赠 加入Gitter

目的

全自动或用户代码驱动的导航系统。 使用此系统,你可以定义菜单、子菜单、输入字段和其他迭代对象,它们处理所有输入/输出,并可以根据用户迭代调用用户定义的处理程序。 用户函数可以作为单一动作在点击/输入时调用,也可以作为事件驱动函数响应焦点进入/离开或输入/退出事件。 该系统设计为非阻塞轮询系统,允许并发任务运行。 可选地,系统可以在半自动模式下操作,从用户代码发出导航命令。

查看wiki

简单示例

#include <menu.h>
#include <menuIO/serialOut.h>
#include <menuIO/chainStream.h>
#include <menuIO/serialIn.h>

using namespace Menu;

#define LEDPIN LED_BUILTIN
#define MAX_DEPTH 1

unsigned int timeOn=10;
unsigned int timeOff=90;

MENU(mainMenu, "闪烁菜单", Menu::doNothing, Menu::noEvent, Menu::wrapStyle
  ,FIELD(timeOn,"开启","毫秒",0,1000,10,1, Menu::doNothing, Menu::noEvent, Menu::noStyle)
  ,FIELD(timeOff,"关闭","毫秒",0,10000,10,1,Menu::doNothing, Menu::noEvent, Menu::noStyle)
  ,EXIT("<返回")
);

serialIn serial(Serial);
MENU_INPUTS(in,&serial);

MENU_OUTPUTS(out,MAX_DEPTH
  ,SERIAL_OUT(Serial)
  ,NONE//必须至少有2个项目
);

NAVROOT(nav,mainMenu,MAX_DEPTH,in,out);

void setup() {
  pinMode(LEDPIN, OUTPUT);
  Serial.begin(115200);
  while(!Serial);
  Serial.println("菜单 4.x");
  Serial.println("使用键 + - * /");
  Serial.println("来控制菜单导航");
}

bool blink(int timeOn,int timeOff) {return millis()%(unsigned long)(timeOn+timeOff)<(unsigned long)timeOn;}

void loop() {
  nav.poll();
  digitalWrite(LEDPIN, blink(timeOn,timeOff));
}

特性

  • 在可用PROGMEM的系统上使用PROGMEM,对RAM占用小。
  • 支持多种输入/输出设备。
  • 易于定义菜单(宏)。
  • 最小化用户代码基础。
  • 字段编辑值与现有程序变量挂钩(引用)。
  • 编辑文本字段时具有每个字符的验证。
  • 字段可以编辑任何类型的数值变量(模板)。
  • 反射字段,显示在菜单系统外部进行的变量更改。
  • 数值字段编辑和范围验证。
  • 数值和非数值类型的枚举字段。
  • 可自定义(颜色和光标)。
  • 能够在基本级别上通过串行流IO工作。
  • 支持并行多个输入和输出。
  • RAM静态分配,避免堆碎片化,定义菜单结构所需的所有RAM在程序启动时分配。
  • 菜单和提示可用事件。
  • 当没有可用输入且不需要绘制时简单返回。
  • 延迟绘制,仅在更改时绘制,避免时间消耗和闪烁。
  • 同步/异步导航API函数。
  • 无状态客户端(如网页)的异步导航。
  • 网页界面(实验性)。
  • 可以限制在显示区域内(数值字段仍可能溢出区域,用户应考虑到这一点)。
  • 在Arduino AVR和ARM、Teensy、ESP8266、Esp32、nRF52、STM32上测试通过。

视频

图片替代文本 图片替代文本 图片替代文本 图片替代文本

插件

插件是特定的菜单组合或项目自定义行为和/或绘制。

某些插件可能是特定平台或需要某些硬件。

  • barField - 在LCD上显示数值字段的条形图
  • cancelField - 允许在退出时恢复之前的数值。
  • SDMenu - 完全自动化的SD卡文件选择器,使用标准Arduino SD库。
  • SdFatMenu - 完全自动化的SD卡文件选择器,使用标准SdFat (https://github.com/greiman/SdFat)。

应用

一些使用ArduinoMenu的应用/教程(当前和旧版本)。
你有其他应用吗?请在gitter上告诉我或发邮件给我。

温度传感器和定时器的Arduino脚本。 它允许根据计划开启加热器和灯光
https://github.com/vikulin/LCD_LAT

Project-GlassKilnController 用于制作"温玻璃"的电热窑炉
https://arduinoinfo.mywikis.net/wiki/Project-GlassKilnController

ArduinoMenu演示TTGO T-Display 精彩教程。
https://sites.google.com/site/jmaathuis/arduino/lilygo-ttgo-t-display-esp32/arduinomenu-demo-ttgo-t-display

mvc-interface ArduinoMenu教程
https://zaragozamakerspace.com/index.php/courses/mvc-interface/

Arduino自动铜带切割机
https://www.thingiverse.com/thing:3557719

装药粉料斗水平仪和警报
https://github.com/nathandarnell/Reloading-Powder-Hopper-Level-Gauge-and-Alarm

ServoBox 舵机测试仪和监视器
https://github.com/jarkman/ServoBox

PANOBOT 全景机器人
https://github.com/RobertFach/panobot

teensy-midi-looper 基于微控制器的midi表演音序器
https://github.com/newdigate/teensy-midi-looper

AmplifierControl 自动化开/关功放和Kenwood波段解码的程序
https://github.com/petrlab/AmplifierControl spna Arduino单端口网络分析仪 (SPNA) https://github.com/tczerwonka/spna

LRDuino 车载多功能仪表系统 - STM32, SSD1306, MAX31856, ADXL345, ELM327 https://github.com/BennehBoy/LRDuino

LRDuinoTD5 车载多功能仪表系统 - STM32, SSD1306, MAX31856, ADXL345, L9637D, TD5 ECU https://github.com/BennehBoy/LRDuinoTD5

thom-radio 互联网收音机制作 https://github.com/evfool/thom-radio

MIDI_drums 7通道压电MIDI鼓机带LCD菜单 https://github.com/Sobollion/MIDI_drums

BalancingRobot https://github.com/SLBarker/BalancingRobot

swatili 50升水表,带阀门控制、LCD、按钮、RTC和霍尔效应脉冲读取器 https://github.com/daniel-leonard-robinson/swatili

Fielduino 硬件PWM发生器,使用菜单选择频率和占空比 https://github.com/neu-rah/Fielduino

ArduinoMultiDesktop 硬件设备的多桌面概念 https://github.com/dontsovcmc/ArduinoMultiDesktop

SmartGreenHouse https://github.com/dontsovcmc/SmartGreenHouse/tree/master/src

console.arduino 使用ILI9341的便携式串行调试控制台项目 https://github.com/malachib/console.arduino

平台

Atmel AVR, Atmel SAM, Espressif 32, Espressif 8266, Intel ARC32, Microchip PIC32, Nordic nRF51, Nordic nRF52, ST STM32, Teensy, TI MSP430

安装

Arduino IDE - 使用库管理器安装(ArduinoMenu库 - Rui Azevedo)

Platformio - http://platformio.org/lib/show/1468/ArduinoMenu%20library

IO设备

输出设备

串口

https://www.arduino.cc/en/Reference/Serial

  • 串口监视器

标准Arduino LCD库

https://www.arduino.cc/en/Reference/LiquidCrystal

  • hd44780

F Malpartida的LCD库

https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home

  • HD44780直接连接
  • HD44780 I2C
  • HD44780 SPI

Matthias Hertel PCF8574驱动

https://github.com/mathertel/LiquidCrystal_PCF8574

  • HD44780

Arduino TFT设备

https://www.arduino.cc/en/Guide/TFT

SSD1306Ascii

https://github.com/greiman/SSD1306Ascii

  • 基于SSD1306控制器的OLED屏幕

TFT_eSPI

兼容Arduino IDE的ESP8266和ESP32图形和字体库 https://github.com/Bodmer/TFT_eSPI

  • ILI9341, ILI9163, ST7735, S6D02A1, ILI9481, ILI9486, ILI9488, HX8357D, ST7789, ILI9486
  • Waveshare 2色和3色SPI电子纸显示器

TFT_HX8357驱动

https://github.com/Bodmer/TFT_HX8357

  • HX8357B, HX8357C, ILI9481和ILI9486

Adafruit的GFX设备

https://github.com/adafruit/Adafruit-GFX-Library

  • RGBmatrixPanel,16x32和32x32 RGB LED矩阵面板
  • Adafruit_TFTLCD,2.8"TFT LCD触摸屏分线板和Arduino TFT触摸屏扩展板
  • Adafruit_HX8340B,2.2"TFT显示器,带microSD
  • Adafruit_ST7735,1.8"TFT显示器,带microSD
  • Adafruit_PCD8544,用于Nokia 5110/3310单色LCD
  • Adafruit-Graphic-VFD-Display-Library,用于128x64图形VFD
  • Adafruit-SSD1331-OLED-Driver-Library-for-Arduino,用于0.96"16位彩色OLED,带microSD卡座
  • Adafruit_SSD1306,用于单色128x64和128x32 OLED

UTFT设备

http://www.rinkydinkelectronics.com/library.php?id=51

  • ITDB02系列 - ITead Studio
  • TFT01系列 - ElecFreaks
  • RGB LCD - NKC Electronics

U8glib设备

https://github.com/olikraus/U8glib_Arduino

SSD1306, 128x64, SSD1306, 128x32, SSD1306, 64x48, SSD1309, 128x64, SSD1322, 256x64, SSD1325, 128x64, SSD1327, 96x96, SH1106, 128x64, UC1601, 128x32, UC1608, 240x64, UC1610, 160x104, UC1611, 240x64, UC1611, 240x128, UC1701, 128x64, UC1701, 102x64, ST7565, 128x64, ST7565, 128x32, ST7920, 128x64, ST7920, 192x32, ST7920, 202x32, LD7032, 60x32, PCD8544, 84x48, TLS8204 , 84x48, PCF8812 , 96x65, KS0108 , 128x64, T6963, 128x64, T6963, 128x128, T6963, 240x64, T6963, 240x128, SBN1661, 122x32, LC7981, 160x80, LC7981, 240x64, LC7981, 240x128, LC7981, 320x64, SSD1351, HT1632, 24x16, Flipdisk, 28x14, 虚拟屏幕设备

U8G2和U8x8设备

https://github.com/olikraus/U8g2_Arduino SSD1305 128X32无名称,SSD1305 128X32无名称,SSD1305 128X64 ADAFRUIT,SSD1305 128X64 ADAFRUIT,SSD1306 128X64无名称,SSD1306 128X64 VCOMH0,SSD1306 128X64 ALT0,SSD1306 128X64无名称,SSD1306 128X64 VCOMH0,SSD1306 128X64 ALT0,SH1106 128X64无名称,SH1106 128X64 VCOMH0,SH1106 128X64 WINSTAR,SH1106 128X64无名称,SH1106 128X64 VCOMH0,SH1106 128X64 WINSTAR,SH1106 72X40 WISE,SH1106 72X40 WISE,SH1106 64X32,SH1106 64X32,SH1107 64X128,SH1107 64X128,SH1107 SEEED 96X96,SH1107 SEEED 96X96,SH1107 128X128,SH1107 128X128,SH1122 256X64,SH1122 256X64,SSD1306 128X32 UNIVISION,SSD1306 128X32 UNIVISION,SSD1306 64X48 ER,SSD1306 64X48 ER,SSD1306 48X64 WINSTAR,SSD1306 48X64 WINSTAR,SSD1306 64X32无名称,SSD1306 64X32 1F,SSD1306 64X32无名称,SSD1306 64X32 1F,SSD1306 96X16 ER,SSD1306 96X16 ER,SSD1309 128X64无名称2,SSD1309 128X64无名称2,SSD1309 128X64无名称0,SSD1309 128X64无名称0,SSD1325 NHD 128X64,SSD1325 NHD 128X64,SSD1326 ER 256X32,SSD1326 ER 256X32,SSD1327 SEEED 96X96,SSD1327 SEEED 96X96,SSD1327 MIDAS 128X128,SSD1327 MIDAS 128X128,SSD1329 128X96无名称,LD7032 60X32,LD7032 60X32,ST7920 192X32,ST7920 192X32,ST7920 192X32,ST7920 128X64,ST7920 128X64,ST7920 128X64,LS013B7DH03 128X128,UC1701 EA DOGS102,UC1701 MINI12864,PCD8544 84X48,PCF8812 96X65,HX1230 96X68,UC1604 JLX19264,UC1604 JLX19264,UC1608 ERC24064,UC1608 ERC24064,UC1608 ERC240120,UC1608 ERC240120,UC1608 240X128,UC1608 240X128,UC1638 160X128,UC1610 EA DOGXL160,UC1610 EA DOGXL160,UC1611 EA DOGM240,UC1611 EA DOGM240,UC1611 EA DOGXL240,UC1611 EA DOGXL240,UC1611 EW50850,UC1611 EW50850,ST7565 EA DOGM128,ST7565 64128N,ST7565 ZOLEN 128X64,ST7565 LM6059,ST7565 LX12864,ST7565 ERC12864,ST7565 NHD C12864,ST7565 JLX12864,ST7565 NHD C12832,UC1601 128X32,UC1601 128X32,ST7565 EA DOGM132,ST7567 PI 132X64,ST7567 JLX12864,ST7567 ENH DG128064,ST7567 ENH DG128064I,ST7588 JLX12864,ST7588 JLX12864,ST75256 JLX256128,ST75256 JLX256128,ST75256 JLX256160,ST75256 JLX256160,ST75256 JLX240160,ST75256 JLX240160,ST75256 JLX25664,ST75256 JLX25664,ST75256 JLX172104,ST75256 JLX172104,NT7534 TG12864R,IST3020 ERC19264,SBN1661 122X32,SED1520 122X32,KS0108 128X64,KS0108 ERM19264,LC7981 160X80,LC7981 160X160,LC7981 240X128,T6963 240X128,T6963 240X64,T6963 256X64,T6963 128X64,SSD1322 NHD 256X64,SSD1322 NHD 128X64,SSD1606 172X72,SSD1607 200X200,SSD1607 GD 200X200,IL3820 296X128,IL3820 V2 296X128,SED1330 240X128,RA8835 NHD 240X128,RA8835 320X240,MAX7219 32X8,A2打印机 384X240

UCGLib设备

https://github.com/olikraus/Ucglib_Arduino

ST7735, ILI9163, ILI9325, ILI9341, ILI9486, LD50T6160, PCF8833, SEPS225, SSD1331, SSD1351, HX8352C

串行ANSI终端

https://github.com/neu-rah/AnsiStream

  • Unix终端

Grove RGB LCD I2C 2x16

https://wiki.seeedstudio.com/Grove-LCD_RGB_Backlight/

Web浏览器

  • ESP8266(内置)

Web JSON

  • ESP8266(内置)

Websockets

  • ESP8266(内置)

注意: 即使不使用Web界面,ESP8266也需要流媒体库,并且需要包含 #include <menuIO/esp8266Out.h>

根据您的输出驱动程序,可能需要以下之一(可以同时安装两者)

输入设备

串行 https://www.arduino.cc/en/Reference/Serial

四相编码器 - 使用PCINT的通用编码器(内置)

按钮 - 简单数字键盘(内置)

通用键盘(无PCINT) - 可配置用于数字或模拟键盘(内置)

模拟摇杆

ClickEncoder https://github.com/0xPIT/encoder

矩阵键盘 http://playground.arduino.cc/Code/Keypad https://github.com/Nullkraft/Keypad

基于PCF8574的I2C矩阵键盘 https://github.com/whatnick/i2ckeypad

用户定义的输入调用菜单导航API

使用ESP设备时的Web浏览器(实验性)

依赖项

该库依赖于以下库:

根据输入或输出的类型,可能需要其他库。基本上是您的设备所需的任何库。

限制

  • 使用宏时菜单选项限制为16个(当前宏限制)。
  • 使用宏构建的菜单必须至少有2个选项。
  • 最多127个选项。
  • 快速访问(数字键)仅支持9个选项(1到9)。
  • 提示可能在宽度小于4个字符的面板上溢出。
  • 菜单系统基于字符,因此选择等宽字体以获得最佳效果,但它可以与任何字体一起使用,只是文本可能会溢出。

基础

  • 基于字符的信息显示。
  • 基于行的菜单组织。
  • 流式IO + 专门化。

信息

更多信息请参阅

wiki页面、issuesr-site.net

错误/建议

请报告错误、问题或改进想法,我很感谢反馈。谢谢。

在问题报告中,请指明输入和输出驱动程序或设备以及目标平台。

注意事项

编码器现在需要在setup中调用begin()(2.x)

从通用流读取输入,包括简单的编码器和键盘流 - 提供的编码器驱动程序使用内部上拉和反向逻辑

多个流打包用于输入,以混合编码器流和编码器键盘(通常1或2个键)

历史

4.0

  • SdFat插件和示例
  • EscControl示例
  • 支持Bodmer/TFT_eSPI
  • SDCard文件选择器插件
  • 允许虚拟/动态数据自定义菜单
  • 带有显式引脚模式的替代按键驱动程序
  • 更多示例
  • 带验证的文本编辑字段 *
  • 平板风格菜单(水平列表)
  • 内联平板菜单可以输入自定义格式,如IP/日期/时间,实验性的,仅适用于可以定位光标的设备
  • 插件,可能是设备特定的替代菜单项
  • 允许多个并发菜单
  • 支持UCGLib显示器
  • 支持U8x8显示器
  • 支持Arduino TFT
  • 支持PCF8574 I2C LCD
  • 支持模拟操纵杆输入
  • 添加输入突发配置选项
  • VALUEOBJ宏,用户分配的值
  • menuIn类用于菜单输入(允许设备字段反转) *
  • 一些选项已分散到其他类中
  • 允许动态菜单构建(RAM),甚至适用于AVR

* API更改

选项

invertFieldKeys选项已删除,反转现在由特定的menuIn对象支持。

回归:仍需要简化简单输入情况。

numValueInput移至menuIn对象

navRoot额外选项,之前在全局选项对象上

bool nav2D=false;//未使用
bool canExit=true;//v4.0从全局选项移动
bool useUpdateEvent=false;//如果为false,则在字段值更改时使用enterEvent。
idx_t inputBurst=1;//可以在输出之前处理的输入限制
串行输入

不再直接接受Serial作为输入,请使用serialIn代替

prompt基础API

printTo成员函数从:

Used printTo(navRoot&,bool,menuOut&,idx_t,idx_t);

更改为:

Used printTo(navRoot&,bool,menuOut&,idx_t,idx_t,idx_t=0);

这应该只影响自定义组件

输入现在来自menuIn类,派生自Stream,但包括每个输入类的字段轴反转标志函数。

3.0

  • 菜单控制系统的完全修订
    • 菜单结构分为RAM对象和flash对象
    • 使用单独的导航控制对象navNode
    • 中央导航控制对象navRoot
    • 对所有菜单对象使用事件(焦点、模糊、进入、退出)
    • 多个面板
    • 基本级别的颜色枚举
    • 并行多个输出设备
    • 将退出定义为常规选项
    • 限制文本宽度以防溢出

2.4

  • 支持teensy(在3.2上测试)
  • 新的字段类型SELECT
  • 反射性,字段反映值的外部更改
  • 将字段字符串存储到progmem
  • 在没有PROGMEM的系统上自动使用RAM

2.3

  • 动作函数现在需要返回bool(仅影响菜单)

false = 继续菜单

true = 退出菜单

  • 支持U8GLib屏幕
  • 可选使用ClickEncoder
  • 使用闪存存储菜单字符串和列表(PROGMEM)

2.0

  • 非阻塞菜单主循环
  • 菜单字段作为具有关联值的菜单提示 值可以是: 范围内的数值 点击时切换的值列表(用于小列表) 作为子菜单选择的值列表(用于较长列表)
  • PCINT现在支持Mega/2560和可能的其他型号

1.x

  • 基本菜单功能
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号