Sun SPOTアプリケーションを作ってみる(スタンドアローンアプリ編)
Sun SPOTのSDKはインストールできたので、SPOTアプリケーションをつくってみます。
とりあえず、通信しないスタンドアローンアプリで。
今回、センサーとLEDを使ってみたいので、温度計を作ってみました。
これが、エミュで実行した所です。(実機で実行したい所ですが・・・実機が早く欲しい!)
SPOT内の温度センサーから現在の温度を取得して、それに合わせた色と位置のLEDが点滅するアプリを作ってみました。
NetBeansでBuild(構築)して、SPOTWorldから、Virtual SPOTを作成して、「Specify Application jar file...」で「プロジェクトディレクトリ/suite/」にあるjarファイルを読み込みます。これでDeployされるので、「Run MIDLet」で、実行できます。
エミュで実行すると、スライダの温度に合わせてちゃんとエミュのLED表示も点滅します。よくできたエミュレーターです。温度と表示が合ってないように見えますが、スライダの温度は華氏(F)表示なので、これでOKです。
コードです。簡単です。
----
public class StartApplication extends MIDlet {
//LEDインスタンス配列 private ITriColorLED [] leds = EDemoBoard.getInstance().getLEDs();
//OFF時のLEDカラー配列(R,G,B) private static int LEDsDefaultColor1[][] = { {0,50,100}, {0,50,100}, {0,100,100}, {0,100,100}, {0,100,0}, {0,100,0}, {100,0,0}, {100,0,0} };
//ON時のLEDカラー配列(R,G,B) private static int LEDsDefaultColor2[][] = { {0,255,255}, {0,255,255}, {0,255,255}, {0,255,255}, {0,255,0}, {0,255,0}, {255,0,0}, {255,0,0} };
protected void startApp() throws MIDletStateChangeException {
new BootloaderListener().start(); // monitor the USB (if connected) and recognize commands from host //温度センサーのインスタンスを取得。 ITemperatureInput temperature = EDemoBoard.getInstance().getADCTemperature(); //スイッチのインスタンスを取得 ISwitch sw1 = EDemoBoard.getInstance().getSwitches()[EDemoBoard.SW1]; //LED表示を初期化 for( int i=0 ; i<8 ; i++ ) {
leds[i].setRGB( LEDsDefaultColor1[i][0],LEDsDefaultColor1[i][1],LEDsDefaultColor1[i][2]);
leds[i].setOn();
}
int ledpos = 1; //LEDの位置 int blinker = 0; //点滅用カウンタ変数 double tempC = 0; //取得した温度 boolean isGetTemp = false; //温度取得フラグ。取得できなければfalse while (sw1.isOpen()) { //スイッチが押されていない間はループ isGetTemp = false; //温度取得フラグを未取得にセット //温度の取得 try {
tempC = temperature.getCelsius(); //温度を取得 isGetTemp = true; //取得できたので、取得済みにセット } catch (IOException ex) {
ex.printStackTrace();
}
System.out.println( "Temp = " + tempC );
//温度の表示 if( isGetTemp == true ) {
//温度に合わせて、LEDの位置を決定する if( tempC < 0 ) { ledpos = 0; }
else if( 0 <= tempC && tempC < 10 ) { ledpos = 1; }
else if( 10 <= tempC && tempC < 15 ) { ledpos = 2; }
else if( 15 <= tempC && tempC < 20 ) { ledpos = 3; }
else if( 20 <= tempC && tempC < 25 ) { ledpos = 4; }
else if( 25 <= tempC && tempC < 30 ) { ledpos = 5; }
else if( 30 <= tempC && tempC < 35 ) { ledpos = 6; }
else if( 35 <= tempC ) { ledpos = 7; }
//LED位置に合わせてLED色をセットする for( int i=0 ; i<8 ; i++ ){
if( (i == ledpos) && (blinker % 2 == 0) ) { //現在の温度位置のLED leds[i].setRGB( LEDsDefaultColor2[i][0],LEDsDefaultColor2[i][1],LEDsDefaultColor2[i][2]);
} else { //現在の位置でないLED leds[i].setRGB( LEDsDefaultColor1[i][0],LEDsDefaultColor1[i][1],LEDsDefaultColor1[i][2]);
}
}
}
blinker++; //ブリンク用変数カウントアップ Utils.sleep(500); //500mSec待つ } notifyDestroyed(); // cause the MIDlet to exit } protected void pauseApp() {
}
protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
for (int i = 0; i < 8; i++) {
leds[i].setOff();
}
}
}
----



コメント