我最近一直在做一个项目,制作一个机场计算机,可以防止飞机互相着陆。由于某种原因,每次我运行程序时,它都会给我一条错误消息。我有另一个程序也可以获取错误消息,它将所有传入的消息打印到监视器上。这是我的代码:
程序1的错误消息(此消息仅在收到消息后出现:
[启动:9:尝试比较 __le 与 nil 和 number]
程序 2 的错误消息:
[监视器:2:尝试调用 nil]
第一个节目:
shell.openTab("monitor")
local Landing_open = true
rednet.open("top")
while true do
local id, message, distance = rednet.receive()
if message == "Requesting Landing" and distance <= 500 and Landing_open == true then
rednet.send(id, "Landing is granted. Please respond with Landing finished when you exit the runway.")
Landing_open = false
elseif message == "Requesting Landing" and distance>500 then
rednet.send(id, "Landing is not granted. Please try again when you are closer to the airport,")
elseif message == "Requesting Landing" and Landing_open == false then
rednet.send(id, "Landing is not granted. Please try again later.")
elseif message == "Landing Finished" then
rednet.send(id, "Roger that")
Landing_open = true
elseif message == "Airports" then
rednet.send(id, "Melee Airport")
end
end
下一个节目:
local monitor = peripheral.wrap("left")
monitor.setCursorPos(1,1)
while true do
local x, y = monitor.getCursorPos()
if y > 10 then
monitor.clear()
monitor.setCursorPos(1,1)
end
id, message,distance = rednet.receive()
monitor.write(id)
monitor.write(message)
monitor.write(distance)
end
startup
) 正在抱怨,因为“LE”失败,翻译为“小于或等于”,仅在 distance <= 500
时发生。 因此,由于某种原因,distance
没有被设置为数字。 在检查 rednet.receive docs 时,看起来第三个返回值是 protocol
,它声称是一个“字符串”。monitor
。tonumber(distance)
固定线
(line 9)
应该是这样的。
if message == "Requesting Landing" and tonumber(distance) <= 500 and Landing_open == true then
:
”而不是“.
”
即 monitor.setCursorPos(1,1)