2008年5月20日火曜日

Sensorを使ってみた

5月10日の記事【通信サンプル】と5月16日の記事【Sensorを使おう】を参考にして,
加速度センサーのデータを他のSunSPOTにブロードキャストで送信するプログラムを作成.
5月10日の送信本体classを以下のように書き換える.

package org.sunspotworld;

import com.sun.spot.peripheral.Spot;
import com.sun.spot.sensorboard.EDemoBoard;
import com.sun.spot.sensorboard.peripheral.ITriColorLED;
import com.sun.spot.io.j2me.radiostream.*;
import com.sun.spot.io.j2me.radiogram.*;
import com.sun.spot.util.*;
import com.sun.spot.sensorboard.peripheral.*;
import java.io.*;
import java.lang.Thread;
import javax.microedition.io.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

/**
* SunSPOT通信テスト用アプリケーション(送信側)
* ひたすら"Hello World"の文字列をブロードキャストし続ける
*/
public class StartApplication extends MIDlet {
private DatagramSender sender; //!< 通信を行う
private final String PROTOCOL ="radiogram://broadcast:230"; //!< 通信プロトコル
private IAccelerometer3D Accele = EDemoBoard.getInstance().getAccelerometer();//加速度センサーのインスタンス作成
private double acc;//加速度用の変数
/**
* アプリ開始時に呼ばれる.
* @throws javax.microedition.midlet.MIDletStateChangeException
*/
protected void startApp() throws MIDletStateChangeException{
try {
sender = new DatagramSender(PROTOCOL, 31, 3);
int i = 0;

while(true){
        //2秒待つ(これをやらないと大量に出力されるため)
try{
Thread.sleep(2000);
} catch (InterruptedException e){
e.printStackTrace();
}
        //x軸の加速度をaccに代入する
acc = Accele.getAccelX();
        //加速度(acc;double)を文字列に変換して,sender.sendに渡す
sender.send("Hello:" + Integer.toString(i)+" " + Double.toString(acc));
i++;
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
protected void pauseApp() {
// This is not currently called by the Squawk VM
}
protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {

}
}

こんな感じです.
demoのソースを見ればセンサーの使い方は大体わかると思います.

0 件のコメント: