Gainer向けProcessingコードをNetBeansでコンパイル、実行する。

さて、本日はNetBeans上でGainer向けプログラムをコンパイル、実行していきます。

今回の動作の様子です。


さて、それではやっていきましょう。なお、今回はNetBeans 6.1 Betaの試用もかねているため、NetBeans が英語になっています。それほど差はないと思われますが環境に合わせてご覧ください。*1


まず始めに、ライブラリを追加します。
プロジェクトの"ライブラリ"を右クリックしてJARライブラリを追加します。

追加するのは、

アプリケーション/Processing 0135/libraries/gainer/library/gainer.jar
アプリケーション/Processing 0135/libraries/serial/library/RXTXcomm.jar

です。


追加すると、プロジェクトのライブラリの一覧が以下のようになります。


また、実行に必要なJNIライブラリも追加します。
これは、JavaのPathを通すだけでもよいのですが、今回はNetBeansのプロジェクトフォルダ内にコピーします。

アプリケーション/Processing 0135/libraries/serial/library/librxtxSerial.jnilib

このJNIライブラリを、プロジェクトフォルダの直下にコピーします。(このjniライブラリは、実行環境によって必要なライブラリが異なります。注意してください。 *2 )
今作成しているプロジェクトが"ProcessingSketch"という名前だとすると、コピー後、以下の写真のようなファイル構成になります。

また、ビルド後も単独で動作可能にするために、プロジェクト内のdistフォルダにも同じライブラリをコピーしておきましょう。


さて、次はコードです。

package netbeans_processing_template;

import processing.core.PApplet;
import processing.core.PFont;
import processing.gainer.Gainer;
import processing.video.Capture;

/**
 * PAppletを継承した独自クラス。
 */
public class Main extends PApplet {

    //キャプチャ。今回は使わない。
    Capture camera;
    //Gainer。今回のメインはこれ。
    Gainer gainer;
    
    //Gainerに出力する数字。
    int value = 0;
    //それぞれ、0~9を意味する2進表現を10進に直したもの。
    int ledArray[] = {63, 12, 91, 94, 108, 118, 119, 28, 127, 124};

    /**
     * エントリポイント
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        PApplet.main(new String[]{"netbeans_processing_template.Main"});
    }

    /**
     * PAppletの初期化の為に最初に呼ばれる。
     */
    @Override
    public void setup() {
        size(100, 100);
        textFont(new PFont());

        //Gainerの初期化。モード6で起動。
        this.gainer = new Gainer(this ,Gainer.MODE6);

        //フレームレートの設定。毎秒1回draw()が呼ばれる。
        frameRate((float) 1.0);
        
    }

    /**
     * 描画を行うメソッド。
     */
    @Override
    public void draw() {

        background(120);
        
        //文字出力は未着手。
        //text(value, 15, 60);
        
        System.out.println("value:" + value);
        
        //Gainerに信号を出力
        gainer.digitalOutput(ledArray[value]);

        if (value < 9) {
            value++;
        } else {
            value = 0;
        }
  
    }
    
}

アプレットへの文字描画までは今回手が回っていません。ですので、Gainer への出力信号が何になっているかはSystem.out.println()を利用して標準出力へ出力するようにしてます。
なので、JARファイルをダブルクリックして起動する方法ではGainerの出力とプログラム内の値が同期しているかどうかの確認がとれませんのでご注意ください。

回路図はこちら。

さて、実行するときの注意があります。
私はいつも、実行に「"現在開いてるファイルの属するプロジェクト名"を実行」(下の写真の真ん中のボタン)を押して実行するのですが、これを押すと実行できませんでした。(RXTXcomm関係のライブラリが見つからない例外が発生する。)
ですので、実行するときは「メインプロジェクトを実行」か、「"ファイル名"を実行」をえらぶようにしましょう。

実行中の写真は一番上にあるので省略。


ビルドして、jarファイルにして実行するときは、ディレクトリの構成を以下のようにします。

この状態で、

$ java -jar netbeans_processing_template.jar

とすることで実行することが出来ます。

+GAINER―PHYSICAL COMPUTING WITH GAINER

+GAINER―PHYSICAL COMPUTING WITH GAINER

*1:NetBeans6.1はかなり軽く、早くなっている印象を受けた。GUI周りのフォーカス切り替えでハングアップしていたのも解決されているような印象。

*2:Windowsだと.dllだし、Linuxだと.soという拡張子になる。