Mais conteúdo relacionado Semelhante a イチからはじめるLuarida-マイコン (20) イチからはじめるLuarida-マイコン1. イチからはじめる
Luarida-マイコン
「コンピュータを楽しもう!」という
ブログを書いています。
たろサ(@momoonga)
山本三七男
3. 3
自己紹介
今ココ
和歌山県
有田市
2000年代
944BASIC
45才で退職して地元に帰る
5. 5
Luaridaとは
ルアリダ
Luaridaって何?
Androidで走るインタプリタです。
function main()
local r,g,b
local i,y,s,k
canvas.putCls(color(255,255,255))
y=0
for i=0,10 do
r = math.random(256)-1
g = math.random(256)-1 Lua言語でプログラム
b = math.random(256)-1
s = math.random(20)+10
k = canvas.drawTextBox("でんもく勉強会",0,y,s,color(r,g,b), Gwide)
y = y + k*s
end
toast("画面タッチで終了します",1)
touch(3)
system.exit()
end
7. 7
Androidとマイコンの関係
2つのプログラムが必要
Android
Arduino
9. 9
お手軽な開発環境
それが、Luarida・Saridaです。
MicroBridge対応。
OS 1.6~
Luarida(ルアリダ)
SaridaSAKURA ADK、MicroBridge対応。
OS 2.3.4~
(サリーダ桜)
eclipseのインストールなどに
はまることも無くなります。
11. 11
Luaとは
Luaはリオデジャネイロ・カトリカ大学で
開発されたスクリプト言語
特徴: 高速な動作、高い移植性、省メモリ
スクリプトが故に、
・型が無いとか、
・ビルドしなくていいとか、
ライトにプログラムが組めます。
12. 12
Luaという言語
2012年 12月(TIOBE Programming Community Index)
ちょうど、Coronaが
注目された時期
14. 14
Lua言語の簡単な紹介
構文
while(exp)do if(exp)then
..... .....
end elseif(exp)then
.....
repeat else
..... .....
until(exp) end
15. 15
Lua言語の簡単な紹介
構文
while(exp)do
if(exp)then break end
end
for i=exp, exp [,exp] do
.....
end
16. 16
Lua言語の簡単な紹介
構文
function f() function f()
….. …..
return do return end
….. …..
end end
ブロック途中のreturnは禁止。do endで囲むこと。
17. 17
Lua言語の簡単な紹介
構文
条件式
== > < <= >= ~=
and or
if(exp)then
.....
end
18. 18
Lua言語の簡単な紹介
変数
function f() グローバル変数
a=10 ローカル変数
local b=20
do
local b=30
end 20
print( b )
end
19. 19
Lua言語の簡単な紹介
式 (型宣言はありません)
a=数値
a=文字
a=nil | true | false
a=関数
a=テーブル
20. 20
Lua言語の簡単な紹介
代入 a, b, c = 10, 20, 30
⇒a=10 b=20 c=30
a, b, c = 10, 20
⇒a=10 b=20 c=nil
a, b = 10, 20
a, b = b, a
⇒a=20 b=10
21. 21
Lua言語の簡単な紹介
テーブル (連想配列)
a={ b=20, c=30 }
⇒a.b=20 a.c=30
⇒a[“b”]=20 a[“c”]=30
str =”b”
⇒a[str]=20 a={ b={ c=30, d=40 } }
⇒a.b.c=30 a.b.d=40
⇒a[“b”].c=30
⇒a[“b”][“c”]=30
⇒a.b[“c”]=30
22. 22
Lua言語の簡単な紹介
テーブル(配列) a={ } 初期化されます
a={ } 1~です a[1]={ b=20, c=30 }
⇒a[1]=10 a[2]={ b=21, c=31 }
×⇒a.1 ⇒a[1].b a[1].c
a={ 20, 30, 40 } ⇒a[2].b a[2].c
⇒a[1]=20 a[2]=30 ⇒a[2][“b”] a[2][“c”]
⇒a[3]=40 a={ b={} }
for i=1,10 do ⇒a.b[1]
a[i]={ } ⇒a.b[2]
end
⇒a[1][1] a[1][2]
23. 23
Lua言語の簡単な紹介
配列 (読み出し)
v5.1まで、v5.2で仕様変更したと思う
a = { 10, 20, 30 }
for i, value in pairs(a) do
print( i ,value )
end
24. 24
Lua言語の簡単な紹介
関数
function f()
.....
end
function f()
.....
return a
end
f = function () ..... end
25. 25
Lua言語の簡単な紹介
関数 function f()
local g
g = function() block end
end
function f()
local g={ 10,20,30 }
return g
end
a=f() ⇒a[1]=10 a[2]=20 a[3]=30
26. 26
Lua言語の簡単な紹介
関数 function f1(n)
block
end
function f2(n,m)
block
end
a[1] = f1
a[2] = f2
⇒a[1](3)
⇒a[2](10,20)
27. 27
Lua言語の簡単な紹介
関数 (可変引数)
function f( ... )
a,b,c = ...
x = select("#",...)
y = select(2,...)
d={...}
print( d[1] )
end
28. 28
Lua言語の簡単な紹介
コメント文
-- 一行コメントです。
--[[ マルチ行
コメントです。
]]
--[[ マルチ行
コメントです。
--]]
32. 32
プログラム開発環境
基本的にプログラムはテキストファイル
Wifi
Server
スクリプトを選択
ネットワーク上から
スクリプトをダウンロード
ロボットが動作
33. 33
Lua環境
Lua環境は
・・・・・・・・・
PCにあったほうがいい
http://code.google.com/p/luaforwindows/downloads/list
34. 34
Lua環境
とりあえずCompact installation
35. 35
Lua用エディタ
Programmer's Notepad 2
http://code.google.com/p/pnotepad/downloads/list
36. 36
Lua用エディタ
文字コード UTF-8 No BOM
http://d.hatena.ne.jp/tarosay/searchdiary?word=notepad
37. 37
Lua用エディタ
LuaのStart Phraseを -- に。
38. 38
Lua用エディタ
エディタからのLua実行環境
40. 40
ロボットを作りました
MicroBridgeとLuaridaをつなげて、Luaridaで
操作するロボットを作りました。
MicroBridge-Luarida間はソケット通信しています。
大人の科学付録の「卓上ロボット掃除機」をAndroidから操作できる
ように改造させてもらいました。
41. 41
プログラム開発環境
基本的にプログラムはテキストファイル
Wifi
Server
スクリプトを選択
ネットワーク上から
スクリプトをダウンロード
ロボットが動作
42. 42
PICとLuaridaのネゴシエーション
PIC main.c()
//initialize ADB module
if( ADB_init()==-1){
while(1){
LATBbits.LATB2 = 1;
LATBbits.LATB15 = 1;
DelayMs(100);
LATBbits.LATB2 = 0;
LATBbits.LATB15 = 0;
DelayMs(200);
}
}
DelayMs(1000);
if(StartingActivity("com.momoonga.luarida.robotscri
pt/.RobotScriptActivity")==1){
DelayMs(3000);
}
tprintf(" application launchedrn");
AdbC = tcpForward("60101");
https://github.com/tarosay/AndroidRobotScript
43. 43
PICとLuaridaのネゴシエーション
PIC main.c()
while (1) {
ADB_poll(AdbC);
if (AdbDataReceiveFlg == true) {
tprintf("receivedCommand = %Xh %Xhrn", RecvData[0], RecvData[1]);
power = (unsigned int)RecvData[1];
if( power>0x80 ) power = 0x80;
switch(RecvData[0]){
case 'F':
//Just Stop
OC4R = 0;
OC5R = 0;
setMotorControl(0,MOTOR_STOP);
//Straight Gear
setServoAngle(0,90);
OC4R = power;
OC5R = power;
setMotorControl(0,MOTOR_FORWARD);
//LED ON
LATBbits.LATB2 = 1;
LATBbits.LATB15 = 1;
//RecvData[0] = 'R';
break;
case 'B':
//Just Stop
OC4R = 0;
OC5R = 0;
setMotorControl(0,MOTOR_STOP);
//Straight Gear
setServoAngle(0,90);
OC4R = power;
OC5R = power;
https://github.com/tarosay/AndroidRobotScript
44. 44
PIC ADK MiniBoard
制御コマンド
前進: F , 後退: B , 右回転: R
左回転: L , 停止: S , 接続: C
終了: Q
2バイトのプロトコルで、Androidからの
Fx, Bx, Rx, Lx, Sx, Cx, Qx命令を待っ
てい。xは0~255段階のDCモータに掛
かる電圧を意味します。よって、SとCと
Q命令では、xは無視されます。
45. 45
Robot Script Loader Ver 1.2
robotscript.lua
rbmodule.txtから、読み込むス
クリプトのURLを書いたファイル
のURLを読み込む。
読み込むスクリプトのURL
を書いたファイルのURLを
ダウンロードします
urlfilenameからロボットスクリ
プトのURLを読み込みます
ロボットスクリプトをダウ
ンロードします
実行ファイルをセットします
system.setrun( filename )
https://github.com/tarosay/RobotScript/blob/master/robotscript.lua
47. 47
Luaridaアプリ起動
rbcompass.lua
60101ポートへの接続
--60101ポートへの接続を10秒間待つ
local ret = sock.nlistenOpen( 1, 60101, 10 )
if( ret~=1 )then
dialog( "adb接続に失敗しました", "終了します" , 1 )
system.exit()
end
--接続できたことを表示する
print( "MicroBridgeと接続しました")
北を向きます
https://github.com/tarosay/RobotScript/blob/master/rbcompass.lua
48. 48
Luaridaアプリ起動
rbcompass.lua
ロボットを動かす
if( kaku<=180 and kaku>gosa )then
string.char()で
--左回り バイナリを扱える
cmd = "L"..string.char(spd)
sendcmd( cmd, tim )
elseif( kaku>180 and kaku<360-gosa )then
--右回り
cmd = "R"..string.char(spd)
sendcmd( cmd, tim )
end
北を向きます
https://github.com/tarosay/RobotScript/blob/master/rbcompass.lua
49. 49
Luaridaアプリ起動
rbcompass.lua
コマンドを送信します
function sendcmd( cmd, sec )
local txt, ret,psec
while( true )do
sock.nsend( 1, cmd, 2 )
if( cmd:sub(1,1)=="Q" )then break end
txt, ret = sock.nrecv( 1 )
if( txt==cmd:sub(1,1) )then break end
print( "コマンド送信に失敗しました" )
end
psec=system.getSec() + sec -0.4
北を向きます while psec>system.getSec() do end
end
https://github.com/tarosay/RobotScript/blob/master/rbcompass.lua
50. 50
Luaridaアプリ起動
リモコン操縦 画像をスプライトにセットする
yajirushi.png
sprite.init() --初期化
--上矢印定義
sprite.define( 1, 0, 0, 71, 84 )
sprite.move( 1, 2, cenX, cenY-cenY/7-(cenY-cenY/7)/2 )
--下矢印定義
sprite.define( 2, 72, 0, 143, 84 )
sprite.move( 2, 2, cenX, cenY+cenY/7+(cenY-cenY/7)/2 )
--左回転矢印定義
sprite.define( 3, 144, 0, 238, 84 )
sprite.move( 3, 2, cenX-cenX/7-(cenX-cenX/7)/2, cenY )
ドロイド君を ...
操縦します
https://github.com/tarosay/RobotScript/blob/master/sojusuru.lua
51. 51
実装コマンドなど
ネットからファイルをダウンロードするには
http.get( URL, 取得ファイル名 )
URL: 取得するファイルのURL コンピュータを楽しもう!
取得ファイル名: 保存するときのファイル名
通信をオープンするには
--60101ポートへの接続を5秒間待つ
local ret = sock.nlistenOpen( SockADB, 60101, 5 )
データを送信するには
local cmd = "F"..string.char(10)
sock.nsend( SockADB, cmd, 2 )
方位角度を取得するには
--方位角度を取得
local angle = sensor.getOrient()
52. 52
来年の予定
・Lua Ver5.2 への移行はどうするか?
・ADKへの対応: GR-SAKURA, Arduino
・Bluetoothのサポート, Luaridaでは無理
・AndroidからArduino Firmataを叩いて
スクリプト制御(USB Host API必要)
・mrubyの実装 ルビーやりたい・・・。