首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加工RGB轮子控制Arduino RGB LED

加工RGB轮子控制Arduino RGB LED
EN

Stack Overflow用户
提问于 2013-05-05 20:30:34
回答 1查看 2.1K关注 0票数 2

我想做一个RGB轮子作为GUI处理,以控制连接到Arduino板的RGB LED的Led颜色。

到目前为止,我已经在处理中完成了这段代码。

代码语言:javascript
复制
float startFill;
float startAngle;
int step;
float stepLength;

float centerX;
float centerY;

float pSize;
float bValue;

void setup()
{
  size(512, 512);
  colorMode(HSB, 2*PI, 100, 100);
  smooth();
}

void draw()
{
  background(0,0,25);
  ellipseMode(CENTER);
  noStroke();

  step = 120;
  centerX = width/2;
  centerY = height/2;
  startFill = 0;
  startAngle = 0;
  stepLength = PI/step;

  pSize = 400;
  bValue = 200;

  // draw arcs
  for(int i=0; i< 2*step; i++)
  {
     for(int j=0; j< step; j++)
     {
         fill(startFill, bValue, 100,80);
         stroke(0,0,95,20);
         arc(centerX, centerY, pSize, pSize, startAngle, startAngle+stepLength);

         bValue = bValue - 50/step;
         pSize = pSize - 50/step;
      }   
      startFill =  startFill + stepLength;
      startAngle = startAngle + stepLength;
  }  
}

我想使用鼠标位置在屏幕上的上一个轮子上映射红色、绿色和蓝色的值。

我找到了一张图片,它可以帮助我将RGB值写在轮子上的鼠标位置上,但我不太确定该怎么做。

RGB WHEEL PROCESSING

如果有任何帮助或建议,我将非常感激。

诚挚的问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-05 23:18:29

请注意,色轮并不都是色轮。它只是“相同的颜色,进入”。外圈是你的标准颜色组合,角度是纯R,角度是纯G,角度是+2/4*pi,角度是纯B,角度是+4/3*pi。为了激活,请构造一个颜色楔形对象并使用该对象:

代码语言:javascript
复制
class ColorWedge {
  color c;
  float[] coords;
  ColorWedge(color _c, float[] _coords) {
    c = _c;
    coords = _coords;
  }
  void draw() {
    fill(c);
    noStroke();
    triangle(coords[0],coords[1],coords[2],coords[3],coords[4],coords[5]);
    stroke(0);
    line(coords[2],coords[3],coords[4],coords[5]);
  }
}

然后通过在一个角度上创建楔形来构建所有颜色的楔形:

代码语言:javascript
复制
final float PI2 = 2*PI;
ArrayList<ColorWedge> wedges; 

void setup() {
  size(200,200);
  colorMode(HSB,PI2);
  wedges = new ArrayList<ColorWedge>();
  float radius = 90,
        ox = width/2,
        oy = height/2,
        px, py, nx, ny,
        step = 0.01,
        overlap = step*0.6;
  for(float a=0; a<PI2; a+=step) {
    px = ox + radius * cos(a-overlap);
    py = oy + radius * sin(a-overlap);
    nx = ox + radius * cos(a+overlap);
    ny = oy + radius * sin(a+overlap);
    wedges.add(new ColorWedge(color(a,PI2,PI2), new float[]{ox,oy,px,py,nx,ny}));
  }
}

然后,控制颜色只需找出鼠标的位置,以及鼠标与草图中心的夹角是:

代码语言:javascript
复制
color wcolor = 0;

void draw() {
  background(PI2,0,PI2);
  pushStyle();
  for(ColorWedge w: wedges) { w.draw(); }

  strokeWeight(10);
  stroke(wcolor);
  line(0,0,width,0);
  line(width,0,width,height);
  line(width,height,0,height);
  line(0,height,0,0);
  popStyle();
}

void mouseMoved() {
  float angle = atan2(mouseY-height/2,mouseX-width/2);
  if(angle<0) angle+=PI2;
  ColorWedge wedge = wedges.get((int)map(angle,0,PI2,0,wedges.size()));
  wcolor = wedge.c;
}

这应该会让你顺利上路,如果不是100%的话。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16384550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档