bool autoMode = true;
int currentR = 0, currentG = 0, currentB = 0;
int ledR, ledG, ledB;
void setup() {
pinMode(A0, INPUT);
pinMode(13, INPUT_PULLUP);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
if (digitalRead(13) == LOW) {
toggleControlMode();
delay(200);
}
int save = analogRead(A0);
if (autoMode) {
int temp = calculateColorTemperature(save);
mapToRGB(temp);
}
smoothTransition();
delay(20);
}
int calculateColorTemperature(int save) {
return map(save, 0, 1023, 2000, 8000);
}
void mapToRGB(int temp) {
if (temp < 4000) {
ledR = 255;
ledG = map(temp, 2000, 4000, 100, 255);
ledB = map(temp, 2000, 4000, 0, 100);
} else { // холодный белый
ledR = map(temp, 4000, 8000, 255, 150);
ledG = map(temp, 4000, 8000, 255, 220);
ledB = map(temp, 4000, 8000, 100, 255);
}
}
void smoothTransition() {
currentR += (ledR - currentR) / 10;
currentG += (ledG - currentG) / 10;
currentB += (ledB - currentB) / 10;
analogWrite(9, currentR);
analogWrite(10, currentG);
analogWrite(11, currentB);
}
void toggleControlMode() {
autoMode = !autoMode;
}