void setup() {
pinMode(2, INPUT);
pinMode(11, OUTPUT);
pinMode(10, INPUT);
pinMode(9, OUTPUT);
pinMode(A0, INPUT);
}
bool autoMode = true;
int manualColor = 0;
unsigned long btnTime = 0;
bool btnActive = false;
void loop() {
detectButtonPress();
if (autoMode) {
setAutoLight();
} else {
setManualColor();
}
delay(50);
}
void detectButtonPress() {
if (digitalRead(2) == LOW && !btnActive) {
delay(10);
if (digitalRead(2) == LOW) {
btnActive = true;
btnTime = millis()
}
}
if (digitalRead(2) == HIGH && btnActive) {
delay(10);
if (digitalRead(2) == HIGH) {
btnActive = false;
unsigned long pressTime = millis() - btnTime;
if (pressTime < 500) {
if (!autoMode) {
manualColor = (manualColor + 1) % 3;
}
} else {
changeOperationMode();
}
}
}
}
void changeOperationMode() {
autoMode = !autoMode;
setColor(0, 0, 0);
}
void setAutoLight() {
int light = analogRead(A0);
if (light > 800) {
setColor(255, 100, 50);
} else if (light > 500) {
setColor(150, 150, 100);
} else {
setColor(0, 0, 0);
}
}
void setManualColor() {
if (manualColor == 0) {
setColor(255, 255, 255);
} else if (manualColor == 1) {
setColor(255, 150, 50);
} else if (manualColor == 2) {
setColor(50, 50, 255);
}
}
void setColor(int red, int green, int blue) {
analogWrite(11, red);
analogWrite(10, green);
analogWrite(9, blue);
}