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

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

LuaridaとMicroBridgeの接続

PIC ADB MicroBridgeボードとAndroidを接続して、Luaridaのsockコマンドを使ってLEDをチカチカさせてみました。

PICのプログラム

PICのMicroBridgeのプログラムの抜粋です。tcpForward()という関数にポート番号を入れると、USB接続されたAndroidに対して、adb forwardコマンドが発行され、そのポートに接続したときのConnect構造体のポインタが返って来ます。
あとは、無限ループでAndroid側から送られてくる情報をひたすらポーリングして、送られてきたデータについて、ひたすらLED接続ポートをHigh, Lowしているだけです。

  AdbC = tcpForward("60101");
  LATBbits.LATB2 = 0;     //LED_OFF

  AdbDataReceiveFlg = false;
  while(1){
    AdbDataReceiveFlg = false;
    while(AdbDataReceiveFlg == false){
      ADB_poll(AdbC);
    }
    if( RecvData[0]==0 ){
      LATBbits.LATB2 = 0;     //LED_OFF
    }
    else{
      LATBbits.LATB2 = 1;     //LED_ON
    }
    DelayMs(1);
}

Luaridaプログラム

Luaridaのプログラムは、sock.nlistenOpenコマンドで60101ポートからの接続を待ち、接続できたならタイミングにあわせて0と1を送信するだけのプログラムです。同期も何も取っていません。

------------------------------------------
-- LEDチカチカ
------------------------------------------
function main()
  --画面のサイズを取得
  local w,h = canvas.getviewSize()

  canvas.drawCls( color(0,0,255) ) --背景を青色に
  system.setSleep(0) --スリープしない
  dialog( "","MicroBridgeからの接続を待ちます",  1 )

  local num = 1 --1と2 の2つまで同時にセッションが張れます。
  --60101ポートへの接続を20秒間待つ
  local ret = sock.nlistenOpen( num, 60101, 20 ) 
  if( ret~=1 )then
    dialog( "接続に失敗しました", "終了します" , 1 )
    system.exit()		
  end

  --接続できたことを表示する
  canvas.drawTextCenter( "MicroBridgeと", w/2, h/2-65, 60, color(255,255,255))
  canvas.drawTextCenter( "接続しました", w/2, h/2, 60, color(255,255,255))

  local psec = 0
  local sw = 0
  while( true )do
    psec = system.getSec() + 0.5
    while psec>system.getSec() do  end
    sock.nsend( num, string.char(sw), 1 ) 
    sw = 1 - sw
  end

end
main()
system.exit()

psec = system.getSec() + 0.5の式で Waitを計算しています。足しこむ数値が点滅秒数となります。
下の動画は、0.5s, 100ms, 50ms, 10ms, 1ms, 最高速の順に点滅させたものです。
動画見て気づいたけれど、「MicroBridgeからの接続を待ちます接続します」になってる。恥ずかしい。1msにしたときに、処理がうまく合わないのか、点滅が微妙になりますね。Wait無しにしたときは点滅しませんね。
socket送信がwhileで無限ループしているので、直接JotaTextEditorに戻らないで、都度、タスクキラーでLuaridaタスクをKillしています。