Question

I am trying to write an extension in netlogo for Nxt brick . To connect the brick , I am using Lejos. I have a problem with color sensor. I want to write a simple method which returns sensor color as a number such as yellow : 1, red :2 etc. But sensor motor always returns different RGB colors on the same surface. For example I put it over a yellow paper , rgb colors are : [236 189 104] ,[247 202 108].. if it was returning unique RGB numbers for same surface colors, I would classify them according to RGB colors range and give a unique number for each color. Do you have any idea how i can do it ? Also , it won't run on different surfaces. only doing this for my paper colors( yellow, blue, green) will be enough for me. Thanks.

Was it helpful?

Solution

If I understood correctly what you mean, the method java.awt.Color.RGBtoHSB might help you. Java code like this:

float[] hsb = Color.RGBtoHSB(red, green, blue, null);  
float hue = hsb[0];

(where red, green and blue are variables containing the sensor result)

...will give you the "hue" of your color as a float between 0 and 1, which should be sufficient to see if it's a shade of yellow, blue, green, or something else, if you define appropriate ranges. That should be very approximatively something like:

Yellow: 0.1  < hue < 0.2
Blue:   0.5  < hue < 0.7
Green:  0.25 < hue < 0.45

...but don't take my word for it! You should experiment to see in what range your sensor stays when over yellow paper, etc.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top