ArduinoMenu, Arduino通用菜单/交互系统

分享于 

15分钟阅读

GitHub

  繁體 雙語
AVR generic menu/interactivity system
  • 源代码名称:ArduinoMenu
  • 源代码网址:http://www.github.com/neu-rah/ArduinoMenu
  • ArduinoMenu源代码文档
  • ArduinoMenu源代码下载
  • Git URL:
    git://www.github.com/neu-rah/ArduinoMenu.git
    Git Clone代码到本地:
    git clone http://www.github.com/neu-rah/ArduinoMenu
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/neu-rah/ArduinoMenu
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    ArduinoMenu 4

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

    License: CC BY-NC-SA 4.0Build StatusDonateJoin Gitter

    命令行目

    全自动化或者用户代码驱动导航系统。 使用该系统,你可以定义处理所有输入/输出。输入字段和其他迭代对象的菜单。子菜单和其他迭代对象,从而将用户定义的处理程序。 用户函数可以作为单击/enter或者作为事件驱动的函数来操作,或者输入/输入/esc事件。 系统被设计为非阻塞轮询系统,允许并发任务运行。 可选系统可以半自动模式运行,从用户代码发出导航命令。

    请参见维基

    简单示例

    
    
    
    
    #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
    
    
    
    int timeOn=10;
    
    
    int timeOff=90;
    
    
    
    MENU(mainMenu, "Blink menu", Menu::doNothing, Menu::noEvent, Menu::wrapStyle
    
    
    , FIELD(timeOn,"On","ms",0,100,10,1, Menu::doNothing, Menu::noEvent, Menu::noStyle)
    
    
    , FIELD(timeOff,"Off","ms",0,100,10,1,Menu::doNothing, Menu::noEvent, Menu::noStyle)
    
    
    , EXIT("<Back")
    
    
    );
    
    
    
    serialIn serial(Serial);
    
    
    MENU_INPUTS(in,&serial);
    
    
    
    MENU_OUTPUTS(out,MAX_DEPTH
    
    
    , SERIAL_OUT(Serial)
    
    
    , NONE//must have 2 items at least
    
    
    );
    
    
    
    NAVROOT(nav,mainMenu,MAX_DEPTH,in,out);
    
    
    
    void setup() {
    
    
     pinMode(LEDPIN, OUTPUT);
    
    
     Serial.begin(115200);
    
    
     while(!Serial);
    
    
     Serial.println("Menu 4.x");
    
    
     Serial.println("Use keys + - */");
    
    
     Serial.println("to control the menu navigation");
    
    
    }
    
    
    
    void loop() {
    
    
     nav.poll();
    
    
     digitalWrite(LEDPIN, HIGH);
    
    
     delay(timeOn);
    
    
     digitalWrite(LEDPIN, LOW);
    
    
     delay(timeOff);
    
    
    }
    
    
    
    

    特性

    • RAM上使用PROGMEM的小型内存占用。
    • 支持多种输入/输出设备。
    • 轻松定义菜单( 宏)。
    • 最小用户代码库。
    • 字段编辑与现有程序变量( 引用) 钩子的值。
    • 使用字符验证编辑文本字段。
    • 字段可以编辑任何类型( 模板)的数值变量。
    • 反身字段,显示在菜单系统外完成的变量更改。
    • 数字字段编辑和范围验证。
    • 数值和非数值类型的枚举字段
    • 可以定制的( 颜色和光标)。
    • 能够通过串行流IO作为基础级别工作。
    • 并行支持多个输入和输出。
    • 在程序启动时,static 分配内存,避免堆碎片,定义菜单结构所需的所有内存。
    • 菜单和提示可用的事件
    • 仅返回没有可用输入且不需要绘制的情况。
    • 懒惰绘图,仅在改变时绘制,避免时间消耗和闪烁。
    • 同步/异步导航API函数
    • 无状态客户端的异步导航( 作为站点)
    • web界面( 实验)
    • 可以限制于显示区域( 数字字段仍然可以溢出区域,用户应该考虑它们)
    • 在 Arduino: AVR,ARM,Teensy 3.2测试,ESP8266

    版本 2.x-视频

    IMAGE ALT TEXTIMAGE ALT TEXT

    应用程序

    使用菜单选择频率和dutty的Fielduino 硬件PWM发生器。

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

    平台

    Atmel,Atmel,Espressif 8266,ARC32,芯片 PIC32,北欧 nRF51,Teensy,TI MSP430

    安装

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

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

    IO器件

    输出设备

    系列

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

    • 串行监视器。

    标准的arduino液晶显示器

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

    • hd44780

    malpartida液晶显示器的液晶

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

    • HD44780直接
    • HD44780 I2C
    • HD44780 SPI

    Hertel PCF8574驱动程序

    https://github.com/mathertel/LiquidCrystal_PCF8574

    • HD44780

    TFT器件

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

    SSD1306Ascii

    https://github.com/greiman/SSD1306Ascii

    • 基于SSD1306控制器的OLED屏幕

    TFT_HX8357驱动程序

    https://github.com/Bodmer/TFT_HX8357

    • HX8357B,HX8357C,ILI9481和 ILI9486

    adafruit设备

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

    • RGBmatrixPanel,16 x32和 32 x32 RGB LED矩阵面板。
    • Adafruit_TFTLCD,2.8英寸"TFT LCD触摸屏突破和用于Arduino的TFT触摸屏。
    • Adafruit_HX8340B,2.2英寸"带有microSD的TFT显示器。
    • Adafruit_ST7735,1.8英寸"带有microSD的TFT显示器。
    • Adafruit_PCD8544,适用于诺基亚 5110/3310 单色液晶显示器。
    • Adafruit-Graphic-VFD-Display-Library,用于 128 x64图形 VFD。
    • 0.96英寸 16位 彩色 OLED w/microSD器件的Adafruit-SSD1331-OLED-Driver-Library-for-Arduino。
    • 用于单色 128 x64和 128 x32 OLED的Adafruit_SSD1306.

    UTFT设备

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

    • ITDB02系列- ITead工作室
    • TFT01系列- ElecFreaks
    • RGB LCD - NKC电子。

    U8glib设备

    https://github.com/olikraus/U8glib_Arduino

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

    U8G2和U8x8设备

    https://github.com/olikraus/U8g2_Arduino

    SSD1305 128 X32_NONAME, SSD1305 128 X32_NONAME, SSD1306 128 X64_NONAME, SSD1306 128 X64_VCOMH0, SSD1306 128 X64_NONAME, SSD1306 128 X64_VCOMH0, SH1106 128 X64_NONAME, SH1106 128 X64_VCOMH0, SH1106 128 X64_NONAME, SH1106 128 X64_VCOMH0, SSD1306 128 X32_UNIVISION, SSD1306 128 X32_UNIVISION, SSD1306 64 X48_ER, SSD1306 64 X48_ER, SSD1306 64 X32_NONAME, SSD1306 64 X32_NONAME, SSD1306 96 X16_ER, SSD1306 96 X16_ER, SSD1309 128 X64_NONAME2, SSD1309 128 X64_NONAME2, SSD1309 128 X64_NONAME0, SSD1309 128 X64_NONAME0, SSD1325 NHD_128X64, SSD1325 NHD_128X64, SSD1327 SEEED_96X96, SSD1327 SEEED_96X96, SSD1329 128 X96_NONAME, LD7032 60 X32, LD7032 60 X32, ST7920 192 X32, ST7920 192 X32, ST7920 192 X32, ST7920 128 X64, ST7920 128 X64, ST7920 128 X64, LS013B7DH03 128 X128, UC1701 EA_DOGS102, UC1701 MINI12864, PCD8544 84 X48, PCF8812 96 X65, UC1604 JLX19264, UC1604 JLX19264, UC1608 ERC24064, UC1608 ERC24064, UC1608 ERC240120, UC1608 ERC240120, UC1608 240 X128, UC1608 240 X128, UC1610 EA_DOGXL160, UC1610 EA_DOGXL160, UC1611 EA_DOGM240, UC1611 EA_DOGM240, UC1611 EA_DOGXL240, UC1611 EA_DOGXL240, ST7565 EA_DOGM128, ST7565 64128 N, ST7565 ZOLEN_128X64, ST7565 LM6059, ST7565 ERC12864, ST7565 NHD_C12864, ST7565 NHD_C12832, ST7565 EA_DOGM132, ST7567 PI_132X64, ST7588 JLX12864, ST7588 JLX12864, NT7534 TG12864R, IST3020 ERC19264, SBN1661 122 X32, SED1520 122 X32, KS0108 128 X64, KS0108 ERM19264, LC7981 160 X80, LC7981 160 X160, LC7981 240 X128, T6963 240 X128, T6963 240 X64, T6963 256 X64, T6963 128 X64, SSD1322 NHD_256X64, SSD1606 172 X72, SSD1607 200 X200, IL3820 296 X128, IL3820 V2_296X128, SED1330 240 X128, RA8835 NHD_240X128, RA8835 320 X240, MAX7219 32 X8, A2PRINTER 384 X240,

    UCGLib设备

    https://github.com/olikraus/Ucglib_Arduino

    ST7735,ILI9341,PCF8833,SSD1351,LD50T6160 ( v1.2 ),ILI9163 ( v1.2 ),SSD1331 ( v1.3 ),SEPS225 ( v1.3 )

    串行ANSI终端

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

    • Unix终端

    网页浏览器 ( 实验)

    • ESP8266网络服务器

    输入设备

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

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

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

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

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

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

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

    依赖项

    此库依赖于以下库:

    根据输入或者输出的类型,可能需要其他库。 你的设备所需的基本库。

    限制

    • 使用宏时,菜单仅限于 16个选项( 当前宏 limnit )。
    • menus 必须至少有个选项在使用宏生成时具有。
    • 最大 127个选项。
    • 快速访问( 数字键) 只支持 9个选项( 1 至 9 )
    • 当面板宽度小于 4个字符时,提示会溢出
    • 菜单系统是基于字符的,所以选择monometric字体以达到最佳效果,它可以使用任何字体,但文本可以溢出。

    基础

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

    电子邮件信息

    更多信息

    wiki 页,问题,或者r-site.net

    错误/sugestions

    请报告错误,问题或者增强想法,我apreciate的反馈。 谢谢。

    关于问题报告请指定输入和输出驱动程序或者设备以及目标平台。

    注释

    编码器现在需要在设置时调用 begin() ( 2.x )

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

    用于输入编码器流和编码器键盘的多个流封装( 通常为 1或者 2键)

    历史

    4.0

    • 更多示例
    • 带验证 *的文本编辑字段
    • Pad样式menus菜单( 水平列表)
    • 内联pad菜单可以输入自定义格式,比如 IP/Date/Time, 实验,只针对能够定位光标的设备
    • 插件,可选的菜单项,可能是设备特定
    • 允许多个并发菜单
    • 支持UCGLib显示器
    • 支持U8x8显示器
    • 支持 Arduino TFT
    • 支持 PCF8574 I2C LCD
    • 支持模拟游戏杆输入
    • 添加了输入突发配置选项
    • VALUEOBJ宏,用户分配的值
    • 菜单输入( 允许设备字段反转) *的menuIn类
    • 某些选项已经分发到其他类
    • 允许动态菜单构造( 内存) 即使是 avr
    * API更改选项

    删除了 invertFieldKeys 选项,特定menuIn对象现在支持求反。

    回归:仍然需要简化简单输入案例。

    numValueInput 移动到menuIn对象

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

    
    
    
    
    bool nav2D=false;//not used
    
    
    bool canExit=true;//v4.0 moved from global options
    
    
    bool useUpdateEvent=false;//if false, use enterEvent when field value is changed.
    
    
    idx_t inputBurst=1;//limit of inputs that can be processed before output
    
    
    
    
    串行输入

    串行不再被接受为直接输入,请改用 serialIn

    提示基 API

    printTo成员函数已经从以下位置更改:

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

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

    但是,这应该只影响定制的组件。

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

    3.0

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

    2.4

    • 支持 teensy ( 在 3.2上测试)
    • 新建字段类型选择
    • reflexivity,字段反映对值的外部更改
    • 将字段字符串存储到 progmem
    • 无需PROGMEM即可在系统上自动使用 RAM

    2.3

    • 动作函数现在需要返回布尔值( 只影响菜单)

    false = 继续菜单

    true = 退出菜单

    • 支持U8GLib屏幕
    • 替代使用 ClickEncoder
    • 使用 Flash 内存存储菜单字符串和列表( PROGMEM )

    2.0

    • 非阻塞菜单主循环
    • Menufields作为具有关联值值的菜单提示可以是: numeric withing范围列表toggled单击作为子菜单选择的值列表中的值( 用于更长列表)
    • PCINT现在支持 mega/2560

    1.x

    • 基本菜单功能

    SYS  系统  菜单  Arduino  generic  
    相关文章