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 WithSource, Numberのペアとは?
変数に値を代入するSetVarコマンドの引数は、次の通りです。
Function SetVar(VarNo As Integer, Source As Integer, Number As Integer) As BooleanRCXには、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 BooleanSource, Numberペアが使われていません。このため、PlayToneで鳴らす音色は即値で指定するしかなく、例えば明るさの値から計算してToneを変える、という様なことは残念ながら不可能なわけです。
ProgramをRunする
Downloadしたあと、いちいちRunボタンを押すのは結構面倒ですよね?
Spirit.ocxを使えば、簡単に所定のプログラムを実行できます。
.SelectPrgm(4) .StartTask(0)実は、こうすればRunできるのに気づいたのはつい昨日のことだった。(^^;
★この続きは近日中に★
とりあえずVBでサンプルプログラムを作りました。ありがちなTest Panel+αで、テストプログラムをDownload可能になっています。サンプルプログラムのダウンロードは、次のページで。
前のページ