目次
#contents

* 参考文献・参考サイト [#pf5ddac6]

-LEGO社のキット紹介ページ
--http://www.legoeducation.us/eng/product/lego_mindstorms_education_nxt_base_set/2095
-NBC/NXCの入手
--http://bricxcc.sourceforge.net/nbc/
-ドキュメント
--NBCガイド http://bricxcc.sourceforge.net/nbc/doc/NBC_Guide.pdf (2200ページ以上ある)
--NXCチュートリアル http://bricxcc.sourceforge.net/nbc/nxcdoc/NXC_tutorial.pdf
--NXCチュートリアル (日本語版) http://www.cc.toin.ac.jp/sc/palacios/courses/undergraduate/freshman/micro_intro/NXCtutorial_j.pdf
--APIライブラリ関数一覧 (日本語訳 by 高本さん) http://www2.ocn.ne.jp/~takamoto/NXCAPIfunction.pdf -- とても便利です。

* NXCのよく使う命令 [#le35bc79]
** モータ関連 [#df4361b3]

 OnFwd(OUT_A,75);  // モータAを最速の75%のスピードで前転させる

 OnRev(OUT_AC,75);  // モータAとモータCを最速の75%のスピードで後転させる

 Off(OUT_AC);  // モータAとモータCを止める

 Float(OUT_A); // モータAにトルクをかけない

 RotateMotor(OUT_A, 75, 45); // モータAを75%のスピードで45度前転

 RotateMotor(OUT_A, -75, 45); // モータAを75%のスピードで45度後転

-参考ページ
-- http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/group___output_module_functions.html

** センサー関連のコマンド [#zcaa0e8b]

*** 設定 [#s3c3468b]
 SetSensorTouch(IN_1); // ポート1にタッチセンサ

 SetSensorLight(IN_2); // ポート2に光センサ

 SetSensorSound(IN_3); // ポート3にサウンドセンサ

 SetSensorLowspeed(IN_4); // ポート4に超音波センサ

*** センサーの値 [#ge3b55cf]
 int d = SensorUS(IN_4); // ポート4につないだ超音波センサの値(単位cm)を変数 d に代入

** マクロ・関数・サブルーチンの定義 [#ke1ca3c0]

マクロはNQCと同様。サブルーチンはNQCと違い、引数をとることができる。

 sub turn_left(int pwr)
 {
     OnRev(OUT_A,pwr); OnFwd(OUT_C,pwr);
     ....
 }

関数もNQCとは違い、インライン関数ではなく、void 以外の型 (整数型やストリング型)を取ることができる。つまり、sub は void とまったく同じ。

NQCの関数に相当するのは、インライン関数で inline というキーワードが必要。

 inline void turn_left()  // NQCと違って inline というキーワードも必要
 {
     ....
 }

** 音 [#id5ea688]
NQCと同じ PlayTone の他、PlayToneEx(周波数, 時間, ボリューム, ループするか?) も使える。
 PlayTone(440, 500, 3, False);  // 440Hzの音を0.5秒間鳴らす(ボリュームは3)

その他、PlayFileEx(ファイル名, ボリューム, ループするか?) でサウンドファイルも演奏できる。

** NXT同士の通信 [#k205e06d]
チュートリアルの42ページを参考に。
Bluetoothで合計4台(master1台,slave3台)のNXTが接続可能。masterはline 0, slaveはline 1〜3に割り当てられる(以下の conn)。queueのところにはメールボックスの番号(0〜9 または MAILBOX1〜MAILBOX10)が入る。

 BluetoothStatus(conn) // 接続をチェックする関数

 SendRemoteBool(conn,queue,bval); // slaveにブール値を送る (master側)
 SendRemoteNumber(conn,queue,val); // slaveに数値を送る (master側)
 SendRemoteString(conn,queue,string); // slaveに文字列を送る (master側)

 SendResponseBool(queue,bval); // メールボックスにブール値を書き込む (slave側)
 SendResponseNumber(queue,val); // メールボックスに数値を書き込む (slave側)
 SendResponseString(queue,str); // メールボックスに文字列を書き込む (slave側)

 ReceiveRemoteBool(queue,clear,bval); // slaveのメールボックスからブール値を読み込む (master側)
 ReceiveRemoteNumber(queue,clear,val); // slaveのメールボックスから数値を読み込む (master側)
 ReceiveRemoteString(queue,clear,str); // slaveのメールボックスから文字列を読み込む (master側)

 RemoteStartProgram(conn,filename); // slaveのプログラムを起動
 RemoteStopProgram(conn,filename); // slaveのプログラムを停止
 RemotePlayTone(conn,freq,duration); // slaveのサウンドを鳴らす
 RemoteRestMotorPosition(conn,port,clear); // slaveのモータをリセット

* GNU/Linux上でのインストール方法 [#n4a2d7cd]

 $ wget http://downloads.sourceforge.net/bricxcc/nbc-1.2.1.r3.src.tgz
 $ mkdir nbc-1.2.1.r3
 $ cd nbc-1.2.1.r3
 $ tar zvxf ../nbc-1.2.1.r3.src.tgz
 $ make
 $ sudo mv NXT/nbc /usr/local/bin/
 $ sudo mkdir -p /usr/local/share/man/man1
 $ sudo gzip -c doc/nbc.1 > /usr/local/share/man/man1/nbc.1.gz

* Firmwareの更新方法 [#adbcfd0b]

-NXTをFirmware更新モードにするには、電源を入れた状態で背面のリセットボタン(USB端子のすぐ近く)を5秒押しつづける。すると小さなプッ、プッ、プッ、という音が聞こえるようになる。
-Firmwareの入手 (LEGO社からダウンロード)
-- http://mindstorms.lego.com/en-us/support/files/default.aspx
のFirmwareメニューからダウンロードして解凍(unzip)すると "LEGO MINDSTORMS NXT Firmware V1.28.rfw" のような名前のFirmwareができる。
-Debian GNU/Linux (squeeze)上でlibnxt(Firmware更新ツール)を使う
 # apt-get install libusb-0.1-4  scons
 $ wget http://libnxt.googlecode.com/p/files/libnxt-0.3.tar.gz
 $ tar zvxf libnxt-0.3.tar.gz
 $ cd libnxt-0.3
 $ scons
 $ ./fwflash "Firmwareのファイル名"



2012年2月25日からのこのページのだいたいの訪問者数:
本日&counter(today);
昨日&counter(yesterday);
合計&counter(all);

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS