const int buttonPin = 2;
const int redPin = 6;
const int greenPin = 5;
const int bluePin = 3;
int lastButtonState = HIGH;
int currentStage = 0;
unsigned long stageStartTime = 0; // זמן תחילת השלב הנוכחי
unsigned long totalStartTime = 0; // זמן התחלה מוחלט
unsigned long stageDurations[] = {60000, 60000, 60000, 60000}; // 1 דקה לכל שלב
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
totalStartTime = millis();
stageStartTime = totalStartTime;
currentStage = 0;
Serial.println("Stage 0: Orange");
}
void loop() {
unsigned long now = millis();
unsigned long timeInStage = now - stageStartTime;
unsigned long timeSinceStart = now - totalStartTime;
int reading = digitalRead(buttonPin);
// ===== FADE לפי שלב =====
float progress = constrain(timeInStage / float(stageDurations[currentStage]), 0.0, 1.0);
switch (currentStage) {
case 0: // כתום
setColor(int(255 * progress), int(80 * progress), 0);
break;
case 1: // צהוב
setColor(int(255 * progress), int(255 * progress), 0);
break;
case 2: // לבן
setColor(int(255 * progress), int(255 * progress), int(255 * progress));
break;
case 3: // כחול (שלב סופי)
setColor(0, 0, int(255 * progress));
break;
}
// ===== מעבר אוטומטי לפי זמן כללי =====
if (currentStage == 0 && timeSinceStart >= 60000) {
advanceStage(1, "Yellow");
} else if (currentStage == 1 && timeSinceStart >= 120000) {
advanceStage(2, "White");
} else if (currentStage == 2 && timeSinceStart >= 180000) {
advanceStage(3, "Blue");
}
// ===== מעבר לפי לחיצה =====
if (reading == LOW && lastButtonState == HIGH) {
if (currentStage == 0) {
advanceStage(1, "Yellow");
} else if (currentStage == 1) {
advanceStage(2, "White");
} else if (currentStage == 2) {
advanceStage(3, "Blue");
}
// כחול = סיום → לא מתקדם יותר
}
lastButtonState = reading;
}
void advanceStage(int newStage, const char* stageName) {
currentStage = newStage;
stageStartTime = millis();
Serial.print("Stage ");
Serial.print(newStage);
Serial.print(": ");
Serial.println(stageName);
}
void setColor(int r, int g, int b) {
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
}