Бесконечный цикл в Луа - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь закодировать программу, которая считывает 5 микропереключателей при открытой двери (doorstatus = 0).Он также должен иметь возможность подсчитать, сколько мест занял пользователь (rfidTakenCheck), подсчитав количество микропереключателей, установленных при закрытой ячейке, и количество при его открытии.Мой CloudGate (компьютерный блок) застревает при развертывании программы, что заставляет меня думать, что происходит бесконечный цикл.

Я пытался заменить другой CloudGate, но это не помогло, так чтоне было аппаратной проблемы.Я также попытался добавить команду break в циклы while, но это не помогло.

Функция checkMicroswitches() получает свою информацию из 5 выводов gpio.

if not msg then
-- called on startup
return
end

function checkMicroswitches() --checks microswitches + calculates numberFree & placesFree
if msg.topic == "Microswitch1" then
    global.microswitch1 = msg.payload
end
if msg.topic == "Microswitch2" then
    global.microswitch2 = msg.payload*10
end
if msg.topic == "Microswitch3" then
    global.microswitch3 = msg.payload*100
end
if msg.topic == "Microswitch4" then
    global.microswitch4 = msg.payload*1000
end
if msg.topic == "Microswitch5" then
    global.microswitch5 = msg.payload*10000
end

global.placesFree = global.microswitch1 + global.microswitch2 + global.microswitch3 + global.microswitch4 + global.microswitch5

function sumdigits(str)
  local total = 0
  for digit in string.gmatch(str, "%d") do
  total = total + digit
  end
  return total
end

global.numberFree = sumdigits(tostring(global.placesFree))
end -- ends function checkMicroswitches

-- initialising
checkMicroswitches()

msg.payload = {}
msg.payload = global.numberFree
msg.topic = "numberFree"
sendTo(1, msg)

msg.payload = {}
msg.payload = global.placesFree
msg.topic = "placesFree"
sendTo(2, msg)

global.numberFreeStart = 0
global.numberFreeEnd = 0

while (global.doorstatus == 1) do -- door closed
    checkMicroswitches()
    global.numberFreeStart = global.numberFree
    global.rfidTakenCheck = 0
end

while (global.doorstatus == 0) do -- door open
    global.numberFreeEnd = global.numberFree
    global.rfidTakenCheck = global.numberFreeStart - global.numberFreeEnd
end

msg.payload = {}
msg.payload = global.rfidTakenCheck
msg.topic = "rfidTakenCheck"
sendTo(3, msg)

global.numberFreeEnd = 0
global.numberFreeStart = 0
global.rfidTakenCheck = 0

Если я удаляю циклы while, переменные numberFree и placesFree подсчитываются и отправляются,так что я предполагаю, что именно циклы while вызывают проблемы.Я ожидаю, что они подсчитают количество мест, занятых пользователем, пока дверь открыта, путем сравнения значений микропереключателя.

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