#define RED_PIN 23
#define GREEN_PIN 22
#define BLUE_PIN 21
#define PM_PIN_RED 34
#define PM_PIN_GREEN 35
#define PM_PIN_BLUE 32
#define PM_PIN_BT 4

void setup()
{
  // Объявление режимов пинов светодиода
  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
}
void loop() 
{
    // Присваивание значений цветов на каждый канал (0 - 255)
    int red = SetColorPalette(analogRead(PM_PIN_RED));
    int blue = SetColorPalette(analogRead(PM_PIN_BLUE));
    int green = SetColorPalette(analogRead(PM_PIN_GREEN));

    // Присваивание яркости на цветовые каналы
    red = SetBrightness(red);
    blue = SetBrightness(blue);
    green = SetBrightness(green);

    // Передача цветов на RGB-индикатор
    WriteColor(red, blue, green);

    // Небольшая задержка для стабильной работы
    delay(10);
}

// Метод, изменяющий яркость цветового канала
int SetBrightness(int color)
{
  int brightness = SetColorPalette(analogRead(PM_PIN_BT));

  return (color * brightness) / 255;
}
// Метод, заставляющий считывать значения потенциометра с 0 до 255 (вместо 0 до 4095).
// присваивает настоящий сигнал цвета
int SetColorPalette(int color)
{
  //Функция map() линейно масштабирует исходное значение
  // color из исходного диапазона в целевой диапазон
  color = map(color, 0, 4095, 0, 255);
  //Функция constrain() проверяет, находится ли значение color
  // в пределах указанного диапазона
  color = constrain(color, 0, 255);

  return color;
}
// Метод, передающий цвет на индикатор RGB
void WriteColor(int redColor, int blueColor, int greenColor)
{
  analogWrite(RED_PIN, redColor);
  analogWrite(BLUE_PIN, blueColor);
  analogWrite(GREEN_PIN, greenColor);
}