【问题标题】:Arduino code has too much duplicating codeArduino代码有太多重复代码
【发布时间】:2018-10-27 11:04:03
【问题描述】:

我在 Arduino 上制作策划游戏时遇到问题。 我有 4 个 RGB LED,每个 LED 都有引脚名称(red1、green1、blue1、red2、green2、blue2 等)

现在我的问题是当我输入 4 种颜色来与 Arduino 在游戏开始时选择的颜色进行比较时。代码太重复了,因为我还在学习 Arduino,所以我想知道是否有解决方案。

这是我的代码的一部分,它为具有所选颜色的 LED 分配颜色(颜色代码 1 = 绿色,2 = 红色等)

    void Convertmycolor()
{
  if (colorpicker1 == 1)
  {
    red1 = 0;
    green1 = 255;
    blue1 = 255;

  }
  else if (colorpicker1 == 2)
  {

    red1 = 0;
    green1 = 0;
    blue1 = 255;
  }
  else if (colorpicker1 == 3)
  {

    red1 = 255;
    green1 = 255;
    blue1 = 0;
  }
  else if (colorpicker1 == 4)
  {
    red1 = 255;
    green1 = 0;
    blue1 = 0;
  }
  else if (colorpicker1 == 5)
  {

    red1 = 255;
    green1 = 255;
    blue1 = 255;
  }










  if (colorpicker2 == 1)
  {
    red2 = 0;
    green2 = 255;
    blue2 = 255;

  }
  else if (colorpicker2 == 2)
  {

    red2 = 0;
    green2 = 0;
    blue2 = 255;
  }
  else if (colorpicker2 == 3)
  {

    red2 = 255;
    green2 = 255;
    blue2 = 0;
  }
  else if (colorpicker2 == 4)
  {
    red2 = 255;
    green2 = 0;
    blue2 = 0;
  }
  else if (colorpicker2 == 5)
  {

    red2 = 255;
    green2 = 255;
    blue2 = 255;
  }











  if (colorpicker3 == 1)
  {
    red3 = 0;
    green3 = 255;
    blue3 = 255;

  }
  else if (colorpicker3 == 2)
  {

    red3 = 0;
    green3 = 0;
    blue3 = 255;
  }
  else if (colorpicker3 == 3)
  {

    red3 = 255;
    green3 = 255;
    blue3 = 0;
  }
  else if (colorpicker3 == 4)
  {
    red3 = 255;
    green3 = 0;
    blue3 = 0;
  }
  else if (colorpicker3 == 5)
  {

    red3 = 255;
    green3 = 255;
    blue3 = 255;
  }








  if (colorpicker4 == 1)
  {
    red4 = 0;
    green4 = 255;
    blue4 = 255;

  }
  else if (colorpicker4 == 2)
  {

    red4 = 0;
    green4 = 0;
    blue4 = 255;
  }
  else if (colorpicker4 == 3)
  {

    red4 = 255;
    green4 = 255;
    blue4 = 0;
  }
  else if (colorpicker4 == 4)
  {
    red4 = 255;
    green4 = 0;
    blue4 = 0;
  }
  else if (colorpicker4 == 5)
  {

    red4 = 255;
    green4 = 255;
    blue4 = 255;
  }
}

您可以看到它非常重复,我希望它更短。我尝试使用谷歌搜索,但在这种情况下没有看到任何可以帮助我的东西(或者我不擅长搜索)

希望你能帮我解决这个问题。 谢谢。

【问题讨论】:

标签: arduino serial-port rgb


【解决方案1】:

您可以使用数组索引来映射您的值,例如:

#define COLOR_LENGTH 4
#define PICKER_LENGTH 4

struct Color {
    uint8_t r, g, b;
};

const Color colorTable[] = {
    {0, 255, 255},
    {0, 0, 255},
    {255, 255, 0},
    {255, 0, 0},
    {255, 255, 255}
};

uint8_t colorPickers[PICKER_LENGTH];
Color colors[COLOR_LENGTH];

转换只是将颜色映射到正确的索引:

//set the pickers
colorPickers[0] = 3;
colorPickers[1] = 1;
colorPickers[2] = 4;
colorPickers[3] = 5;
//set colors according to table
for (uint8_t i = 0; i < COLOR_LENGTH; i++) {
    colors[i] = colorTable[colorPickers[i] - 1];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多