В коде Arduino слишком много дублирующего кода - PullRequest
0 голосов
/ 27 октября 2018

У меня проблема с созданием игры вдохновителя на Arduino. У меня есть 4 RGB-светодиодов, каждый из которых имеет названия для своих контактов (красный1, зеленый1, синий1, красный2, зеленый2, синий2 и т. Д.)

Теперь моя проблема заключается в том, что я ввел 4 цвета для сравнения с цветами, которые Arduino выбрал в начале игры. Код слишком повторяющийся, и так как я все еще изучаю Arduino, мне было интересно, есть ли решение для этого.

Вот часть моего кода, которая назначает цвета для светодиодов с выбранным цветом (цветовой код 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;
  }
}

Как видите, оно очень повторяется, и я хочу, чтобы оно было короче. Я попробовал поискать в Google, но не увидел ничего, что могло бы помочь мне в этой ситуации (или я плохо искал)

Надеюсь, вы поможете мне с этим. Благодаря.

1 Ответ

0 голосов
/ 27 октября 2018

Вы можете использовать индекс массива для отображения ваших значений, например, так:

#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];
}
...