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しています。