|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"LEGO MindStorms"
MindStormsはMes18で話題になっているようでしたがサンプルがまだ上がって
いないので、『石』ですがアップします。
MindStormsは、いわゆるレゴブロックのLEGO社が発売した、プログラミング可能
なレゴ! です。以下のようなものが含まれています。
・RCX:アナログ3入力/3出力の8ビットマイコン+赤外線受/発光部+電池
・モータ、タッチセンサ、光センサ
・レゴの基本部品、歯車、リンク機構等700個以上の部品
・パソコン側のチュートリアルプログラム、開発環境等のソフトウェア
・パソコン側の赤外線受/発光ユニット
とにかくたまらんおもちゃので、詳しくは「MindStorms情報局」をご覧下さい。
http://www.mi-ra-i.com/JinSato/MindStorms/index.html
パソコン側のソフトウェアには、Spirit.OCXというActiveXが含まれるので、こ
れをDelphiに取り込めば、以下のサンプルのようにしてDelphiからコントロール
が出来ます。ドキュメントは
http://www.legomindstorms.com/
の「Software Development Kit」でダウンロードして下さい。
procedure TForm1.Button1Click(Sender: TObject);
begin
Spirit1.ComPortNo := 2; //適宜変更して下さい。
//IRユニットの初期化
Spirit1.InitComm;
//RCXはプログラムを5本格納出来ます。どこに格納するかの指定。(0-4)
Spirit1.SelectPrgm(0);
//BeginOfTask〜EndOfTask までが、RCXにダウンロードされるプログラム
//です。
Spirit1.BeginOfTask(0);
//50×10ms そのまま。「2」の意味は脚注参照
Spirit1.Wait(2, 50);
//モータ0,2のパワーを7=最大に。同じく「2」の意味は脚注参照
Spirit1.SetPower('Motor0 Motor2',2, 7);
//モータ0,2を順方向に
Spirit1.SetFwd('Motor0 Motor2');
//モータ0,2をON。
Spirit1.On_('Motor0 Motor2');
//300×10ms そのまま。
Spirit1.Wait(2, 300);
//モータ0,2を逆方向に回転
Spirit1.SetRwd('0 2');
Spirit1.Wait(2, 300);
//モータ0,2をOff。
Spirit1.Off('Motor0 Motor2');
//音を鳴らす。1000Hz、100×10ms
Spirit1.PlayTone(1000,100);
Spirit1.EndOfTask;
end;
これで6本足メカがうぎうぎと前後に歩いてピーと鳴きます(笑)。
脚注:
Spirit.OCXのメソッドは、パラメータとして「Source」をとるものが有ります。
これは以下のような意味です。(詳しくはドキュメント参照)
0:Variable:内部変数。32個ある。
1:Timer
2:Constants
3:Motor Status
4:Ramdom Number
…
つまりWait(2,300)ならば定数で300×10ms、という指定になります。
Loop(0,12)なら内部変数の12番の値だけループ、です。
PS1. 自作センサーにチャレンジしたいけれど、一個しか無い光センサーをばら
して解析するのはキビシイものが…。仕様が分かれば、キーエンスのセンサーが
買えるのでいろいろ出来そうなんですが。
PS2. RCXをカスケード接続したら面白そうなので、来週アメリカ行く機会に
もう一つ買いたいです(仕事なのに(^^;)。5入力5出力に出来るかな?
http://member.nifty.ne.jp/toyozou
99/02/14(日) 09:33 とよぞう(PXW07530)
Original document by とよぞう 氏 ID:(PXW07530)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|