goo blog サービス終了のお知らせ 

marunomaruno-memo

marunomaruno-memo

leJOS カラーセンサー (0.9)

2011年09月10日 | Android
leJOS カラーセンサー                                                       (0.9)
================================================================================

※ この記事は leJOS 0.9 で確認しています。

LEGO Mindstoms NXT で、カラーセンサーを使うことができます。
ただし、カラーセンサーは別売です。
カラーセンサーを使うのは、他のセンサーと同じく、

1. センサーのオブジェクトを生成

2. センサーのオブジェクトから、値を取得

の手順です。ただし、他のセンサーと違うのは、カラーは、RGB という 3 つの値からな
るので、基本データ型による色の取得ではなく、Color オブジェクトで取得し、それぞれ
の R 値、G 値、B 値、は、この Color オブジェクトからさらに取得する、という点です。

■ ColorSensor01.java
---
import lejos.nxt.Button;
import lejos.nxt.ColorSensor;
import lejos.nxt.SensorPort;
import lejos.nxt.ColorSensor.Color;

/**
 * エンターをたたく度に色を取得する。
 * 
 * @author marunomaruno
 * @version 1.0, 2011/08/27
 * @since 1.0
 */
public class ColorSensor01 {

    /**
     * 色IDに対応した色名の配列。
     * ただし、使用する場合は、IDに1を加える。(NONEが-1なため。)
     */
    public static final String[] COLOR_NAMES = new String[] {     // (1)
            "-",            // NONE
            "RED", 
            "GREEN", 
            "BLUE",
            "YELLOW", 
            "MAGENTA", 
            "ORANGE", 
            "WHITE", 
            "BLACK", 
            "PINK",
            "GRAY", 
            "LIGHT_GRAY", 
            "DARK_GRAY", 
            "CYAN", 
    };

    public static void main(String[] args) throws Exception {

        // 色センサーオブジェクトをポート3で生成する。
        ColorSensor colorSensor = new ColorSensor(SensorPort.S3);    // (2)
        
        // センサー安定化のため、しばらく待つ
        Thread.sleep(500);

        // Enterでループする
        while (Button.waitForPress() == Button.ENTER.getId()) {
            Color color = colorSensor.getColor();    // (3)
            int red = color.getRed();    // (4)
            int blue = color.getBlue();    // (4)
            int green = color.getGreen();    // (4)
            int id = colorSensor.getColorID();    // (5)
            System.out.print(
                      Integer.toHexString(red) + " "
                    + Integer.toHexString(green) + " "
                    + Integer.toHexString(blue) + " " 
                    + id + " " + COLOR_NAMES[id + 1]
            );
            System.out.println();
        }
    }
}
---

■ 実行結果例
---
3b 3f 30 7 BLACK
1c 0 0 7 BLACK
a0 85 d0 2 BLUE
f8 85 9e 0 RED
e4 f1 9b 1 GREEN
115 ee 9b 3 YELLOW
0 0 0 7 BLACK
110 f8 f7 6 WHITE
eb bf 8f 6 WHITE
---
※ 左から、赤、緑、青の値。次が色ID。最後が色ID に対応した色名


(1) センサーで取得できる色に対応する色名の配列

    public static final String[] COLOR_NAMES = new String[] {     // (1)
            "-",                    // NONE
            "RED", 
            "GREEN", 
            "BLUE",
            "YELLOW", 
            "MAGENTA", 
            "ORANGE", 
            "WHITE", 
            "BLACK", 
            "PINK",
            "GRAY", 
            "LIGHT_GRAY", 
            "DARK_GRAY", 
            "CYAN", 
    };


これらの定数は、ColorSensor クラスの内部クラス Color クラスで宣言されています。
実際には、lejos.robotics.Color クラスのものを使っています。
センサーでは、この配列に対するインデックスは、
     int     getColorID() 
メソッドを使って取得します。RED から CYAN まで、0 から 12 で宣言されています。ま
た、NONE は、-1 なので、この配列上では、一番先頭に設定しています。
したがって、この配列を使って色名を取得する場合は、getColorID() メソッドの結果に 
1 を加えたものを使用する必要があります。

lejos.robotics.Color の色を表す定数
---
public static final int BLACK       7
public static final int BLUE        2
public static final int CYAN       12
public static final int DARK_GRAY  11
public static final int GRAY        9
public static final int GREEN       1
public static final int LIGHT_GRAY 10
public static final int MAGENTA     4
public static final int NONE       -1
public static final int ORANGE      5
public static final int PINK        8
public static final int RED         0
public static final int WHITE       6
public static final int YELLOW      3
---


(2) カラーセンサーのオブジェクトを取得

    ColorSensor colorSensor = new ColorSensor(SensorPort.S3);    // (2)

センサーをつなげているポート番号を基に取得します。

・ColorSensor

・クラス階層
java.lang.Object
  extended by lejos.nxt.ColorSensor

・内部クラス
static class  ColorSensor.Color 

・コンストラクター
---
ColorSensor(SensorPort port)
ColorSensor(SensorPort port, int color)
---

・主なメソッド
---
 ColorSensor.Color getColor()                色を取得する
 int               getColorID()              色ID を取得する(-1, 0-12)
 boolean           setFloodlight(int color)  ライトを点灯する
---


(3) センサーから色を取得

    Color color = colorSensor.getColor();    // (3)

色は、ColorSensor.Color クラスのオブジェクトとして取得します。

・ColorSensor.Color クラス

・クラス階層
java.lang.Object
  extended by lejos.robotics.Color
      extended by lejos.nxt.ColorSensor.Color

・定数
---
BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, NONE, 
ORANGE, PINK, RED, WHITE, YELLOW
---

・コンストラクター
---
ColorSensor.Color(int red, int green, int blue, int background, int colorId) 
---

・メソッド
---
 int  getBackground()  背景光のレベルを取得する
 int  getBlue()        RGBのうち、青値を取得する(0-255)
 int  getColor()
 int  getGreen()       RGBのうち、緑値を取得する(0-255)
 int  getRed()         RGBのうち、赤値を取得する(0-255)
---


(4) Color オブジェクトから、それぞれの原色の値を取得

    int red = color.getRed();    // (4)
    int blue = color.getBlue();    // (4)
    int green = color.getGreen();    // (4)


(5) センサーから、色についた ID を取得

    int id = colorSensor.getColorID();    // (5)

この色ID をインデックスとして、(1) で定義している定数の配列 COLOR_NAMES から、色
の名前を取得します。



最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。