干渉領域が多すぎて視覚的に区別しにくい場合があり、各干渉領域にロボットが入ることによってトリガーされる動作モードが異なる場合があるため、どの干渉領域に侵入するかを時間内に知る必要があります。次のスクリプト(interzone.lua)をインポートして実行することで実現できます。
function RiseEdge(var)
local current_state = 0
local pre_state = 0
repeat
pre_state = current_state
current_state = get_robot_io_status(var)
sleep(0.008)
until (current_state == 1) and (pre_state == 0)
end
function FallEdge(var)
local current_state = 0
local pre_state = 0
repeat
pre_state = current_state
current_state = get_robot_io_status(var)
sleep(0.008)
until (current_state == 0) and (pre_state == 1)
end
local recv, ret, recv2
local m = {}
local m_pre = {}
function Init()
recv ,ret=get_robot_register (55)
recv2 ,ret=get_robot_register (56)
for i = 1, 8, 1 do
if (recv & (2 ^ (i - 1)) > 0) then
m[i] = 1
else
m[i] = 0
end
end
for i = 1, 8, 1 do
if (recv2 & (2 ^ (i - 1)) > 0) then
m[i + 8] = 1
else
m[i + 8] = 0
end
end
for i=1,16,1 do
m_pre[i] = m[i]
end
end
Init()
while true do
recv ,ret=get_robot_register (55)
recv2 ,ret=get_robot_register (56)
for i = 1, 8, 1 do
if (recv & (2 ^ (i - 1)) > 0) then
m[i] = 1
else
m[i] = 0
end
end
for i = 1, 8, 1 do
if (recv2 & (2 ^ (i - 1)) > 0) then
m[i + 8] = 1
else
m[i + 8] = 0
end
end
for i=1,16,1 do
if(m[i]==1) and (m_pre[i]==0) then
elite_print("干渉領域"..i.."に入る")
elseif(m[i]==0) and (m_pre[i]==1) then
elite_print("干渉領域"..i.."を離す")
end
end
for i=1,16,1 do
m_pre[i] = m[i]
end
sleep(0.5)
end
インポート手順:プロセス -> スクリプト
あるプログラムを実行すること情報エリアは以下のようになりました: