Если тогда, в зависимости от изменения стоимости в луа - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь зачитать 5 микропереключателей и подсчитать, сколько активных и какие.В этом я преуспел.Тем не менее, я также хотел бы знать, сколько берется, когда дверь открыта (doorstatus == 0 означает, что она открыта).Есть ли способ обнаружить изменение в состоянии двери, кроме использования while doorstatus == 1 do?Например: цикл if then, который обнаруживает изменение состояния двери с 0 на 1

Мой код прямо сейчас (который не работает):

if global.doorstatus == 1 then -- door closed
    checkMicroswitches() -- checks the microswitches
    calculateFree() -- calculates the amount and place of free microswitches
    global.numberFreeStart = global.numberFree
    global.rfidTakenCheck = 0
end

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

while (global.doorstatus == 0) do -- door open, rfidTakenCheck = total taken while door was open
    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, так что я бы хотел это изменить.Однако я не знаю как.

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете изменить свой код на что-то вроде этого:

local function doorClosed() -- door closed
    checkMicroswitches() -- checks the microswitches
    calculateFree() -- calculates the amount and place of free microswitches
    global.numberFreeStart = global.numberFree
    global.rfidTakenCheck = 0
end

local function doorOpen() -- door open, rfidTakenCheck = total taken while door was open
    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() -- did not see an update to the status in the code you posted.
    if global.doorstatus == 0 then
        doorOpen()
    else
        doorClosed()
    end
end

Полагаю, вы ищете, чтобы цикл работал бесконечно. Если это не так, вы можете удалить цикл while и просто использовать код в нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...