在lua中根据值的变化执行if then

我想要读取5个微动开关并计算哪些开关是激活的。在这方面,我已经成功了。然而,我还想知道在门打开时有多少个开关被占用(doorstatus == 0表示门打开了)。除了使用while doorstatus == 1 do之外,是否有一种检测doorstatus变化的方法呢?比如:一个if then循环,能够检测doorstatus从0到1的变化。

我现在的代码(它不起作用):

if global.doorstatus == 1 then -- 门关闭
    checkMicroswitches() -- 检查微动开关
    calculateFree() -- 计算可用微动开关的数量和位置
    global.numberFreeStart = global.numberFree
    global.rfidTakenCheck = 0
end

msg.payload = global.numberFreeStart
msg.topic = "numberFreeStart"
sendTo(4, msg)

while (global.doorstatus == 0) do -- 门打开,rfidTakenCheck = 门开着时被占用的总数
    checkMicroswitches()
    calculateFree()
    global.numberFreeEnd = global.numberFree
    global.rfidTakenCheck = global.numberFreeStart - global.numberFreeEnd
    msg.payload = {}
    msg.payload = global.rfidTakenCheck
    msg.topic = "rfidTakenCheck"
    sendTo(3, msg)
    if global.doorstatus == 1 then
        break
    end
end

程序由于while循环而被卡住了,所以我想要改变它。然而,我不知道怎么做。

点赞
用户7396148
用户7396148

你可以将你的代码更改为以下格式:

local function doorClosed() -- 门关闭
    checkMicroswitches() -- 检查微开关
    calculateFree() -- 计算可用的微开关数量和位置
    global.numberFreeStart = global.numberFree
    global.rfidTakenCheck = 0
end

local function doorOpen() -- 门打开,rfidTakenCheck = 门开着时的总取出数
    checkMicroswitches()
    calculateFree()
    global.numberFreeEnd = global.numberFree
    global.rfidTakenCheck = global.numberFreeStart - global.numberFreeEnd
    msg.payload = {}
    msg.payload = global.rfidTakenCheck
    msg.topic = "rfidTakenCheck"
    sendTo(3, msg)
end

msg.payload = global.numberFreeStart
msg.topic = "numberFreeStart"
sendTo(4, msg)

while(true) do
    global.doorstatus == updateDoorStatus() -- 我们没有在你发布的代码中看到状态更新。
    if global.doorstatus == 0 then
        doorOpen()
    else
        doorClosed()
    end
end

我假设你想让循环无限运行。如果不是这样,请删除 while 循环并直接使用其中的代码。

2019-05-14 13:45:11