Air724开发板GPIO试验

main.lua

--必须在这个位置定义PROJECT和VERSION变量
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
PROJECT = "ARMXU_GPIO"
VERSION = "0.0.0"


require "testGpio"

--启动系统框架
sys.init(0, 0)
sys.run()

testGpio.lua

--- 模块功能:GPIO功能测试.
-- @author openLuat
-- @module gpio.testGpioSingle
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.27

module(...,package.seeall)

require"pins"

--[[
有些GPIO需要打开对应的ldo电压域才能正常工作,电压域和对应的GPIO关系如下
pmd.ldoset(x,pmd.LDO_VSIM1) -- GPIO 29、30、31

pmd.ldoset(x,pmd.LDO_VLCD) -- GPIO 0、1、2、3、4
--注意:
--Air724 A11以及之前的开发板丝印有误:
--丝印中的IO_0、IO_1、IO_2、IO_3、IO_4并不对应GPIO0、1、2、3、4
--丝印中的LCD_DIO、LCD_RS、LCD_CLK、LCD_CS对应GPIO0、1、2、3;模块的LCD_SEL引脚对应GPIO4


pmd.ldoset(x,pmd.LDO_VMMC) -- GPIO 24、25、26、27、28
x=0时:关闭LDO
x=1时:LDO输出1.716V
x=2时:LDO输出1.828V
x=3时:LDO输出1.939V
x=4时:LDO输出2.051V
x=5时:LDO输出2.162V
x=6时:LDO输出2.271V
x=7时:LDO输出2.375V
x=8时:LDO输出2.493V
x=9时:LDO输出2.607V
x=10时:LDO输出2.719V
x=11时:LDO输出2.831V
x=12时:LDO输出2.942V
x=13时:LDO输出3.054V
x=14时:LDO输出3.165V
x=15时:LDO输出3.177V
]]

local level = 0
--GPIO18配置为输出,默认输出低电平,可通过setGpio18Fnc(0或者1)设置输出电平
local setGpio14Fnc = pins.setup(pio.P0_14,0)
sys.timerLoopStart(function()
    level = level==0 and 1 or 0
    setGpio14Fnc(level)
    -- log.info("testGpioSingle.setGpio18Fnc",level)
end,10)

 Air724开发板GPIO试验_第1张图片

理解语句"level = level==0 and 1 or 0"是lua的三目运算

Lua 中的三目运算

Lua 原生的语义并没有实现三目运算,一般是通过逻辑运算符 and 和 or 来模拟三目运算符的。

Lua 中 and 和 or 都使用"短路求值(short_cur evaluation)",也就是说,它们只会在需要时才去评估第二个操作数。(《Lua程序设计》)

local a, b, ret;
ret = a > b and a or b

穷举所有可能性:

a > b 时:

a > b and a –> true 
a or b –> a

a <= b时:

a > b and a –> false 
a or b –> b

level=0时,level==0为 1,1and 1结果为1  此时 level=1;

leve=1时,level==0为 0,0 and 1结果为0,0 or 0 结果为0 ,此时 level=0;

运行结果截图:

Air724开发板GPIO试验_第2张图片

你可能感兴趣的:(合宙,AIR724)