int red_pin = 10;
int green_pin = 12;
int blue_pin = 11;
enum {
RED,
YELLOW,
GREEN,
CYAN,
BLUE,
MAGENTA,
WHITE
};
void setup() {
pinMode(red_pin, OUTPUT);
pinMode(green_pin, OUTPUT);
pinMode(blue_pin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
// red();
// delay(500);
// yellow();
// delay(500);
// green();
// delay(500);
// cyan();
// delay(500);
// blue();
// delay(500);
// white();
// delay(500);
// for(int i=0; i<7; i++){
// color(i);
// delay(1000);
// }
delay(1000);
setLedColor(0, 100, 50);
}
void color(int color_code){
switch(color_code){
case RED:
red();
break;
case YELLOW:
yellow();
break;
case GREEN:
green();
break;
case CYAN:
cyan();
break;
case BLUE:
blue();
break;
case WHITE:
white();
break;
}
}
void rgb(int red_v, int green_v, int blue_v){
analogWrite(red_pin, red_v);
analogWrite(green_pin, green_v);
analogWrite(blue_pin, blue_v);
}
void red(){
// analogWrite(red_pin, 255);
// analogWrite(green_pin, 0);
// analogWrite(blue_pin, 0);
rgb(255, 0, 0);
}
void yellow(){
// analogWrite(red_pin, 255);
// analogWrite(green_pin, 255);
// analogWrite(blue_pin, 0);
rgb(255, 255, 0);
}
void green(){
// analogWrite(red_pin, 0);
// analogWrite(green_pin, 255);
// analogWrite(blue_pin, 0);
rgb(0, 255, 0);
}
void cyan(){
// analogWrite(red_pin, 0);
// analogWrite(green_pin, 255);
// analogWrite(blue_pin, 255);
rgb(0, 255, 255);
}
void blue(){
// analogWrite(red_pin, 0);
// analogWrite(green_pin, 0);
// analogWrite(blue_pin, 255);
rgb(0, 0, 255);
}
void white(){
// analogWrite(red_pin, 255);
// analogWrite(green_pin, 255);
// analogWrite(blue_pin, 255);
rgb(255, 255, 255);
}
void setLedColor(int h, int s, int l) {
// Variables to hold RGB values
int r, g, b;
// Convert HSL to RGB
hslToRgb(h, s, l, &r, &g, &b);
// Set LED color using PWM values
analogWrite(red_pin, r);
analogWrite(green_pin, g);
analogWrite(blue_pin, b);
}
void hslToRgb(int h, int s, int l, int* r, int* g, int* b) {
// Ensure h is in the range [0, 360], s and l are in the range [0, 100]
h %= 360;
s = constrain(s, 0, 100);
l = constrain(l, 0, 100);
// Convert HSL to RGB
float H = h / 360.0;
float S = s / 100.0;
float L = l / 100.0;
float C = (1 - abs(2 * L - 1)) * S;
float X = C * (1 - abs(fmod(H * 6, 2) - 1));
float m = L - C / 2;
float R, G, B;
if (0 <= H && H < 1.0 / 6.0) {
R = C; G = X; B = 0;
} else if (1.0 / 6.0 <= H && H < 2.0 / 6.0) {
R = X; G = C; B = 0;
} else if (2.0 / 6.0 <= H && H < 3.0 / 6.0) {
R = 0; G = C; B = X;
} else if (3.0 / 6.0 <= H && H < 4.0 / 6.0) {
R = 0; G = X; B = C;
} else if (4.0 / 6.0 <= H && H < 5.0 / 6.0) {
R = X; G = 0; B = C;
} else {
R = C; G = 0; B = X;
}
*r = round((R + m) * 255);
*g = round((G + m) * 255);
*b = round((B + m) * 255);
}