Luat实例教程:i2c_gpio切换

本示例实现的功能是:i2c和gpio功能切换控制demo项目。

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

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

module(...,package.seeall)

3.定义print函数,调试用

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

4.编写切换至i2copen,i2close函数

--i2cuse:引脚当前是否做为i2c功能使用,true表示是,其余的表示不是
local i2cid,i2cuse = 0,true
local function i2copn()
    --第三个地址参数0x15只是一个例子,实际使用时由外围设备决定
    if i2c.setup(i2cid,i2c.SLOW,0x15) ~= i2c.SLOW then
        print("i2copn fail")
    end
end

local function i2close()
    i2c.close(i2cid)
end

5.编写切换至gpio函数

local function switchtogpio()
    print("switchtogpio",i2cuse)
    if i2cuse then
        --关闭i2c功能
        i2close()
        --配置gpio方向
        pio.pin.setdir(pio.OUTPUT,pio.P0_6)
        pio.pin.setdir(pio.OUTPUT,pio.P0_7)
        --输出gpio电平
        pio.pin.setval(1,pio.P0_6)
        pio.pin.setval(0,pio.P0_7)
        i2cuse = false
    end 
end

6.编写切换至i2c功能函数

local function switchtoi2c()
    print("switchtoi2c",i2cuse)
    if not i2cuse then
        --关闭gpio功能
        pio.pin.close(pio.P0_6)
        pio.pin.close(pio.P0_7)
        --打开i2c功能
        i2copn()
        i2cuse = true
    end
end

7.测试函数

--切换i2c和gpio功能
local function switch()
    if i2cuse then
        switchtogpio()
    else
        switchtoi2c()
    end
end

--循环定时器,5秒切换一次功能
sys.timer_loop_start(switch,5000)

8.在编辑工具中建立一个名为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 = "I2C_GPIO_SWITCH"
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

发表评论

电子邮件地址不会被公开。 必填项已用*标注