2 or 3 LED colors on a single digital pin

Thought I had a code problem but it works great.

Yes, for this project I only have a couple things to save but they are on the ESP32-Cam module so I have to trigger the save and wait for a response. Should be a blink for the user but better to be sure and it's nice to have that control.

The code is pretty simple too:

// Pin Assignments
byte pwr_btn = 10;
byte main_pwr = 11;               // Must remain high to keep main power

// Power button variables
bool pwr_btn_pressed;             // Power button state
uint32_t pwr_btn_prev_time = 0;   // Last time power button was checked
uint16_t pwr_btn_timer = 100;     // Delay between checking
uint16_t shutdown_count = 0;      // Shutdown counter for power button hold
uint16_t shutdown_window = 1000;  // Hold time necessary to shutdown

// Timed event variables
uint32_t time_now = 0;            // Current time
bool new_state;                   // Current state reuse for each timed event

// Forward declarations
void power_off();

void setup() {
  // Hold main power on
  pinMode(main_pwr, OUTPUT);
  digitalWrite(main_pwr, HIGH);
  
  // Set up power button and check state
  pinMode(pwr_btn, INPUT_PULLUP);
  pwr_btn_pressed = digitalRead(pwr_btn) == LOW;
  while (pwr_btn_pressed) {
    // One time start up code if the button is held
    pwr_btn_pressed = digitalRead(pwr_btn) == LOW;
  }
}

void loop() {
  // Check power button
  time_now = millis();
  if (time_now - pwr_btn_prev_time >= pwr_btn_timer) { 
    new_state = digitalRead(pwr_btn) == LOW;
    shutdown_count = pwr_btn_pressed && new_state ? shutdown_count += pwr_btn_timer : 0;
    if (shutdown_count >= shutdown_window) {
      // Saves
      power_off();
    }
    pwr_btn_pressed = new_state;
    pwr_btn_prev_time = time_now; // Advance timer
  } 
  
  // next timed event
}

void power_off() {
  digitalWrite(main_pwr, LOW);
}
Sketch uses 1122 bytes (3%) of program storage space. Maximum is 32256 bytes.
Global variables use 21 bytes (1%) of dynamic memory, leaving 2027 bytes for local variables. Maximum is 2048 bytes.