コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

SakuLua用Luaスクリプトをターミナルから手打ちする

SakuLua用のスクリプトをシリアル接続した端末から手入力するためのLuaスクリプトを書いてみました。
ちょっとテスト的にスクリプトをテストしたいとか、ターミナルからプログラムを打ち込みたいときのために、PCのターミナルで複数行書いたLuaスクリプトを実行できるLuaスクリプトを書きました。

----Multi Lines Run
Serial.println("Input end with [Ctrl-z]")
m=""
while(true)do
	repeat 
		k = Serial.read()
	until(k>0)
	if(k==26)then break end
	if(k==8)then
		m=m:sub(1,m:len()-1)
	else
		m=m..string.format("%c",k)
	end
	Serial.print(string.format("%c",k))
end
Serial.print("\n")
if(m:len()==0)then
	Serial.println("\n loader.lua Running...")
	sys.setrun("loader.lua")
else
	m = m:gsub("^%s*(.-)%s*$", "%1")
	SD.open( 0, "linesrus.lua", 2 )
	SD.write(0, m, m:len())
	m=";if(a~=nil)then Serial.println(a) end;"
	SD.write(0, m, m:len())
	SD.close(0) 
	sys.setrun("linesrus.lua")
end

使い方

端末からプログラムを入力します。編集は[BS]のみ対応しています。入力の終了は[Ctrl-z]を押します。下記は入力例です。

Input end with [Ctrl-z]
for i=0,3 do
 pinMode(100+i,1)
end
for j=1,10 do
 for i=0,3 do
  digitalWrite(100+i,1)
 end
 delay(500)
 for i=0,3 do
  digitalWrite(100+i,0)
 end
 delay(500)
end
Input end with [Ctrl-z]

LED 4個が点滅します。
Ctrl-zを入力できない端末の場合は、適宜、if(k==26)のif文を変更してください。あと、プログラムを見れば気づくと思いますが、Ctrl-zのみを入力するとloader.luaが呼ばれます。

また、変数 aを使って、a= と代入する形で書けば、aの内容を表示するようにしました。例えば下記のように計算式を入れると、結果を表示してくれます。

Input end with [Ctrl-z]
a=math.sin(45)

0.85090357065201
Input end with [Ctrl-z]

こうなってくると、ファイル名を指定して保存したり、SDメモリカードにあるLuaスクリプトを選択実行できる機能が欲しくなってきますね。