LUA教程6-运算和字符串处理

Posted 大彩科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LUA教程6-运算和字符串处理相关的知识,希望对你有一定的参考价值。

点击关注了解更多精彩内容!!

简单的运算和字符处理-视频教程演示


1

适用范围

该文档适合所有大彩物联型系列。

2

开发环境版本

1.VisualTFT软件版本:V3.0.0.944及以上的版本。
版本查看:
  1. 打开VisualTFT软件启动页面如图2‑1软件版本,右上角会显示的软件版本号;
    LUA教程6-运算和字符串处理
     2‑1  软件版本


  2. 打开VisualTFT,在软件右下角可以查看软件版本图2‑2软件版本,
    最新版本可登录http://www.gz-dc.com/进行下载。
LUA教程6-运算和字符串处理
图 2‑2  软件版本

2.  串口屏硬件版本:V3.0.301.0 及以上的版本。

版本查看:

a)  查看屏幕背面版本号贴纸;

b)  VisualTFT与屏幕联机成功后,右下角显示的版本号。

 3.    LUA语言版本V5.5

3

概述

  物联型串口屏通过LUA脚本配合工程可以完成大部分的内部逻辑处理,可以做到让MCU只参与数据处理,不参与屏的逻辑处理。
  本文将介绍如何使用LUA脚本在串口屏中实现简单的逻辑运算以及字符处理,本文中部分使用的运算函数和字符处理函数来自于LUA的math库和string库,使用这些函数时可以借助网上的资料了解使用方法。

4

参考文档

  1. 《物联型LUA 脚本API

  2. LUA基础学习》

  3.  LUA脚本初学者可以通过下面链接进行学习。http://www.runoob.com/lua/lua-arrays.html

5

工程设计

   本章节主要通过LUA教程demo讲述如何实现简单运行使用以及对字符串的处理。该例程使用大彩物联型7寸串口屏DC80480W070为验证开发平台。如图 5‑1所示
LUA教程6-运算和字符串处理
图  5‑1  物联型7

5.1  素材准备

准备好相应的美工UI。如图5‑2所示
LUA教程6-运算和字符串处理
图5‑2素材准备

5.2   LUA编辑器

上位机VisualTFT内部已集成了LUA开发编译环境,点击菜单栏工具,选择LUA编辑器,如图 5‑3所示。

LUA教程6-运算和字符串处理

图 5‑3  打开LUA编辑器


5.3     API函数说明

大彩科技针对LUA脚本提供了丰富的API接口函数,具体函数可以查阅文档《物联型LUA脚本API 》,如图 5‑4所示。

LUA教程6-运算和字符串处理

图  5‑4  API函数文档


5.3.1   本教程文档中所涉及到的部分的相关接口函数如下

1.    函数set_value(screen,control,value)

注释:设置控件的值              

参数:                 screen  画面ID

         --             control 控件ID

         --              value  控件值

2.    函数get_value(screen,control)  

         注释:获取控件的值。

参数:                screen  画面ID

         --            control 控件ID

3 . 函数set_text((screen,control,str) 

注释:获取控件的值。

参数:                screen  画面ID

         --             control 控件ID

    --                  str     字符串

4. 函数get_text((screen,control) 

注释:获取控件的值。

参数 :               screen  画面ID

         --            control 控件ID

5.函数on_screen_change(screen)

 注释:当画面切换至目标画面ID时,执行此回调函数

 参数:screen 表示目标画面ID


5.3.2   String和math库函数

教程中用到的部分math库函数和string库函数说明:

  1. 部分math库函数

--********************************************************

--功能:开方

--调用函数:math.sqrt(num)

--参数 :    num  数值

--********************************************************

--功能:取模运算(类求x/y余)

              --调用函数:math.fmod(xy)

              --参数 :    x  数值

              --参数 :    y  数值

              --********************************************************

              --功能:取绝对值

              --调用函数:math.abs(x)

              --参数 :    x  数值

              --********************************************************

              --功能:获取数值的整数部分及小数部分

              --调用函数:math.modf(x)

              --参数 :    x  数值

              --*********************************************************         

              --功能:余弦函数

              --调用函数:math.cos(x)

              --参数 :    x              弧度

              --*********************************************************         

              --功能:正弦函数

              --调用函数:math.sin(x)

              --          math.rad(30)   角度转换弧度

              --参数 :    30             角度

              --********************************************************

              --功能:正切函数

              --函数:math.tan(x)

              --参数 :    x  弧度   

              --********************************************************

              --功能:筛选出输入的参数中最大的参数

              --调用函数:math.max(arg...)

              --参数 :   arg  数值(可多个参数,参数数量不定)

              --********************************************************

              --功能:筛选出输入的参数中最小的参数

              --函数:math.min(arg...)

              --参数 :    arg  数值(可多个参数,参数数量不定)

2.        String库函数

          --********************************************************

          --功能:尝试将参数e转换为数字,当不能转换时返回nil

          --函数:tonumber (e [, base])

        --参数 :    e  字符串

          --      [base](可选参数,不填时默认转十进制数值,填16转十六进制进制数)

     --********************************************************

          --功能:尝试将参数e转换为字符串,当不能转换时返回nil

          --函数:tonumber (e)

       --参数 :    e  数值

          --********************************************************

          --功能:在文本框中显示获取字符串长度

          --调用函数:tonumber (str)

       --参数 :    str    字符串

          --********************************************************

          --功能:在文本框中显示截取字的符串str_value的第一个字符

          --函数:string.sub(str,i,j)

       --参数 :   str  字符串

          --          i    起始索引

          --          j    截止索引

          --*********************************************************

    

5.4      教程DEMO说明

除了我们提供的API函数之外还可以使用部分LUA相关的库函数,如math库,string库等。本章节主要讲述调用部分库函数在串口屏上的实现简单的逻辑运算和字符处理。


5.4.1   简单运算

教程DEMO在此画面中简单的演示了LUA基础运算中的加减乘除和关系运算,教程DEMO画面如图 5‑5所示。

LUA教程6-运算和字符串处理

图 5‑5  简单的运算


在当前画面的AB文本框输入值后点击运算按钮,会在相对应的文本框中显示运算结果,如所示;

LUA教程6-运算和字符串处理

图 5‑6  虚拟屏


教程程序说明:点击运算按钮后系统会调用on_control_notify(screen,control,value),并将当前画面ID、按钮控件ID以及按钮的值传入函数中,通过IF判断当按钮按下的时候将运算结果显示用set_value( ),程序如程序清单 1所示;

程序清单1显示运算结果

LUA教程6-运算和字符串处理

LUA教程6-运算和字符串处理


5.4.2   math库函数

 LUA的math库函数中提供了各种数学运算函数,对于大部分数据处理可以直接在屏内使用脚本进行处理,无需外部MCU的参与。教程DEMO演示了部分常用的数学运算函数的使用方法,画面如图 5‑7所示;

LUA教程6-运算和字符串处理

图 5‑7  math库函数

LUA程序说明:判断当前画面的按钮按下后,利用API函数set_valuemath库函数的运算结果在文本框中显示出来,调用函数及显示运算结果的程序如程序清单 2所示;

LUA教程6-运算和字符串处理


5.4.3   字符串处理

通过LUA脚本string库函数以及字符串特性,可以实现将两个或多个字符串拼接起来在一个文本框中显示,而且不需要外部MCU的参与。教程演示画面如图 5‑8所示

LUA教程6-运算和字符串处理

图 5‑8  字符串处理

  LUA程序说明:当判断按钮按下后,利用API函数set_valueset_value将字符处理的结果在文本框中显示出来,调用函数及显示结果的程序如程序清单 3中所示。

程序清单3显示图片

LUA教程6-运算和字符串处理


5.4.4   简单的逻辑运算

教程中列举了一个简单的逻辑运算演示,通过放置两个按钮,一个为按下时候文本中的数值加一,另一个按下时文本中的数值减一,并设置最大值为10,最小值为0,达到最大值后跳出对话框提示已达到最大值,教程画面如图 5‑9所示;

LUA教程6-运算和字符串处理

图 5‑9  简单的逻辑处理


 LUA程序说明:先在程序中定义一个变量,然后在每次变量加一或减一后加上判断是否达到最大值或最小值,达到最值后调用函数change_screen切换到对话框的画面,提示已经到了最大值。按钮加减变量值以及判断变量大小的的代码如所示
程序清单4简单的逻辑处理

LUA教程6-运算和字符串处理


5.5     编译和下载

在我司的上层软件Visual TFT中集成了LUA程序的编译器,可以实现在编译工程的同时将LUA脚本程序一起编译,并且将编译后的图片和程序集合在一个名为DCIOT.PKG的文件中。编译后只需要把DCIOT.PKG文件拷贝到U盘中,接上串口屏并重新上电即可将图片和程序下载到屏中。


5.6      调试与运行

除了下载到实体屏中调试,还可以利用上层软件的虚拟屏进行调试,我司的Visual TFT软件中支持大部分LUA脚本功能运行。在开发过程中可以利用软件中的虚拟屏进行调试,从而缩短调试的时间,实现加快开发进度。


5.6.1   打开虚拟屏

点击工具栏中的运行虚拟串口屏,软件先会将当前工程进行编译,编译成功后工程会在虚拟屏上运行起来,如图 5‑13和图 5‑14所示

LUA教程6-运算和字符串处理

图 5‑13  点击运行虚拟屏


LUA教程6-运算和字符串处理

图 5‑14  虚拟屏


6

LUA教程的完整程序清单

查看程序时请结合教程demo理解:

LUA教程6-运算和字符串处理

LUA教程6-运算和字符串处理

LUA教程6-运算和字符串处理

LUA教程6-运算和字符串处理

LUA教程6-运算和字符串处理


如有问题欢迎联系我司技术支持咨询





编辑:肖水兰




更多大彩串口屏资讯

官网:www.gz-dc.com

淘宝:gz-dc.taobao.com

以上是关于LUA教程6-运算和字符串处理的主要内容,如果未能解决你的问题,请参考以下文章

lua 字符串 处理

Lua学习笔记3. 函数可变参数和运算符转义字符串数组

信息的表示和处理

lua 运算符

Lua:具有特殊字符的String的字符串长度不正确

lua可以对单个字符和数字之间进行转换吗