ブラウザから実行するなり,自動起動設定するなりしてください
--IPアドレス文字列から32bitIPアドレス数値に変換
function ipadr2ipnum(ipadr)
local ip_itr = string.gmatch(ipadr, "%d+")
local ip = 0
for i=1,4 do
ip = bit32.lshift(ip,8)
ip = bit32.bor(ip,tonumber(ip_itr()))
end
return ip
end
--32bitIPアドレス数値からIPアドレス文字列に変換
function ipnum2ipadr(ipnum)
local ipadr=""
for i=1,4 do
ipadr = tostring(bit32.band(ipnum,0xFF)) .. "." .. ipadr
ipnum = bit32.rshift(ipnum,8)
end
return string.sub(ipadr,0,-2)
end
--Scartchへ変数を設定する
function ScratchSetValue(ip,var,value)
fa.udp(broadcast_adr,42001,"message","sensor-update \""..var.."\" \""..value.."\"")
end
--Scartchへメッセージを送信する
function ScratchSendMessage(ip,msg)
fa.udp(broadcast_adr,42001,"message","broadcast \""..msg.."\"")
end
--サンプル--
--現在のFlashAirのIPアドレスとサブネットマスクを取得し、数値に変換
ip,sub,gate = fa.ip()
ip_num = ipadr2ipnum(ip)
sub_num = ipadr2ipnum(sub)
--ブロードキャストアドレスを計算し、文字列に戻す
broadcast_num = bit32.bor(ip_num,bit32.bnot(sub_num))
broadcast_adr = ipnum2ipadr(broadcast_num)
--ブロードキャストして受信可能なすべてのScratchへ変数を設定
ScratchSetValue(broadcast_adr,"Hello","This is message from FlashAir!")
--ブロードキャストして受信可能なすべてのScratchへメッセージ送信
ScratchSendMessage(broadcast_adr,"Run Function")
print("OK")
--ボタン情報を取得→送信のループ
--UDP送信には時間がかかるので待ち時間を入れる必要がある
while true do
s,dat = fa.pio(0,0)
if (bit32.band(dat , 0x07)==0x6)then
--up
ScratchSetValue(broadcast_adr,"up","1")
else
ScratchSetValue(broadcast_adr,"up","0")
end
sleep(10)
if (bit32.band(dat , 0x07)==0x5)then
--down
ScratchSetValue(broadcast_adr,"down","1")
else
ScratchSetValue(broadcast_adr,"down","0")
end
sleep(10)
if (bit32.band(dat , 0x07)==0x1)then
--left
ScratchSetValue(broadcast_adr,"left","1")
else
ScratchSetValue(broadcast_adr,"left","0")
end
sleep(10)
if (bit32.band(dat , 0x07)==0x2)then
--right
ScratchSetValue(broadcast_adr,"right","1")
else
ScratchSetValue(broadcast_adr,"right","0")
end
sleep(10)
if (bit32.band(dat , 0x10)==0x0)then
--b
ScratchSetValue(broadcast_adr,"b","1")
else
ScratchSetValue(broadcast_adr,"b","0")
end
sleep(10)
if (bit32.band(dat , 0x08)==0x0)then
--a
ScratchSetValue(broadcast_adr,"a","1")
else
ScratchSetValue(broadcast_adr,"a","0")
end
sleep(10)
collectgarbage()
end