首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino和RGB LED

Arduino和RGB LED
EN

Stack Overflow用户
提问于 2015-12-01 13:26:55
回答 1查看 534关注 0票数 1

假设我有一个数组:

代码语言:javascript
复制
int rgbcolors = {{R1,G1,B1},{R2,G2,B2},{R3,G3,B3},{Rn,Gn,Bn}}

如何通过在远程上按1按钮来循环这个数组的值?按一次,给第一个{R1,G1,B1},按两次,给{R2,G2,B2}等等。

我当前用于预定义颜色的空循环:

代码语言:javascript
复制
if (irrecv.decode(&results))
{
  int i = 0;
  int j = 0;
  int k = 0;

  unsigned int val = results.value;
  irrecv.resume();

  switch(val) {
      case button1: //RED
        analogWrite(RedPin,255);
        analogWrite(GreenPin,0);
        analogWrite(BluePin,0);
        break;
      case button2: //GREEN
        analogWrite(RedPin,0);
        analogWrite(GreenPin,255);
        analogWrite(BluePin,0);
        break;
      case button3: //BLUE
        analogWrite(RedPin,0);
        analogWrite(GreenPin,0);
        analogWrite(BluePin,255);
        break;
      case button4: //YEL0
        analogWrite(RedPin,255);
        analogWrite(GreenPin,255);
        analogWrite(BluePin,0);
        break;
      case button5: //PURPLE
        analogWrite(RedPin,255);
        analogWrite(GreenPin,0);
        analogWrite(BluePin,255);
        break;
      case button6: //TURQUOISE
        analogWrite(RedPin,0);
        analogWrite(GreenPin,255);
        analogWrite(BluePin,255);
        break;
      case button7: //ORANGE
        analogWrite(RedPin,255);
        analogWrite(GreenPin,140);
        analogWrite(BluePin,0);
        break;
      case button8: //LIME !!! DON'T USE // CRASHES
        analogWrite(RedPin,133);
        analogWrite(GreenPin,255);
        analogWrite(BluePin,140);
        break;
      case button9: //PINK
        analogWrite(RedPin,50);
        analogWrite(GreenPin,50);
        analogWrite(BluePin,50);
        break;
      case buttonOn:
        analogWrite(RedPin,255);
        analogWrite(GreenPin,255);
        analogWrite(BluePin,255);
        break;
      case buttonOff:
        analogWrite(RedPin,0);
        analogWrite(GreenPin,0);
        analogWrite(BluePin,0);
        break;

  }

} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-01 14:47:35

不幸的是,我无法帮助您解决"IR接收器值突然更改“的问题,但我认为我可以帮助您”通过在远程问题上按1按钮循环这个数组的值“。下面是一个代码示例,它完成了我认为您想要做的事情:

代码语言:javascript
复制
const int NumberOfModes = 4;
int CurrentMode = -1;

void loop() {

    int rgbcolors[NumberOfModes][3] = {
        { 255,0,0 },  // RED
        { 0,255,0 },  // GREEN
        { 0,0,255 },  // BLUE
        { 255,255,0 } // YELLOW
    };

    if (irrecv.decode(&results))
    {
        unsigned int val = results.value;
        irrecv.resume();

        if (val == button1) {

            // Switch to new mode
            CurrentMode++;
            if (CurrentMode >= NumberOfModes)
            {
                CurrentMode = 0;
            }

            // Set output values
            analogWrite(RedPin, rgbcolors[CurrentMode][0]);
            analogWrite(GreenPin, rgbcolors[CurrentMode][1]);
            analogWrite(BluePin, rgbcolors[CurrentMode][2]);
        }

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

https://stackoverflow.com/questions/34021594

复制
相关文章

相似问题

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