// Define RGB LED pins (adjust if needed for your board)
#define LED_R 38 // Red pin
#define LED_G 39 // Green pin
#define LED_B 40 // Blue pin
// HSV to RGB conversion
void hsvToRgb(float h, float s, float v, int &r, int &g, int &b) {
int i = int(h * 6);
float f = h * 6 - i;
float p = v * (1 - s);
float q = v * (1 - f * s);
float t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0: r = v * 255; g = t * 255; b = p * 255; break;
case 1: r = q * 255; g = v * 255; b = p * 255; break;
case 2: r = p * 255; g = v * 255; b = t * 255; break;
case 3: r = p * 255; g = q * 255; b = v * 255; break;
case 4: r = t * 255; g = p * 255; b = v * 255; break;
case 5: r = v * 255; g = p * 255; b = q * 255; break;
}
}
void setup() {
// Set RGB pins as output
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
}
void loop() {
static float hue = 0.0;
int r, g, b;
// Convert hue to RGB
hsvToRgb(hue, 1.0, 0.5, r, g, b);
// Write RGB values using PWM
analogWrite(LED_R, r);
analogWrite(LED_G, g);
analogWrite(LED_B, b);
// Increment hue for next color
hue += 0.01;
if (hue > 1.0) hue = 0.0;
delay(30); // Adjust for speed of transition
}