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 から、色 の名前を取得します。
最新の画像[もっと見る]
-
あけましておめでとうございます 12年前
-
今年もよろしくお願いいたします 13年前
-
あけましておめでとうございます 14年前
-
あけましておめでとうございます 17年前
※コメント投稿者のブログIDはブログ作成者のみに通知されます