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スクリプトを選択実行できる機能が欲しくなってきますね。