Обратное плавание до go от 0-255 до 255-0 - PullRequest
0 голосов
/ 01 мая 2020

Я работаю над проектом Arduino с использованием Led RGB Strip. Я обнаружил, что с этим что-то не так: в основном, значения меняются местами. Как вы, возможно, знаете, значение 0 отключает светодиод, а мой - нет. Видимо 255 выключает мой светодиод. Также красный канал и зеленый канал поменялись местами, почему бы и нет. Я в основном пытаюсь сделать какой-то алгоритм для изменения масштаба вместо перехода от 0-255 до 255-0 (вход 0, выход 255). Например, у меня есть красный RGB (255,0,0), он должен стать RGB (0,255,255). В моей глупости я попытался color.r/255, который не работает, потому что зажимает значение от 0-1. Любые идеи ? Для справки, это часть моего кода:

struct Color
{
public:int R;
public:int G;
public:int B;

      Color(int _r, int _g, int _b)
      {
          R = _r;
          G = _g;
          B = _b;
      }
};

Color ReverseColor(struct Color *color)
{
    Color reversed = *color;

        // If one channel value is 255 -> 0 else if it's 0 -> 255 else my stupid equation
    reversed.R = ((*color).R == 255) ? 0 : ((*color).R == 0) ? 255 : (*color).R / 255;
    reversed.G = ((*color).G == 255) ? 0 : ((*color).G == 0) ? 255 : (*color).G / 255;
    reversed.B = ((*color).B == 255) ? 0 : ((*color).B == 0) ? 255 : (*color).B / 255;

    return reversed;
}

void SetColor(struct Color *color)
{
     Color newColor = ReverseColor(&(*color));
    *color = newColor;

    analogWrite(Rpin, (*color).R);
    analogWrite(Gpin, (*color).G);
    analogWrite(Bpin, (*color).B);
}
...