• C++面向对象多级菜单向Arduino的移植


    前段时间写了一篇文章《C++面向对象语言自制多级菜单》,文中指出了可以将HeleMenu库进行移植,现已完成技术思路,特此记录。

    一、特性

    基本与上一篇文章指出的一致,只是将菜单显示和响应函数合二为一

    二、代码实现

    基本与上一篇文章指出的一致,只是考虑到右值和左值的问题,将形参改为了const类型

    三、使用示例

    (一)手动生成

    void setup() {
        /*手动生成菜单,测试用例3*/
        HeleMenu *m1 = new HeleMenu("Root");
        m1->attachAction(display_root);
        HeleMenuViewer::init(m1); //初始化根菜单
    
        HeleMenu *m2 = new HeleMenu("Log",m1);
        m2->attachAction(display_log);
        m2->addToMenus();
    
        m2 = new HeleMenu("Opt",m1);
        m2->addValues({"save","unsave"});
        m2->attachAction(display_opt);
        m2->addToMenus();
    
        m2 = new HeleMenu("Menu",m1);
        m2->attachAction(display_menu);
        m2->addToMenus();
        m1 = m2; //构建下一层子菜单
    
        m1->addValues({"1.Adjust", "2.About"});
    
        HeleMenuViewer::gotoRoot();	 //到达根菜单
    }
    
    void loop() {
        //显示与响应 
        lcd.clear();
        HeleMenuViewer::action();
        _delay_ms(50);
    }
    

    (二)脚本生成

    void setup() {
        /*脚本生成菜单*/
        //测试用例1
        void (*p_display[])(const string&, const vector&, uint8_t&) = {/*root*/display_root, /*log*/display_log, /*operate*/display_opt, /*menu*/display_menu};
        HeleMenu *m1 = HeleMenu::parseMenu("Root{Log{},Opt{save,unsave},Menu{0.Contrast,2.About}}",	p_display);
        HeleMenuViewer::init(m1);
        
        //测试用例2
        // void (*p_display[])(const string&, const vector&, uint8_t&) = {/*root*/display_root, /*log*/display_log, /*operate*/display_opt, /*menu*/display_menu};
        // HeleMenu *m1 = HeleMenu::parseMenu("{Log{},Opt{save,unsave},Menu{0.Contrast,2.About}}",	p_display);
        // HeleMenuViewer::init(m1);
    
        HeleMenuViewer::gotoRoot();	 //到达根菜单
    }
    
    void loop() {
        //显示与响应 
        lcd.clear();
        HeleMenuViewer::action();
        _delay_ms(50);
    }
    

    (三)演示

    菜单结构如下:

     -Root
        -Log
          -XX
          -...
        -Opt
          -save
          -unsave
        -Menu
          -Contrast
          -About
    

    四、参考资料

    五、源码下载

    https://download.csdn.net/download/hele_two/89472615

  • 相关阅读:
    最长的可整合子数组的长度
    394. 字符串解码
    百度网盘可以自动备份电脑文件吗?
    C#实现批量生成二维码
    Kotlin快速运用第三阶段
    Python基础语法速成1
    JAVA枚举
    OpenGL实现GPU体渲染
    丁鹿学堂:promise深入解读(一)
    【机器学习算法】关联规则2 FPgrowth法算法
  • 原文地址:https://www.cnblogs.com/hele-two/p/18263317