Проблема со спектром RGB на Arduino.

За последние несколько дней я работал над анодным RGB-светодиодом в Arduino, я пытался заставить его делать спектр RGB, но все, что я получил, это просто цвета от красного до зеленого, затем он застрял на белом и голубой, я полагаю, что красный светодиод в аноде RGB включается и выключается, поскольку комбинация зеленого и синего - это голубой, и три из них дают белый цвет, если они равны, что в данном случае я думаю, что они (не совсем конечно).

Дело в том, что RGB-анод не отображает все цвета, я сделал так, чтобы уровень напряжения, подаваемого на RGB-анод, увеличивался с помощью функции цикла и уменьшался после достижения 255 с функцией уменьшения, вот код:

    int redPin = 11;
int greenPin = 10;
int bluePin = 9;

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
}
void loop() {

redFuncInc(1);
delay(100);
greenFuncInc(1);
delay(150);
blueFuncInc(1);
delay(200);

// calling decreasing methods

redFuncDec(255);
delay(10);
greenFuncDec(255);
delay(15);
blueFuncDec(255);
delay(20);

}


// Increasing from rainbow spectrum

void redFuncInc(int red){
  for (int i = 1; i<=255; i +=1){

  analogWrite(redPin, i);
  delay(10);
}
}
void greenFuncInc(int green){
  for (int z = 1; z<=255; z +=1){

  analogWrite(greenPin, z);
  delay(20);
}
}
void blueFuncInc(int blue){
  for (int u = 1; u<=255; u +=1){

  analogWrite(bluePin, u);
  delay(30);
}
}
// Decreasing from rainbow spectrum

void redFuncDec(int red){
  for (int y = 255;  y <=255;  y -=1){

    analogWrite(redPin, y);
    delay(10);
  }
}
void greenFuncDec(int green){
  for (int x = 255;  x <=255;  x -=1){

    analogWrite(greenPin, x);
    delay(10);
  }
}
void blueFuncDec(int blue){
  for (int g = 255;  g <=255;  g -=1){

    analogWrite(bluePin, g);
    delay(10);
  }
}

Спасибо за помощь, пожалуйста, не обращайте внимания на мой английский...

Что такое «анод RGB»?
Я понимаю, что это означает светодиод «Общий анод RGB».

Ответы (1)

(1) Ни одна из ваших функций Inc/Dec не использует переданный им аргумент. Не уверен, что это было сделано намеренно, но это заслуживает внимания.

(2) Ваши функции Dec имеют бессмысленное условие завершения в своих циклах. Вместо того, чтобы <=255обязательно иметь >=0?

(3) То, как вы написали свой цикл, в основном будет выполнять следующую последовательность (после того, как вы исправите (2), то есть):

#000000 // BLACK
#010000
...
#FF0000 // RED
#FF0100
...
#FFFF00 // YELLOW
#FFFF01
...
#FFFFFF // WHITE
#FEFFFF
...
#00FFFF // CYAN
#00FEFF
...
#0000FF // BLUE
#0000FE
...
#000000 // BLACK

Не уверен, что вы это имели в виду, но вот оно.

(4) Не говорите z += 1and z -= 1в своих циклах for, скажите z++and z--. Люди, которые читают код, удивятся этому.

Спасибо за быстрый ответ, однако, как я могу заставить его отображать такие цвета, как фиолетовый и розовый, и позволить ему просто завершить спектр и продолжать цикл? (я новичок в ардуино)
Взгляните на это: arduino.cc/en/Tutorial/ColorCrossfader
Не существует канонического способа пересечь спектр RGB. Цветовое пространство — сложная вещь, но вам может быть полезно прочитать о цветовом пространстве Hue Saturation Luminance и поискать в Интернете код, который конвертирует между HSL и RGB.