/*
* RGB Gradient
* By: Luis Alejandro Domínguez Bueno
* On: 2024/02/19
*/
//const byte = ledPins[] = {15, 2, 4};
const byte ledPins[] = {12, 14, 27};
const byte pwmChannels[] = {0, 1, 2};
int red, green, blue;
void setup() {
for (int i = 0; i < 3; i++) {
ledcSetup(pwmChannels[i], 1000, 8);
ledcAttachPin(ledPins[i], pwmChannels[i]);
}
}
void loop() {
for (int i = 0; i < 256; i++) {
setColor(wheel(i));
delay(20);
}
}
void setColor(long rgb) {
ledcWrite(pwmChannels[0], 255 - (rgb >> 16) & 0xFF);
ledcWrite(pwmChannels[1], 255 - (rgb >> 8) & 0xFF);
ledcWrite(pwmChannels[2], 255 - rgb & 0xFF);
}
long wheel(int pos) {
long wheelPos = pos % 0xFF;
if (wheelPos < 85) {
return ((255 - wheelPos * 3) << 16) | ((wheelPos * 3) << 8);
} else if (wheelPos < 170) {
wheelPos -= 85;
return ((255 - wheelPos * 3) << 8) | (wheelPos * 3);
} else {
wheelPos -=170;
return ((wheelPos * 3) << 16 | (255 - wheelPos * 3));
}
}