7 接続開始・終了

7.1 setup-nxt関数

書式: (setup-nxt &optional bluetooth bluetooth-timeout )

引数:

bluetooth nil 以外なら,USB非接続時にbluetoothの接続を試みる.デフォルトは nil
bluetooth-timeout — Bluetooth接続時のタイムアウトの時間(秒).デフォルトは10.

解説:
MINDSTORMS NXTとの接続を開始します.接続に成功した場合 t を,失敗した場合 nil を返します.

7.2 destroy-nxt関数

書式: (destroy-nxt )

解説:
MINDSTORMS NXTとの接続を終了します.返り値は常に nil です.

8 音の再生

8.1 play-tone関数

書式: (play-tone hz duration )

引数:

hz — 周波数.200以上14000以下の整数.
duration — 音の長さ[ms].0以上65535以下の整数.

解説:
hz で指定した高さの音を duration で指定した長さだけ鳴らします.

8.2 play関数

書式: (play string )

引数:

string — 楽譜を表す文字列.Music Macro Language (MML)で記述.

解説:
与えられた楽譜に従って音楽を演奏します.以前に実行したplay関数の演奏がまだ残っている場合は,その終了を待ってから演奏を開始します (play-tone関数による再生は中断されます) .楽譜は以下のコマンドを並べた文字列で記述し,それらのコマンドが順に解釈実行されます.

8.3 initialize-player関数

書式: (initialize-player )

解説:
play関数の O , L , T コマンドで変更されたパラメータを初期値に戻します.
(play "OLT") = (play "O4L4T120")
を実行するのとほぼ同じです.

8.4 playing?関数

書式: (playing? )

解説:
NXTがplay関数による演奏中なら t ,そうでなければ nil を返します.

9 電源管理

9.1 keep-alive関数

書式: (keep-alive get-sleep-time )

引数:

get-sleep-time nil 以外を与えるとスリープまでの時間を獲得する.デフォルトは nil

解説:
NXTは一定時間ボタンの操作をしないと自動的に電源が切れる (スリープする) ようになっていますが,この関数はスリープまでの時間をリセットします. get-sleep-time nil 以外を与えると,返り値として,スリープするまでの時間をms単位で返します. nil の場合は-1を返します. (スリープまでの時間は,本体のボタン操作により変更可能です)

9.2 battery関数

書式: (battery )

解説:
NXTのバッテリーレベルをmV (ミリボルト) 単位で返します.

10 モータ

10.1 motor関数

書式: (motor port speed &optional distance )

引数:

port — モータのポート番号. :a , :b , :c または0〜2の整数で指定.
speed — モータのスピードを指定する整数,あるいは :max-speed , :off , :brake のいずれかの記号.
distance — 移動距離を指定する整数または nil speed :brake 以外のときのみ有効.デフォルトは nil

解説:
モータに動作を指示します.
どのモータに指示を与えるかは, :a , :b , :c (それぞれ本体のA, B, Cポートに対応.) で指定します. :a , :b , :c の代わりにそれぞれ0, 1, 2で指定することもできます.
speed に整数を指定すると,指定したモータをその速さに設定します.指定できる整数の絶対値の最大値は,変数 *max-speed* で定義されています.0の代わりに :off *max-speed* の値の代わりに :max-speed を指定することもできます.
:brake を指定するとモータにブレーキをかけます.
distance に数を指定すると,その距離だけモータが回転した時点で自動的に停止します.単位はモータの回転角度 (度) です.指定できる絶対値の最大は4294967295 (=#xFFFFFFFF)です.
speed , distance には負の値を指定することもできます.速さや移動距離は絶対値が参照されますが,どちらか片方のみが負の値の場合は,回転方向が逆になります.

10.2 motor-reset関数

書式: (motor-reset )

解説:
全てのモータにブレーキをかけます.
(mapc #'(lambda (port) (motor port :brake)) '(:a :b :c))
を実行するのとほぼ等価です.

10.3 motor-state関数

書式: (motor-state port )

引数:

port — モータのポート指定. mortor 関数と同様.

解説:
指定したポートのモータの状態を,
( (:status . integer )
 
(:port . integer )
 
(:power-set . integer )
 
(:mode . integer )
 
(:reg-mode . integer )
 
(:turn-ratio . integer )
 
(:runstate . integer )
 
(:tacho-limit . integer )
 
(:tacho-count . integer )
 
(:block-tacho-count . integer )
 
(:rotation-count . integer )
 
)
の形式の連想リストとして返します.それぞれの値の意味は, Executable File and Bytecode Reference の47ページ以降を参照してください.

10.4 motor-running?関数

書式: (motor-running? port )

引数:

port — モータのポート指定. mortor 関数と同様.

解説:
指定したポートに接続されているモータが動いていれば t ,止まっていれば nil を返します.

11 入力センサー

11.1 ライトセンサー

11.1.1 light-on関数

書式: (light-on port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートをライトセンサー用にセットアップし,接続されているライトセンサーのLEDを点灯させます.

11.1.2 light-off関数

書式: (light-off port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートをライトセンサー用にセットアップし,接続されているライトセンサーのLEDを消灯させます.

11.1.3 light関数

書式: (light port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートに接続されているライントセンサーが感知している明るさを0〜1023の整数値で返します.数値が大きいほど明るいことを表わします. 実行前に,対応するポートに対してlight-on関数またはlight-off関数を実行しておく必要があります.

11.2 角度センサー

11.2.1 rotation-on関数

書式: (rotation-on port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートをRCXの角度センサー用にセットアップします.

注記:
実装者の手元に角度センサーがないため,この関数の動作は未確認です.

11.2.2 rotation関数

書式: (rotation port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートに接続されているRCXの角度センサーの値を0〜65535の範囲内の整数で返します. 実行前に,対応するポートに対してrotation-on関数を実行しておく必要があります.

注記:
実装者の手元に角度センサーがないため,この関数の動作は未確認です.

11.3 温度センサー

11.3.1 temparature-on関数

書式: (temparature-on port &optional scaling )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)
scaling :celcius , :fahrenheit のいずれかを指定.デフォルトは :celcius

解説:
指定した入力ポートを温度センサー用にセットアップします. scaling にはキーワード :celcius , :fahrenheit のいずれかを指定でき,temparature関数が返す値の単位がそれぞれ摂氏,華氏になります (ただしいずれも0.1度単位) .これら以外の値を指定するとエラーになります.

注記:
実装者の手元に温度センサーがないため,この関数の動作は未確認です.

11.3.2 temparature関数

書式: (temparature port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートに接続されている温度センサーの値を返します. 実行前に,対応するポートに対してtemparature-on関数を実行しておく必要があります.
測定値の単位は,直近に実行したtemparature-on関数での指定に従い,範囲は,摂氏の場合-200〜700,華氏の場合-400〜1580の間です.

注記:
実装者の手元に温度センサーがないため,この関数の動作は未確認です.

11.4 タッチセンサー

11.4.1 touch-on関数

書式: (touch-on port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートをタッチセンサー用にセットアップします.

11.4.2 touched?関数

書式: (touched? port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートに接続されているタッチセンサーが何かに触れていれば t ,触れていなければ nil を返します. 実行前に,対応するポートに対してtouch-on関数を実行しておく必要があります.

11.5 距離センサー

11.5.1 distance-on関数

書式: (distance-on port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートを距離センサー用にセットアップします.

11.5.2 distance関数

書式: (distance port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートに接続されている距離センサーの値を0〜255の範囲内の整数で返します. 実行前に,対応するポートに対してdistance-on関数を実行しておく必要があります.

11.6 サウンドセンサー

11.6.1 sound-on関数

書式: (sound-on port &optional scaling )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)
scaling :db , :dba のいずれかを指定.デフォルトは :dba

解説:
指定した入力ポートをサウンドセンサー用にセットアップします. scaling にはキーワード :db , :dba のいずれかを指定でき,sound関数が返す値の単位がそれぞれdB,dBAになります.これら以外の値を指定するとエラーになります.

11.6.2 sound関数

書式: (sound port )

引数:

port — 入力ポート番号.1〜4の整数で指定 (対応する番号の入力ポートに対応)

解説:
指定した入力ポートに接続されているサウンドセンサーの値を返します. 実行前に,対応するポートに対してsound関数を実行しておく必要があります.
測定値の単位は,直近に実行したsound関数での指定に従い,範囲は0〜1023です.

12 イベントハンドラ

12.1 wait-untilマクロ

書式: (wait-until form &optional interval )

引数:

form — Lispフォーム
interval form の真偽を確認する間隔を秒単位で指定.デフォルトは *check-interval*

解説:
まず interval を評価し,その返り値の間隔毎に form を,返り値が nil 以外になるまで繰り返し評価します.
最後に評価した form の返り値が,wait-until自身の返り値になります.

12.2 with-watcher1マクロ

書式: (with-watcher1 ( handler &body event ) &body body )

引数:

handler — Lispフォーム. event が起動される条件.
event — Lispフォームのリスト. handler が真になると実行される.
body — Lispフォームのリスト.実行本体.

解説:
ウォッチャースレッドを新たに作成・起動した後, body を実行します.ウォッチャースレッドは body の実行と並行して, *check-interval* の値 (秒) の間隔ごとに handler を評価し,値が真であれば event を評価するということを繰り返します. event の実行中,本体 body の実行は中断されます.
ウォッチャープロセスは,制御がwith-watcherを脱出する際 (非局所脱出の場合も含む) にkillされます.
正常に body の実行が終了した場合は,その最後のフォームの評価結果がwith-watcher1の返り値になります.

12.3 with-watcherマクロ

書式: (with-watcher handler-list &body body )

引数:

handler-list — 各要素が, ( handler event ) である0要素以上のリスト. handler はLispフォーム. event はLispフォームのリスト.
body — Lispフォームのリスト.

解説:
複数のウォッチャープロセスを同時に指定できるwith-watcher1です. handler-list が空リストの場合は
(progn body )
1つ以上の要素を含む場合は,
(with-watcher1 handler 0 (with-watcher ( handler 1 handler 2 ... ) body ))
(ただし, handler-list = ( handler 0 handler 1 ... )
と等価です.