Switch Case y Millis

Este código lo hice como pude y a lo que estado aprendiendo con los tutoriales (links) que surbyte hizo el favor mandarme y orientarme en esto de los millis en Arduino. y agradesco mucho !!!

Voy al grano en este código en el primer case intento de alguna forma hacer que encienda y apague por lapsos de tiempo lo cual me funciono (a la forma que yo lo hice no se si este bien) , ahora al intentar que parpadee el led quise en una loca idea tratar de poner una función con millis dentro del case 1 (led papardee) que es donde con esa función hago que papadee un led pero no funciono esa idea, si alguien puede orientarme si lo que estoy haciendo esta bien o mejor ni me meto con el Switch Case.

const int PinLedRojo = 13;                         // Numero de Pin del Led guardado en la variable "PinLedRojo"
unsigned long TiemmpoActualMillis = millis();     // Tiempo Actual de millis se guardada en Actual Millis
int EstadoLedRojo = LOW;                          // Estado del Led                       
unsigned long TiempoAnteriorMillis = 0;          // Almacenará la última vez que se actualizó el Led
unsigned long intervaloEncendidoLed = 500;        // A los 500 se enciende el Led
unsigned long intervaloApagadoLed = 20000;        // Tiempo que dura el Led para apagarse

void setup() {
  pinMode(PinLedRojo, OUTPUT); 
  Serial.begin(9600);
}

void loop() {
  Luz();
}

void Luz(void)
{
  // Variables Locales
  static int Estado = 0;
  // Tiempo transcurrido en milisegundos
unsigned long TiemmpoActualMillis = millis();

  // Implementación del Diagrama de Estados
  switch (Estado)
  {
    case(0):  // Led Encendido
    // Salidas
    digitalWrite(PinLedRojo,EstadoLedRojo);
      // Condiciones
  if(millis() < intervaloEncendidoLed) { //Serial.println("EncenderLed");
     TiempoAnteriorMillis = millis();  
      if (EstadoLedRojo == LOW)
      EstadoLedRojo = HIGH;  
  }
  if(millis() >= intervaloApagadoLed) { //Serial.println("ApagarLed");
     TiempoAnteriorMillis = millis();  
      if (EstadoLedRojo == HIGH)
      EstadoLedRojo = LOW;   
    }
      break;

      case(1):  // Led Papadea minimo 3 a 5 veces
    // Salidas
    
    // Condiciones   
    
      break;

      case(2):  // Led Apagado
    // Salidas
    
    // Condiciones
    
      break;
  }
}

Para comenzar en tu código los parametros de los case no se escriben entre paréntesis () sino solos indicando una constante.

case(0):

va como

case 0:

El código corregido

#include <Arduino.h>

const int PinLedRojo = 13;                         // Numero de Pin del Led guardado en la variable "PinLedRojo"
unsigned long TiemmpoActualMillis = millis();     // Tiempo Actual de millis se guardada en Actual Millis
int EstadoLedRojo = LOW;                          // Estado del Led                      
unsigned long TiempoAnteriorMillis  = 0;          // Almacenará la última vez que se actualizó el Led
unsigned long intervaloEncendidoLed = 500;        // A los 500 se enciende el Led
unsigned long intervaloApagadoLed   = 20000;        // Tiempo que dura el Led para apagarse

void setup() {
  pinMode(PinLedRojo, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  Luz();
}

void Luz(void) {
  // Variables Locales
  static int Estado = 0;
  // Tiempo transcurrido en milisegundos
  unsigned long TiemmpoActualMillis = millis();

  // Implementación del Diagrama de Estados
  switch (Estado)  {
    case 0: // Led Encendido
            // Salidas
            digitalWrite(PinLedRojo,EstadoLedRojo);
            // Condiciones
            if (millis() < intervaloEncendidoLed) { //Serial.println("EncenderLed");
                TiempoAnteriorMillis = millis();  
                if (EstadoLedRojo == LOW)
                   EstadoLedRojo = HIGH;  
            }
            if (millis() >= intervaloApagadoLed) { //Serial.println("ApagarLed");
                TiempoAnteriorMillis = millis();  
                if (EstadoLedRojo == HIGH)
                    EstadoLedRojo = LOW;  
            }
            break;

    case 1: // Led Papadea minimo 3 a 5 veces
            // Salidas

            // Condiciones  

            break;

    case 2:  // Led Apagado
             // Salidas
             // Condiciones
             break;
  }
}

Para hacer que parpadee el led debes armar una máquina de estados restringida a dicho case.
Ademas las condiciones de millis() no son como las has escrito sino debieran ser asi

if (millis() - TiempoAnteriorMillis < intervaloEncendidoLed)

Ok, entiendo pero tube un error cuando cambie lo que me dijiste:

if (millis() - TiempoAnteriorMillis < intervaloEncendidoLed)

Aqui en el código:

case 0: // Led Encendido
            // Salidas
            digitalWrite(PinLedRojo,EstadoLedRojo);
            // Condiciones
           if (millis() < intervaloEncendidoLed) 
           //if (millis() - TiempoAnteriorMillis < intervaloEncendidoLed) { // ** Si funciona 
                TiempoAnteriorMillis = millis(); 
                if (EstadoLedRojo == LOW)
                   EstadoLedRojo = HIGH; 
            } .                                                      // ** Cuando pongo los dos  No funciona  
            if (millis() >= intervaloApagadoLed) { 
           // if (millis() - TiempoAnteriorMillis >= intervaloApagadoLed) { <---  **No funciona 
                TiempoAnteriorMillis = millis(); 
                if (EstadoLedRojo == HIGH)
                    EstadoLedRojo = LOW; 
            }
            break;

    case 1: // Led Papadea minimo 3 a 5 veces
            // Salidas

            // Condiciones 

            break;

Aqui me comentaste de una máquina de estados restringida, te refieres a que dentro del case poner un While ?

case 1: // Led Papadea minimo 3 a 5 veces
            // Salidas
            int x = 0;
                 do {
                  x++;
              } while (x < 0);
            // Condiciones 

            break;

While es en este caso muy mal, porqué bloquea el Sketch mientras esta ejecutando el while.
While solamente usas, cuando sepas muy bien que haces.

Solo era un ejemplo de el while