Shuichi Machida's Weblog

« [Sun SPOT で外付けLEDを点滅... | メイン | [Sun SPOT Demo(2)]... »

http://blogs.sun.com/machida/date/20080306 2008年 3月 06日 木曜日

[Sun SPOT で外付けLEDを点滅させよう(4)] おまけ。eDemoボード上のLEDも光らせてみる。

前回までで、Sun SPOTに外付けLEDを接続して点滅させてみました。

最後におまけとして、eDemoボード上のlEDを光らせるプログラムもご紹介します。この場合も、APIが提供されているのでとても簡単です。


Sun SPOTには LEDが8個付いているのですが、3色(RGB:24bit)のLED(写真をよく見ると、1つのLEDの中に赤、緑、青のLEDが入っています)なのでかなりの色が出せます。

今回は、500ms間隔でランダムな色に光らせるプログラムを書いてみたいと思います。

# プログラム

 package org.sunspotworld;

import com.sun.spot.sensorboard.EDemoBoard;
import com.sun.spot.sensorboard.peripheral.ITriColorLED;
import com.sun.spot.util.*;
import java.util.Random;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class StartApplication extends MIDlet {
    private ITriColorLED[] leds = EDemoBoard.getInstance().getLEDs();
    private Random rand = new Random();
    
    protected void startApp() throws MIDletStateChangeException {
        new BootloaderListener().start();

        initLeds();

        // 500ms間隔でLEDをランダムな色に光らせる
        while (true) {
            setNewColor();
            Utils.sleep(500L);
        }
    }
    
    // LEDの初期化
    private void initLeds() {
        for (int i = 0; i < leds.length; i++) {
            leds[i].setRGB(0, 0, 0);
           leds[i].setOn();

        }        
    }
    
    // LEDに新しい色を設定
    private void setNewColor() {
        int r = rand.nextInt(256);  // R(赤): 0 ~ 255
        int g = rand.nextInt(256);  // G(緑): 0 ~ 255
        int b = rand.nextInt(256);  // B(青): 0 ~ 255
        for (int i = 0; i < leds.length; i++) {
            leds[i].setRGB(r, g, b);
        }
    }
    
    protected void pauseApp() {
    }
    
    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
    }
}

8つのSun SPOTを同時に光らせてみました。結構キレイです ;-)

# タイマを使ってもいいですね

    ....

    protected void startApp() throws MIDletStateChangeException {
        new BootloaderListener().start();

        initLeds();

        // 500ms間隔でLEDをランダムな色に光らせる
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                setNewColor();
            }
        }, 0, 500L);
   // task, delay, interval
    }

....


投稿されたコメント:

コメント
  • HTML文法 不許可

Valid HTML! Valid CSS!

This is a personal weblog, I do not speak for my employer.