Hobby

レゴやプラモやおもちゃ

LEGO MINDSTORMS

1998/10/30

●Spirit.ocxの勘どころ

Downloadコマンドがない!?

プログラムを書いて、さぁRCXへDownloadしよう...と思ったら、Downloadするメソッドが見つかりません。(^^;
Spirit.ocxでは、RCXの制御メソッドを実行すると、その時点でRCXへコマンドを送り、即実行します。例えば、
	Spirit1.PlaySystemSound(4)
この文を実行すれば、RCXから即座に音が出ます。これをプログラムにするとこうなります。
	Spirit1.SelectPrgm(3) ' Prgm slot #4を指定
	Spirit1.BeginOfTask(0)
	Spirit1.PlaySystemSound(4)
	Spirit1.EndOfTask()
BeginOfTask(またはBeginOfSub)を実行すると、それ以降のコマンドが貯えられ、EndOfTask(またはEndOfSub)が呼び出された時点で、所定のslotへいっきにDownloadされるわけです。
ちなみに、毎行「Spirit1.」と書くのは面倒な場合は、Withを使うとすっきりします。
	With Spirit1
		.SelectPrgm(3)
		.BeginOfTask(0)
		.PlaySystemSound(4)
		.EndOfTask()
	End With
Source, Numberのペアとは?

変数に値を代入するSetVarコマンドの引数は、次の通りです。
	Function SetVar(VarNo As Integer, Source As Integer, Number As Integer) As Boolean
RCXには、32個のグローバル変数エリアがあります。VarNoで、値を代入する変数のNo.(0〜31)を指定します。それでは、SourceとNumberは何でしょう? ここで、Memory Locationsのテーブルを参照ください。これが、Spirit.ocxで最も解りつらかった所です。

Sourceは、テーブルの縦のインデックス、Numberは横のインデックスと考えてください。Source, Numberのペアで、グローバルメモリの1つの要素を指定するわけです。ただし、Source = 2 の場合は、Numberの数値そのもの(即値)を示します。いくつか例を示しましょう。
	.SetVar(0, 0, 1) 'var#0 = var#1
	.SetVar(0, 2, 1) 'var#0 = 1
	.SetVar(0, 4, 8) 'var#0 = 0〜8の乱数
	.SetVar(0, 9, 1) 'var#0 = Sensor#2の値
ところで、PlayToneコマンドの引数は、次の通りです。
	Function PlayTone(Frequency As Integer, Time As Integer) As Boolean
Source, Numberペアが使われていません。このため、PlayToneで鳴らす音色は即値で指定するしかなく、例えば明るさの値から計算してToneを変える、という様なことは残念ながら不可能なわけです。

ProgramをRunする

Downloadしたあと、いちいちRunボタンを押すのは結構面倒ですよね?
Spirit.ocxを使えば、簡単に所定のプログラムを実行できます。
	.SelectPrgm(4)
	.StartTask(0)
実は、こうすればRunできるのに気づいたのはつい昨日のことだった。(^^;

★この続きは近日中に★

とりあえずVBでサンプルプログラムを作りました。ありがちなTest Panel+αで、テストプログラムをDownload可能になっています。サンプルプログラムのダウンロードは、次のページで。
前のページ