Colocar un timeout en la función switch()

Buenas noches,

Estoy en el desarrollo de un proyecto en el cual utilizo un switch para seguir cierto orden en el programa.

Mi duda va en que quiero colocar un 'timeout' en los cases, de tal manera que si por ejemplo estoy en el case 1, o case 2 y demoro más de 10 segundos, vuelva al case 0.

He intentado buscar si hay algún código similar, o intentar pensarlo por mi mismo mediante diagramas y demás, pero me ha ganado la paciencia.

Les dejo un código de prueba para que vean a lo que me refiero.
Como ven, son 3 botones y los 3 imprimen distintos mensajes. Utilicé un switch para que la persona presione el primer botón, luego el segundo y el tercero, en ese orden.
-Lo que quiero hacer es que si la persona presionó el primer botón, pasaron mas de 10 segundos y no presionó el segundo botón, tenga que volver a presionar el primer botón nuevamente.
-Lo mismo en el otro case, si la persona demoró más de 10 segundos y no presionó el tercer botón, tenga que volver a presionar el primer botón nuevamente.

Gracias.

int var = 0;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
}

void loop() {
  switch(var){
    case 0:
      if(digitalRead(2) == HIGH){
        Serial.print("Se presiono el primer boton");
        var++;
      }
    break;
    case 1:
      if(digitalRead(3) == HIGH){
        Serial.print("Se presiono el segundo boton");
        var++;
      }
    break;
    case 2:
      if(digitalRead(4) == HIGH){
        Serial.print("Se presiono el tercer boton");
        var = 0;
      }
    break;
  }
}

Primero: crea una variable global const de tipo int (con o sin el prefijo unsigned), esta guardará el tiempo de espera. Así:

const unsigned int timeOut = 10000; // Tiempo en milisegundos. Esto equivale a 10 segundos

Segundo: crea una variable global de tipo unsigned long (aquí sí importa el prefijo y que no lleve el const), esta guardará el momento en que se presionó algún botón. Así:

unsigned long tiempoBoton = 0; // Guarda el momento en que algún botón se haya presionado

Tercero: mete esto después del bloque switch pero aún así dentro del bloque loop:

if ((millis() - tiempoBoton) >= timeOut) {
// Si la diferencia entre el tiempo actual (función millis) y el momento en que se presionó un botón,
// es mayor o igual al "timeout"...
  var = 0; // Entonces a "var" se le asigna el valor cero.
}

Cuarto: después de cada instrucción var++;, coloca la siguiente línea:

tiempoBoton = millis(); // ¡Un botón se ha presionado! ¡Guarda el momento exacto!

Esto resuelve tu problema?

Lucario448:
Esto resuelve tu problema?

Hola, lo acabo de revisar y creo que es exactamente lo que buscaba, y bien simplificado, ya que en mi proyecto uso muchas variables de tiempo y creía que me quedaría muy extensa la parte del timeout.
Ni bien tenga el proyecto en mis manos hago la prueba y te comento. Gracias por aportar.