// Пины для RGB светодиода
#define RED_PIN 3
#define GREEN_PIN 5
#define BLUE_PIN 6
// Пин для потенциометра
#define LIGHTPOT_PIN A0
// Служебные переменные
int redLight = 0;
int blueLight = 0;
int greenLight = 0;
int TIMING = 15; // Секунды. ЗДЕСЬ УКАЗЫВАЕМ ВРЕМЯ ОДНОГО ЦИКЛА (проход всех цветов)
int delTime = (TIMING * 1000) / 1530;
int potVal = 0;
float brightness;
void setup() {
pinMode(LIGHTPOT_PIN, INPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop() {
for(int Gi = 0; Gi < 255; Gi++){ // Прибавляем зеленый (красный - жёлтый)
potVal = analogRead(A0);
brightness = map(potVal, 0, 1023, 255, 0);
greenLight = Gi - brightness;
if(Gi < brightness){
greenLight = 0;
}
analogWrite(RED_PIN, 255-brightness);
analogWrite(GREEN_PIN, greenLight);
analogWrite(BLUE_PIN, 0);
delay(delTime);
}
for(int Ri = 255; Ri > 0; Ri--){ // Уменьшаем красный (жёлтый - зеленый)
potVal = analogRead(A0);
brightness = map(potVal, 0, 1023, 255, 0);
redLight = Ri - brightness;
if(Ri < brightness){
redLight = 0;
}
analogWrite(RED_PIN, redLight);
analogWrite(GREEN_PIN, 255-brightness);
analogWrite(BLUE_PIN, 0);
delay(delTime);
}
for(int Bi = 0; Bi < 255; Bi++){ // Прибавляем синий (зелёный - салатовый)
potVal = analogRead(A0);
brightness = map(potVal, 0, 1023, 255, 0);
blueLight = Bi - brightness;
if(Bi < brightness){
blueLight = 0;
}
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 255-brightness);
analogWrite(BLUE_PIN, blueLight);
delay(delTime);
}
for(int Gi = 255; Gi > 0; Gi--){ // Уменьшаем зелёный (салатовый - синий)
potVal = analogRead(A0);
brightness = map(potVal, 0, 1023, 255, 0);
greenLight = Gi - brightness;
if(Gi < brightness){
greenLight = 0;
}
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, greenLight);
analogWrite(BLUE_PIN, 255-brightness);
delay(delTime);
}
for(int Ri = 0; Ri < 255; Ri++){ // Прибавляем красный (синий - фиолетовый)
potVal = analogRead(A0);
brightness = map(potVal, 0, 1023, 255, 0);
redLight = Ri - brightness;
if(Ri < brightness){
redLight = 0;
}
analogWrite(RED_PIN, redLight);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, 255-brightness);
delay(delTime);
}
for(int Bi = 255; Bi > 0; Bi--){ // Уменьшаем синий (фиолетовый - красный)
potVal = analogRead(A0);
brightness = map(potVal, 0, 1023, 255, 0);
blueLight = Bi - brightness;
if(Bi < brightness){
blueLight = 0;
}
analogWrite(RED_PIN, 255-brightness);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, blueLight);
delay(delTime);
}
}