// Pin definitions
const int LED_PIN = 2;

// RGB LED pins
const int RGB1_R = 3;
const int RGB1_G = 4;
const int RGB1_B = 5;

const int RGB2_R = 6;
const int RGB2_G = 7;
const int RGB2_B = 8;

const int RGB3_R = 9;
const int RGB3_G = 10;
const int RGB3_B = 11;

// Bargraph pins
const int BARGRAPH_1 = 12;
const int BARGRAPH_2 = 13;
const int BARGRAPH_3 = 22;
const int BARGRAPH_4 = 23;

// Stage durations
const unsigned long STAGE_DURATION = 2000; // 2 seconds in milliseconds
const unsigned long TOTAL_CYCLE_TIME = 4 * STAGE_DURATION; // 8 seconds

void setup() {
  // Initialize all pins as OUTPUT
  pinMode(LED_PIN, OUTPUT);
  
  pinMode(RGB1_R, OUTPUT);
  pinMode(RGB1_G, OUTPUT);
  pinMode(RGB1_B, OUTPUT);
  
  pinMode(RGB2_R, OUTPUT);
  pinMode(RGB2_G, OUTPUT);
  pinMode(RGB2_B, OUTPUT);
  
  pinMode(RGB3_R, OUTPUT);
  pinMode(RGB3_G, OUTPUT);
  pinMode(RGB3_B, OUTPUT);
  
  pinMode(BARGRAPH_1, OUTPUT);
  pinMode(BARGRAPH_2, OUTPUT);
  pinMode(BARGRAPH_3, OUTPUT);
  pinMode(BARGRAPH_4, OUTPUT);
  
  // Initialize all LEDs to OFF
  turnOffAllLEDs();
}

void loop() {
  // Get current time in the cycle (0-7999 ms)
  unsigned long currentTime = millis() % TOTAL_CYCLE_TIME;
  
  // Determine the current stage (0-3)
  int currentStage = currentTime / STAGE_DURATION;
  
  // Execute the appropriate stage
  switch (currentStage) {
    case 0: // Stage 1 (0-2 seconds)
      executeStage1();
      break;
    case 1: // Stage 2 (2-4 seconds)
      executeStage2();
      break;
    case 2: // Stage 3 (4-6 seconds)
      executeStage3();
      break;
    case 3: // Stage 4 (6-8 seconds)
      executeStage4();
      break;
  }
}

// Turn off all LEDs
void turnOffAllLEDs() {
  digitalWrite(LED_PIN, LOW);
  
  // Turn off all RGB LEDs
  digitalWrite(RGB1_R, LOW);
  digitalWrite(RGB1_G, LOW);
  digitalWrite(RGB1_B, LOW);
  
  digitalWrite(RGB2_R, LOW);
  digitalWrite(RGB2_G, LOW);
  digitalWrite(RGB2_B, LOW);
  
  digitalWrite(RGB3_R, LOW);
  digitalWrite(RGB3_G, LOW);
  digitalWrite(RGB3_B, LOW);
  
  // Turn off all bargraph segments
  digitalWrite(BARGRAPH_1, LOW);
  digitalWrite(BARGRAPH_2, LOW);
  digitalWrite(BARGRAPH_3, LOW);
  digitalWrite(BARGRAPH_4, LOW);
}

// Stage 1 implementation
void executeStage1() {
  // Turn everything off first
  turnOffAllLEDs();
  
  // Regular LED is OFF (already done in turnOffAllLEDs)
  
  // RGB1 displays RED
  digitalWrite(RGB1_R, HIGH);
  
  // RGB2 and RGB3 remain OFF (already done in turnOffAllLEDs)
  
  // Bargraph lights up 1 segment
  digitalWrite(BARGRAPH_1, HIGH);
}

// Stage 2 implementation
void executeStage2() {
  // Turn everything off first
  turnOffAllLEDs();
  
  // Regular LED is ON
  digitalWrite(LED_PIN, HIGH);
  
  // RGB1 displays GREEN
  digitalWrite(RGB1_G, HIGH);
  
  // RGB2 displays BLUE
  digitalWrite(RGB2_B, HIGH);
  
  // RGB3 remains OFF (already done in turnOffAllLEDs)
  
  // Bargraph lights up 2 segments
  digitalWrite(BARGRAPH_1, HIGH);
  digitalWrite(BARGRAPH_2, HIGH);
}

// Stage 3 implementation
void executeStage3() {
  // Turn everything off first
  turnOffAllLEDs();
  
  // Regular LED is OFF (already done in turnOffAllLEDs)
  
  // RGB1 displays BLUE
  digitalWrite(RGB1_B, HIGH);
  
  // RGB2 displays RED
  digitalWrite(RGB2_R, HIGH);
  
  // RGB3 displays GREEN
  digitalWrite(RGB3_G, HIGH);
  
  // Bargraph lights up 3 segments
  digitalWrite(BARGRAPH_1, HIGH);
  digitalWrite(BARGRAPH_2, HIGH);
  digitalWrite(BARGRAPH_3, HIGH);
}

// Stage 4 implementation
void executeStage4() {
  // Turn everything off first
  turnOffAllLEDs();
  
  // Regular LED is ON
  digitalWrite(LED_PIN, HIGH);
  
  // All RGB LEDs display WHITE
  digitalWrite(RGB1_R, HIGH);
  digitalWrite(RGB1_G, HIGH);
  digitalWrite(RGB1_B, HIGH);
  
  digitalWrite(RGB2_R, HIGH);
  digitalWrite(RGB2_G, HIGH);
  digitalWrite(RGB2_B, HIGH);
  
  digitalWrite(RGB3_R, HIGH);
  digitalWrite(RGB3_G, HIGH);
  digitalWrite(RGB3_B, HIGH);
  
  // Bargraph lights up all 4 segments
  digitalWrite(BARGRAPH_1, HIGH);
  digitalWrite(BARGRAPH_2, HIGH);
  digitalWrite(BARGRAPH_3, HIGH);
  digitalWrite(BARGRAPH_4, HIGH);
}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
led1:A
led1:C
rgb1:R
rgb1:COM
rgb1:G
rgb1:B
rgb2:R
rgb2:COM
rgb2:G
rgb2:B
rgb3:R
rgb3:COM
rgb3:G
rgb3:B
bargraph1:A1
bargraph1:A2
bargraph1:A3
bargraph1:A4
bargraph1:A5
bargraph1:A6
bargraph1:A7
bargraph1:A8
bargraph1:A9
bargraph1:A10
bargraph1:C1
bargraph1:C2
bargraph1:C3
bargraph1:C4
bargraph1:C5
bargraph1:C6
bargraph1:C7
bargraph1:C8
bargraph1:C9
bargraph1:C10