SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
イチからはじめる
    Luarida-マイコン
 「コンピュータを楽しもう!」という
ブログを書いています。




                     たろサ(@momoonga)
                     山本三七男
目次
1.自己紹介、
2.Luaridaとは、
3.Luaとは、
4.Luaプログラミング準備
5.Luaridaでロボットを動かす
3


 自己紹介

          今ココ




和歌山県
 有田市

        2000年代
        944BASIC
 45才で退職して地元に帰る
Luaridaとは
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


      Androidとマイコンの関係

2つのプログラムが必要
   Android




   Arduino
Androidだけでも
プログラムを楽にしよ
 うと考えました。
9


      お手軽な開発環境


それが、Luarida・Saridaです。
                   MicroBridge対応。
                   OS 1.6~
  Luarida(ルアリダ)
  SaridaSAKURA    ADK、MicroBridge対応。
                  OS 2.3.4~
  (サリーダ桜)

         eclipseのインストールなどに
         はまることも無くなります。
話は、
Luaに戻ります。
11


     Luaとは


Luaはリオデジャネイロ・カトリカ大学で
    開発されたスクリプト言語
特徴: 高速な動作、高い移植性、省メモリ

 スクリプトが故に、
  ・型が無いとか、
  ・ビルドしなくていいとか、

 ライトにプログラムが組めます。
12


                             Luaという言語
2012年 12月(TIOBE Programming Community Index)

                                               ちょうど、Coronaが
                                                注目された時期
Luaの世界
14


        Lua言語の簡単な紹介

構文
while(exp)do   if(exp)then
 .....           .....
end            elseif(exp)then
                 .....
repeat         else
 .....           .....
until(exp)     end
15


         Lua言語の簡単な紹介

構文
     while(exp)do
      if(exp)then break end
     end
     for i=exp, exp [,exp] do
      .....
     end
16


          Lua言語の簡単な紹介

構文
     function f()   function f()
      …..            …..
      return         do return end
      …..            …..
     end            end

ブロック途中のreturnは禁止。do endで囲むこと。
17


        Lua言語の簡単な紹介

構文
 条件式
     == > < <= >= ~=
     and or
 if(exp)then
   .....
 end
18


      Lua言語の簡単な紹介

変数
 function f()    グローバル変数
   a=10           ローカル変数
   local b=20
   do
     local b=30
   end          20
   print( b )
 end
19


    Lua言語の簡単な紹介


式 (型宣言はありません)
 a=数値
 a=文字
 a=nil | true | false
 a=関数
 a=テーブル
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


           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


           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


         Lua言語の簡単な紹介

配列 (読み出し)
     v5.1まで、v5.2で仕様変更したと思う
 a = { 10, 20, 30 }
 for i, value in pairs(a) do
   print( i ,value )
 end
24


         Lua言語の簡単な紹介
関数
 function f()
   .....
 end
 function f()
   .....
   return a
 end
 f = function () ..... end
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


           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


         Lua言語の簡単な紹介
関数 (可変引数)

   function f( ... )
     a,b,c = ...
     x = select("#",...)
     y = select(2,...)
      d={...}
      print( d[1] )
   end
28


        Lua言語の簡単な紹介
コメント文
   -- 一行コメントです。
   --[[ マルチ行
      コメントです。
   ]]

   --[[ マルチ行
      コメントです。
   --]]
ここまで、
お疲れさまでした
実践プログラミング
と、その前に、
もうちょっと準備です。
32


                   プログラム開発環境
基本的にプログラムはテキストファイル

            Wifi
Server

         スクリプトを選択

              ネットワーク上から
             スクリプトをダウンロード


                    ロボットが動作
33


                    Lua環境

     Lua環境は
         ・・・・・・・・・
  PCにあったほうがいい



http://code.google.com/p/luaforwindows/downloads/list
34


          Lua環境

とりあえずCompact installation
35


                Lua用エディタ

Programmer's Notepad 2




http://code.google.com/p/pnotepad/downloads/list
36


                  Lua用エディタ




 文字コード UTF-8 No BOM
http://d.hatena.ne.jp/tarosay/searchdiary?word=notepad
37


        Lua用エディタ




LuaのStart Phraseを -- に。
38


    Lua用エディタ




エディタからのLua実行環境
駆け足でしたが、
ここからプログラム
   です。
40


           ロボットを作りました
MicroBridgeとLuaridaをつなげて、Luaridaで
操作するロボットを作りました。
MicroBridge-Luarida間はソケット通信しています。
大人の科学付録の「卓上ロボット掃除機」をAndroidから操作できる
ように改造させてもらいました。
41


                   プログラム開発環境
基本的にプログラムはテキストファイル

            Wifi
Server

         スクリプトを選択

              ネットワーク上から
             スクリプトをダウンロード


                    ロボットが動作
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


               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


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


                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


                           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


                           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


                           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


                            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


                             実装コマンドなど

ネットからファイルをダウンロードするには
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


           来年の予定


・Lua Ver5.2 への移行はどうするか?

・ADKへの対応: GR-SAKURA, Arduino
・Bluetoothのサポート, Luaridaでは無理
・AndroidからArduino Firmataを叩いて
スクリプト制御(USB Host API必要)
・mrubyの実装 ルビーやりたい・・・。
ご清聴ありがとう
 ございました


 luarida-fun-club@googlegroups.com

Mais conteúdo relacionado

Mais procurados

関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutine
melpon
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
MITSUNARI Shigeo
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 

Mais procurados (19)

Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
現実世界のJRuby
現実世界のJRuby現実世界のJRuby
現実世界のJRuby
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutine
 
llvm入門
llvm入門llvm入門
llvm入門
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
 
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diffBoost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
 
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 

Destaque (8)

株式会社Credo Ship.のアウターン
株式会社Credo Ship.のアウターン株式会社Credo Ship.のアウターン
株式会社Credo Ship.のアウターン
 
もし福岡にコミュニティがなかったら ∼ とある福岡ITコミュニティの話
もし福岡にコミュニティがなかったら ∼ とある福岡ITコミュニティの話もし福岡にコミュニティがなかったら ∼ とある福岡ITコミュニティの話
もし福岡にコミュニティがなかったら ∼ とある福岡ITコミュニティの話
 
Less - first step
Less - first stepLess - first step
Less - first step
 
八幡神と藤崎八旛宮 (清村さん講演 2012 )
八幡神と藤崎八旛宮 (清村さん講演 2012 )八幡神と藤崎八旛宮 (清村さん講演 2012 )
八幡神と藤崎八旛宮 (清村さん講演 2012 )
 
20120809WBN横浜
20120809WBN横浜20120809WBN横浜
20120809WBN横浜
 
藤崎宮とその祭りについて(52会 清村さん)
藤崎宮とその祭りについて(52会 清村さん)藤崎宮とその祭りについて(52会 清村さん)
藤崎宮とその祭りについて(52会 清村さん)
 
131111 東工大授業「ロボット技術」資料
131111 東工大授業「ロボット技術」資料131111 東工大授業「ロボット技術」資料
131111 東工大授業「ロボット技術」資料
 
ロボット用Open Source Software
ロボット用Open Source Softwareロボット用Open Source Software
ロボット用Open Source Software
 

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

Android + Runtime Environment
Android + Runtime EnvironmentAndroid + Runtime Environment
Android + Runtime Environment
三七男 山本
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
Jun Saito
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
Yasuhiro Ishii
 
Python Kyoto study
Python Kyoto studyPython Kyoto study
Python Kyoto study
Naoya Inada
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
 

Semelhante a イチからはじめるLuarida-マイコン (20)

Android + Runtime Environment
Android + Runtime EnvironmentAndroid + Runtime Environment
Android + Runtime Environment
 
Rubyの拡張をCrystalで書いてみる
Rubyの拡張をCrystalで書いてみるRubyの拡張をCrystalで書いてみる
Rubyの拡張をCrystalで書いてみる
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
 
Matlab演習
Matlab演習 Matlab演習
Matlab演習
 
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
 
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうかOedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
 
Ubuntuで始めるコンテナ技術入門
Ubuntuで始めるコンテナ技術入門Ubuntuで始めるコンテナ技術入門
Ubuntuで始めるコンテナ技術入門
 
Slide
SlideSlide
Slide
 
jvmlang.daitokai 1: ScalaはEdisonの夢を見る
jvmlang.daitokai 1: ScalaはEdisonの夢を見るjvmlang.daitokai 1: ScalaはEdisonの夢を見る
jvmlang.daitokai 1: ScalaはEdisonの夢を見る
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
 
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
 
Hello, Guava ! samples
Hello, Guava ! samplesHello, Guava ! samples
Hello, Guava ! samples
 
boost - std - C#
boost - std - C#boost - std - C#
boost - std - C#
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
 
diffの真髄
diffの真髄diffの真髄
diffの真髄
 
Python Kyoto study
Python Kyoto studyPython Kyoto study
Python Kyoto study
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 

Mais de 三七男 山本

Mais de 三七男 山本 (20)

GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0
GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0
GR-CITRUS搭載Rubyファームv2.47~の 説明資料 ver3.0
 
2018おうちハックLT小ネタ大会「小型ファンヒーターハック」
2018おうちハックLT小ネタ大会「小型ファンヒーターハック」2018おうちハックLT小ネタ大会「小型ファンヒーターハック」
2018おうちハックLT小ネタ大会「小型ファンヒーターハック」
 
mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.44~の説明
 
GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7
GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7
GR-CITRUS搭載Rubyファームv2.42~の 説明資料 ver2.7
 
GR-CITRUS リファレンス
GR-CITRUS リファレンスGR-CITRUS リファレンス
GR-CITRUS リファレンス
 
ミニハッカソンの作品製作 参考資料
ミニハッカソンの作品製作 参考資料ミニハッカソンの作品製作 参考資料
ミニハッカソンの作品製作 参考資料
 
GRデザインコンテスト2017 ファイナル説明資料
GRデザインコンテスト2017 ファイナル説明資料GRデザインコンテスト2017 ファイナル説明資料
GRデザインコンテスト2017 ファイナル説明資料
 
mruby搭載ボード GR-CITRUS の新しい開発環境の紹介
mruby搭載ボード GR-CITRUS の新しい開発環境の紹介mruby搭載ボード GR-CITRUS の新しい開発環境の紹介
mruby搭載ボード GR-CITRUS の新しい開発環境の紹介
 
ロボスピン組み立て手順
ロボスピン組み立て手順ロボスピン組み立て手順
ロボスピン組み立て手順
 
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
 
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
mruby搭載ボードGR-CITRUSのRubyファームVer2.35の説明
 
ロボムーバー組み立て手順
ロボムーバー組み立て手順ロボムーバー組み立て手順
ロボムーバー組み立て手順
 
GR-CITRUSハンズオン
GR-CITRUSハンズオンGR-CITRUSハンズオン
GR-CITRUSハンズオン
 
モータ制御基板 SAMBOU-KANとロボホンタンク
モータ制御基板 SAMBOU-KANとロボホンタンクモータ制御基板 SAMBOU-KANとロボホンタンク
モータ制御基板 SAMBOU-KANとロボホンタンク
 
ロボホンタンクを作る会
ロボホンタンクを作る会ロボホンタンクを作る会
ロボホンタンクを作る会
 
IoTLT 大阪 Vol.6
IoTLT 大阪 Vol.6IoTLT 大阪 Vol.6
IoTLT 大阪 Vol.6
 
Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2
 
ルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータ
 
GR-CITRUS用モータ基板の回路図
GR-CITRUS用モータ基板の回路図GR-CITRUS用モータ基板の回路図
GR-CITRUS用モータ基板の回路図
 
ET2016展示パネル
ET2016展示パネルET2016展示パネル
ET2016展示パネル
 

イチからはじめる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の実装 ルビーやりたい・・・。