水曜日 5 28, 2008

[ English version is here ]

サーボ用の簡単な Sun SPOT プログラムを書いてみましょう。まず ${SUNSPOT_DIRECTORY}/Demos ディレクトリ内の "SunSpotApplicationTemplate" を Sun SPOT プロジェクトのひな形として使用しましょう(${SUNSPOT_DIRECTORY} は Windows では通常 "C:\Program Files\Sun\SunSPOT" ですが、ここの blog 通り試された場合は "C:\Sun\SunSPOT" になっているかもしれません)。

デモをまだインストールしていない場合は前回同様 web からダウンロードできます(Sun SPOT SDK のインストール を参照ください)。以下にデモのインストール方法について簡単にまとめておきます。

  1. http://www.sunspotworld.com/spotmanager/ にアクセス後、Sun SPOT icon をクリックし Sun SPOT Manager tool を立ち上げる
  2. "SDKs" タブを選択する
  3. 右下(Available SDKs の下)の "Demos" アイコンをクリック
  4. "Demo Installer" パネルの "Install" を押す

デモをインストール後、${SUNSPOT_DIRECTORY}/Demos/CodeSamples/SunSpotApplicationTemplate ディレクトリを適当な作業ディレクトリにコピーしてください。

$ mkdir ~/work
$ cp -r ${SUNSPOT_DIRECTORY}/Demos/CodeSamples/SunSpotApplicationTemplate ~/work/ServoTest
$ cd ~/work/ServoTest
そしてエディタで src/org/sunspotworld/demo/SunSpotApplication.java を以下のように編集してください。
  1. L.56 "long ourAddr = .." から L.66 ("notifyDestroyed();" の上まで)を削除
  2. 以下のコードを追加(太字部分)
<..snip..>
import com.sun.spot.sensorboard.peripheral.ITriColorLED;
import com.sun.spot.sensorboard.peripheral.Servo;
import com.sun.spot.peripheral.radio.IRadioPolicyManager;
<..snip..>
public class SunSpotApplication extends MIDlet {
private static final int CENTER = 1500;
private static final int RANGE = 1000;

private ITriColorLED [] leds = EDemoBoard.getInstance().getLEDs();

protected void startApp() throws MIDletStateChangeException {
System.out.println("Hello, world");
new BootloaderListener().start(); // monitor the USB (if connected) and recognize commands from host

EDemoBoard demo = EDemoBoard.getInstance();
Servo serv0 = new Servo(demo.getOutputPins()[EDemoBoard.H0]);
Servo serv1 = new Servo(demo.getOutputPins()[EDemoBoard.H1]);
serv0.setValue(0);
serv1.setValue(0);
Utils.sleep(500);

for (int i = 0; i < 4; i++) {
int r = (i % 2 == 0) ? RANGE / 2 : -RANGE / 2;
serv0.setValue(CENTER + r);
serv1.setValue(CENTER - r);
System.out.println("serv0 value: " + serv0.getValue());
System.out.println("serv1 value: " + serv1.getValue());
Utils.sleep(2000);
serv0.setValue(0);
serv1.setValue(0);
}

notifyDestroyed(); // cause the MIDlet to exit
}
<..snip..>
}

その後 "ant jar-app" を用いてプロジェクトをビルドします。このコマンドはプロジェクト以下のすべてのコードをコンパイルし、"suite" ディレクトリ以下に jar ファイルを作成します。

$ ant jar-app
$ ls suite
SunSpotApplicationTemplate_1.0.0.jar
この jar ファイルを Sun SPOT Servo Car (configured before) にデプロイ(配備)しアプリケーションを実行させてみましょう。そのためには Sun SPOT と PC を USB ケーブルで接続した後、以下のコマンドを実行してください。
$ ant deploy
<..snip..>
deploy:

BUILD SUCCESSFUL
Total time: 8 seconds
$ ant run
<..snip..>
-run-spotclient-once:
[java] SPOT Client starting...
[java] [waiting for reset]

[java] Local Monitor (purple-071018)
[java] SPOT serial number = 0014.4F01.0000.01A8


[java] ** VM stopped: exit code = 0 **


[java] Squawk VM Starting (purple-071018)...
[java] [NetManagementServer] starting on port 20
[java] Hello, world
[java] serv0 value: 2000
[java] serv1 value: 1000
[java] serv0 value: 1000
[java] serv1 value: 2000
[java] serv0 value: 2000
[java] serv1 value: 1000
[java] serv0 value: 1000
[java] serv1 value: 2000


[java] ** VM stopped: exit code = 0 **


[java] Exiting

-run-spotclient-multiple-times-locally:

-run-spotclient:

-post-run:

run:

BUILD SUCCESSFUL
Total time: 14 seconds

ひとつのサーボが時計回り(2秒)、反時計回り(2秒)、時計回り(2秒)、反時計回り(2秒)の順で回転し、他方のサーボがその逆方向に回転すればプログラムは正しく Sun SPOT にデプロイされています。次回はこのコードをもう少し詳しくみていきましょう。
投稿されたコメント:

コメント
  • HTML文法 不許可