Luat开源硬件

Luat实例教程:gpio

2018-03-23  本文已影响131人  Luat物联网通信模块

本示例实现的功能是:IO输入输出以及串口中断回调函数的使用

1.在编辑工具建立一个test.lua的文件(不一定叫这个名字,用户可以自己随便取名)

2.设置本文件被全体可见。也就意味着,一旦test被某一文件加载,则test在任何文件中均可被看见,即test中全局变量和函数均可被任何文件调用。

module(...,package.seeall)

3.test文件头需要 require "pins" 模块。加载后,就可以调用pins.lua库文件中的全局变量和函数了,调用形式为pins变量 以及sms.函数。

require "pins"

4.定义print函数,调试用

local function print(...)
    _G.print("test",...)
end

5.定义PIN脚

pin值定义如下:

Air200:

其他模块:

注:GPIO号大于等于32的,请用P1。例如,GPIO32,设置为pio.P1_0

dir值定义如下(默认值为pio.OUTPUT):

valid值定义如下(默认值为1):

--[[
  GPIO54,等价于PIN31 = {pin=pio.P1_22,dir=pio.OUTPUT,valid=1}
  配置为输出,初始化输出低电平;valid=1,调用set(true,PIN31),则输出高电平,调用set(false,PIN31),则输出低电平。
]]
PIN31 = {pin=pio.P1_22}     
--[[
  GPIO55;配置为输出,初始化输出高电平;valid=0,调用set(true,PIN23),则输出低电平,调用set(false,PIN23),则输出高电平
]]
PIN32 = {pin=pio.P1_23,dir=pio.OUTPUT1,valid=0}
--[[
    第25个引脚:GPIO6;配置为中断;valid=1。intcb表示中断管脚的中断处理函数,产生中断时,如果为高电平,则回调intcb(true);如果为低电平,则回调intcb(false)。调用get(PIN5)时,如果为高电平,则返回true;如果为低电平,则返回false
]]
PIN25 = {name="PIN25",pin=pio.P1_4,dir=pio.INT,vaild=1,intcb=pin25cb}       

6.pins.reg函数的作用是:注册一个或者多个PIN脚的配置,并且初始化PIN脚

pins.reg(PIN22,PIN23,PIN5)

7.PIN5的中断使用方法。
PIN5是中断GPIO脚,由于在pins.lua中已经用sys.regmsg(rtos.MSG_INT,intmsg)注册了中断处理程序。PIN5发生中断时,底层会自动感知,并抛出中断消息rtos.MSG_INT,
此时会执行intmsg,而intmsg中会执行pin5定义表中的回调函数pin5cb。
如果我们在pin5cb中打印一些东西,就可以测试我们的中断脚是否起作用了。

local function pin25cb(v)
  print("pin25cd",v)
end

8.普通GPIO脚的使用

--这段代码的作用是:启动1秒的循环定时器,设置PIN22引脚的输出电平,1秒反转一次
local pin31flg = true
local function pin31set()
    pins.set(pin31flg,pincfg.PIN31)
    pin31flg = not pin31flg
end
sys.timer_loop_start(pin31set,1000)

9.在编辑工具中建立一个名为main.lua的文件。lua脚本的执行从main.lua开始,main.lua是入口文件(注意:main.lua只能有一个)。在main.lua中把test加载进去就好了。sys.init()是对系统初始化,sys.run()是系统主程序。这两句必须有。

--重要提醒:必须在这个位置定义MODULE_TYPE、PROJECT和VERSION变量
--MODULE_TYPE:模块型号,目前仅支持Air201、Air202、Air800
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
MODULE_TYPE = "Air202"
PROJECT = "GPIO_SINGLE"
VERSION = "1.0.0"
require"sys"
require"test"
if MODULE_TYPE=="Air201" then
require"wdt"
end
sys.init(0,0)
sys.run()

!!!attention

一个工程只有一个main.lua

上一篇下一篇

猜你喜欢

热点阅读