ライントレースのみのコード

2つのセンサーからの信号に応じて、左右のモーターをオンオフさせます。無線LANによるリモートコントロールが不要であれば、 このコードのみでライントレースができます。まずは、これでセンサーおよびモーターの動作確認ができます。

trace.lua

local s, indata, sens
s, indata = fa.pio(0x18, 0x00)
while (true) do
  sens = bit32.band(indata, 0x06)
  if (sens == 0x00 or sens == 0x06) then
    s, indata = fa.pio(0x18, 0x18)
  elseif (sens == 0x02) then
    s, indata = fa.pio(0x18, 0x08)
  elseif (sens == 0x04) then
    s, indata = fa.pio(0x18, 0x10)
  end
  sleep(5)
end

無線LANによる通信を含むコード

共有メモリに書き込まれた情報を読み出して、ライントレース、前進、左回転、右回転、停止を行います。 共有メモリの使い方については綾瀬ヒロさんにご教示いただきました。

trace2.lua

local i, b, c, h, s, sens
local indata = 0
sleep(15000)
collectgarbage("stop")
b,c,h = fa.request("http://127.0.0.1/command.cgi?op=131&ADDR=0&LEN=1&DATA=T")
i = 0
while (true) do
  if (i % 10 == 0) then
    b,c,h = fa.request("http://127.0.0.1/command.cgi?op=130&ADDR=0&LEN=1")
  end
  if (i % 10 == 5 ) then
    collectgarbage("collect")
  end
  if (b == "T") then
    sens = bit32.band(indata, 0x06)
    if (sens == 0x00 or sens == 0x06) then
       s, indata = fa.pio(0x18, 0x18)
    elseif (sens == 0x02) then
       s, indata = fa.pio(0x18, 0x08)
    elseif (sens == 0x04) then
       s, indata = fa.pio(0x18, 0x10)
    end
  elseif (b == "R") then
    s, indata = fa.pio(0x18, 0x10)
  elseif (b == "L") then
    s, indata = fa.pio(0x18, 0x08)
  elseif (b == "F") then
    s, indata = fa.pio(0x18, 0x18)
  else
    s, indata = fa.pio(0x18, 0x00)
  end
  i = i + 1
  if (i > 9999) then
     i = 0
  end
end

ページトップへ