イチからはじめるLuarida-マイコン

1,585 views
1,439 views

Published on

2012.12.8 でんでんタウンもくもく勉強会

Published in: Self Improvement
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,585
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

イチからはじめるLuarida-マイコン

  1. 1. イチからはじめる Luarida-マイコン 「コンピュータを楽しもう!」というブログを書いています。 たろサ(@momoonga) 山本三七男
  2. 2. 目次1.自己紹介、2.Luaridaとは、3.Luaとは、4.Luaプログラミング準備5.Luaridaでロボットを動かす
  3. 3. 3 自己紹介 今ココ和歌山県 有田市 2000年代 944BASIC 45才で退職して地元に帰る
  4. 4. Luaridaとは
  5. 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
  6. 6. そもそも、
  7. 7. 7 Androidとマイコンの関係2つのプログラムが必要 Android Arduino
  8. 8. Androidだけでもプログラムを楽にしよ うと考えました。
  9. 9. 9 お手軽な開発環境それが、Luarida・Saridaです。 MicroBridge対応。 OS 1.6~ Luarida(ルアリダ) SaridaSAKURA ADK、MicroBridge対応。 OS 2.3.4~ (サリーダ桜) eclipseのインストールなどに はまることも無くなります。
  10. 10. 話は、Luaに戻ります。
  11. 11. 11 LuaとはLuaはリオデジャネイロ・カトリカ大学で 開発されたスクリプト言語特徴: 高速な動作、高い移植性、省メモリ スクリプトが故に、  ・型が無いとか、  ・ビルドしなくていいとか、 ライトにプログラムが組めます。
  12. 12. 12 Luaという言語2012年 12月(TIOBE Programming Community Index) ちょうど、Coronaが 注目された時期
  13. 13. Luaの世界
  14. 14. 14 Lua言語の簡単な紹介構文while(exp)do if(exp)then ..... .....end elseif(exp)then .....repeat else ..... .....until(exp) end
  15. 15. 15 Lua言語の簡単な紹介構文 while(exp)do  if(exp)then break end end for i=exp, exp [,exp] do ..... end
  16. 16. 16 Lua言語の簡単な紹介構文 function f() function f() ….. ….. return do return end ….. ….. end endブロック途中のreturnは禁止。do endで囲むこと。
  17. 17. 17 Lua言語の簡単な紹介構文 条件式 == > < <= >= ~= and or if(exp)then ..... end
  18. 18. 18 Lua言語の簡単な紹介変数 function f() グローバル変数 a=10 ローカル変数 local b=20 do local b=30 end 20 print( b ) end
  19. 19. 19 Lua言語の簡単な紹介式 (型宣言はありません) a=数値 a=文字 a=nil | true | false a=関数 a=テーブル
  20. 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. 21 Lua言語の簡単な紹介テーブル (連想配列)a={ b=20, c=30 } ⇒a.b=20 a.c=30 ⇒a[“b”]=20 a[“c”]=30str =”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. 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].ca={ 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. 23 Lua言語の簡単な紹介配列 (読み出し)     v5.1まで、v5.2で仕様変更したと思う a = { 10, 20, 30 } for i, value in pairs(a) do print( i ,value ) end
  24. 24. 24 Lua言語の簡単な紹介関数 function f() ..... end function f() ..... return a end f = function () ..... end
  25. 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. 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. 27 Lua言語の簡単な紹介関数 (可変引数) function f( ... ) a,b,c = ... x = select("#",...) y = select(2,...) d={...} print( d[1] ) end
  28. 28. 28 Lua言語の簡単な紹介コメント文 -- 一行コメントです。 --[[ マルチ行    コメントです。 ]] --[[ マルチ行    コメントです。 --]]
  29. 29. ここまで、お疲れさまでした
  30. 30. 実践プログラミング
  31. 31. と、その前に、もうちょっと準備です。
  32. 32. 32 プログラム開発環境基本的にプログラムはテキストファイル WifiServer スクリプトを選択 ネットワーク上から スクリプトをダウンロード ロボットが動作
  33. 33. 33 Lua環境 Lua環境は ・・・・・・・・・ PCにあったほうがいいhttp://code.google.com/p/luaforwindows/downloads/list
  34. 34. 34 Lua環境とりあえずCompact installation
  35. 35. 35 Lua用エディタProgrammers Notepad 2http://code.google.com/p/pnotepad/downloads/list
  36. 36. 36 Lua用エディタ 文字コード UTF-8 No BOMhttp://d.hatena.ne.jp/tarosay/searchdiary?word=notepad
  37. 37. 37 Lua用エディタLuaのStart Phraseを -- に。
  38. 38. 38 Lua用エディタエディタからのLua実行環境
  39. 39. 駆け足でしたが、ここからプログラム です。
  40. 40. 40 ロボットを作りましたMicroBridgeとLuaridaをつなげて、Luaridaで操作するロボットを作りました。MicroBridge-Luarida間はソケット通信しています。大人の科学付録の「卓上ロボット掃除機」をAndroidから操作できるように改造させてもらいました。
  41. 41. 41 プログラム開発環境基本的にプログラムはテキストファイル WifiServer スクリプトを選択 ネットワーク上から スクリプトをダウンロード ロボットが動作
  42. 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. 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. 44PIC 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. 45 Robot Script Loader Ver 1.2 robotscript.luarbmodule.txtから、読み込むスクリプトのURLを書いたファイルのURLを読み込む。 読み込むスクリプトのURL を書いたファイルのURLを ダウンロードしますurlfilenameからロボットスクリプトのURLを読み込みます ロボットスクリプトをダウ ンロードします実行ファイルをセットしますsystem.setrun( filename ) https://github.com/tarosay/RobotScript/blob/master/robotscript.lua
  46. 46. 実際に動かしてみます
  47. 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. 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. 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 endhttps://github.com/tarosay/RobotScript/blob/master/rbcompass.lua
  50. 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. 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. 52 来年の予定・Lua Ver5.2 への移行はどうするか?・ADKへの対応: GR-SAKURA, Arduino・Bluetoothのサポート, Luaridaでは無理・AndroidからArduino Firmataを叩いてスクリプト制御(USB Host API必要)・mrubyの実装 ルビーやりたい・・・。
  53. 53. ご清聴ありがとう ございました luarida-fun-club@googlegroups.com

×