タンサーボーグはネットタンサーの土台としても使われてますが、他の目的でも使えないか考えてみます。
まず、タンサーボーグとパソコンを専用ケーブルでつなぎ、ステータスを受け取ってみます。
↓タンサーボーグとパソコンとの通信プログラム1
;net tansor用tansor borgとの 通信プログラム1 for HSP 3 ;by takuya matsubara ;20バイトをひたすら受信する ;tansor borgには ;C:\Program Files\Bandai\NetTansor\writerフォルダのNTfarm.mot ;を書き込む #include "hspext.as" #define COMNUM 1 // ポート番号 sdim buf,32 screen 0,640,480,0,0,0 onexit *endbtn //終了ボタンを押した時のジャンプ先を指定します comopen COMNUM,"baud=9600 parity=N data=8 stop=1" //シリアルポートを初期化 if stat : dialog "COM"+COMNUM+"は使えません" : end i=0 buf="123456789ABCDEF01234" repeat stick k,0,1 if(k != 0):end comgetc a if(stat==0):continue if(a == 13){ if(i != 20){ //format error }else{ pos 0,440:print buf } pos 0,0:gcopy 0,0,20,640,(480-20) //scroll i=0 continue } if(i < 20){ poke buf,i,a i++ } loop stop //----------------------------------- *endbtn comclose ;シリアルポートとの通信を終了します end
↓タンサーボーグとパソコンとの通信プログラム2
;net tansor用tansor borgとの 通信プログラム2 for HSP 3 ;by takuya matsubara ;赤外線センサの情報、CDSの情報、サウンドセンサの情報を表示 ;tansor borgには ;C:\Program Files\Bandai\NetTansor\writerフォルダのNTfarm.mot ;を書き込む #include "hspext.as" #define COMNUM 1 // ポート番号 sdim buf,32 screen 0,640,480,0,0,0 onexit *endbtn //終了ボタンを押した時のジャンプ先を指定します comopen COMNUM,"baud=9600 parity=N data=8 stop=1" //シリアルポートを初期化 if stat : dialog "COM"+COMNUM+"は使えません" : end i=0 buf="123456789ABCDEF01234" repeat stick k,0,1 if(k != 0):end comgetc a if(stat==0):continue if(a == 13){ if(i != 20){ //format error }else{ a = peek(buf,1):gosub *atoi:irr = a //IR sensor right a = peek(buf,2):gosub *atoi:irm = a //IR sensor mid a = peek(buf,3):gosub *atoi:irl = a //IR sensor left a = peek(buf,4):gosub *atoi:cdsr = a * 16 a = peek(buf,5):gosub *atoi:cdsr = vol +a a = peek(buf,6):gosub *atoi:cdsl = a * 16 a = peek(buf,7):gosub *atoi:cdsl = vol +a a = peek(buf,14):gosub *atoi:vol = a * 16 a = peek(buf,15):gosub *atoi:vol = vol +a pos 0,440:print "IR右="+irr+" IR中央="+irm+" IR左="+irl+" CDS右="+cdsr+" CDS左="+cdsl+" 音="+vol } pos 0,0:gcopy 0,0,20,640,(480-20) //scroll i=0 continue } if(i < 20){ poke buf,i,a i++ } loop stop //-----------------------------------(PC→TB) *atoi if((a >= 0x30)and (a <=0x39)){ a = a -0x30 return } if((a >= 0x41)and (a <=0x46)){ a = a -0x41 a=a+10 return } if((a >= 0x61)and (a <=0x66)){ a = a -0x61 a=a+10 return } a=0 return //----------------------------------- *endbtn comclose ;シリアルポートとの通信を終了します end
実行するとこんな感じ。
さきほどの意味不明な20バイトはセンサの生データだったわけです。
最初の3つ「IRxxx」は赤外線センサの反応(0〜5)です。物体が近づくほど値が上がります。
「CDS」というのはCDSの値。可視光の明るさです。
「音」っていうのは、音センサの値です。大きな音を検出すると値が上がります。
↓タンサーボーグとパソコンとの通信プログラム3
;net tansor用tansor borgとの 通信プログラム3 for HSP 3 ;by takuya matsubara ;キーボードのカーソルを押すと移動コマンド発行 ;[esc]で終了 ;tansor borgには ;C:\Program Files\Bandai\NetTansor\writerフォルダのNTfarm.mot ;を書き込む #include "hspext.as" #define COMNUM 1 // ポート番号 sdim buf,32 sdim tbuf,20 screen 0,640,480,0,0,0 onexit *endbtn //終了ボタンを押した時のジャンプ先を指定します comopen COMNUM,"baud=9600 parity=N data=8 stop=1" //シリアルポートを初期化 if stat : dialog "COM"+COMNUM+"は使えません" : end i=0 buf="123456789ABCDEF01234" repeat stick k,0,1 if(k & 1):gosub *send_l //left if(k & 2):gosub *send_f //up if(k & 4):gosub *send_r //right if(k & 8):gosub *send_b //down if(k == 128):end comgetc a if(stat==0):continue if(a == 13){ if(i != 20){ //format error }else{ } i=0 continue } if(i < 20){ poke buf,i,a i++ } loop stop //-----------------------------------(PC→TB) *send_f tbuf = "fd,10,10" // goto *send_xx *send_b tbuf = "bk,10,10" // goto *send_xx *send_l tbuf = "lt,10,90" // goto *send_xx *send_r tbuf = "rt,10,90" // goto *send_xx *send_xx comput tbuf computc 13 //改行 pos 0,440:print tbuf pos 0,0:gcopy 0,0,20,640,(480-20) //scroll wait 100 return //----------------------------------- *atoi if((a >= 0x30)and (a <=0x39)){ a = a -0x30 return } if((a >= 0x41)and (a <=0x46)){ a = a -0x41 a=a+10 return } if((a >= 0x61)and (a <=0x66)){ a = a -0x61 a=a+10 return } a=0 return //----------------------------------- *endbtn comclose ;シリアルポートとの通信を終了します end
実行するとこんな感じ。これで、パソコンからタンサーボーグを操縦できます。
「fd〜」とか「bk〜」とかいうのが、タンサーボーグへ渡すコマンドです。ネットタンサー用のファームを入れた時の特別仕様です。
詳しいことは、「C:\Program Files\Bandai\NetTansor\doc」のプログラミングガイドに載ってます。
受信してる20バイトは全部捨ててます。
で、ここからが本題です。
これと同じことをEDU mk2+NicoBASICでやってみました。プログラムは次のとおりです。
60 IF SW AND 8 THEN STX "rt,10,90\r" 70 IF SW AND 4 THEN STX "lt,10,90\r" 80 IF SW AND 2 THEN STX "bk,10,5\r" 90 IF SW AND 1 THEN STX "fd,10,5\r" 100 for i=0 to 200 110 next 140 GOTO 60
7行だけです。「STX」というのは勝手に考えたシリアル送信用の命令です。
「\r」って書き方がBASICじゃないですが、まあ見逃してください。
EDU mk2についてるシリアルポート(RS232C)をクロスさせて、タンサーボーグにつなぎます。
実行後にEDU mk2側のスイッチを押すとタンサーボーグが動きます。
↓次にNicoMotorにタンサーボーグと同じコマンド体系を実装して、タンサーボーグに化けさせます。
NicoMotorにもRS232Cが付いてるので、これをネットタンサーの土台として置き換えることが可能、なはず(まだ未確認)。
いったい何がやりたいか、よくわからないと思いますが、
この技術を応用して迷路を解くようなロボットを作ってみたいと思います。