За последние несколько дней я работал над анодным 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);
}
}
Спасибо за помощь, пожалуйста, не обращайте внимания на мой английский...
(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 += 1
and z -= 1
в своих циклах for, скажите z++
and z--
. Люди, которые читают код, удивятся этому.
Очаг
викатку