Blink con clases (otra forma de utilizar millis() )

Cuando en mis programas tengo que hace uso intensivo de temporizadores, utilizo una clase (en una pestaña) , que los hace mas legibles.

Esta consta de tres funciones y una propiedad.
Funciones; Cumplido, iniciar,parar y reiniciar.
Propiedad: tiempo

Se puede colocar en una pestaña que se llama : Temporizador.h

class Temporizador { //Clase temporizador

  private: //variables y funciones no disponibles para el usuario final
    unsigned long tiempoAnterior;
    bool contando = 0;

  public: //variables y funciones disponibles para el usuario final
    unsigned long tiempo; //seteo del temporizador
    //-----------------
    Temporizador() { //constructor
    }

    //-----------------
    bool cumplido() { //comprueba si paso el tiempo
      if ((millis() - tiempoAnterior >= tiempo) && contando == 1 ) {
        return true; //Retorna true si paso el tiempo
      } else {
        return false;//Retorna False no si paso el tiempo
      }
    }
    //-----------------
    bool iniciar() {
      if (contando == 0) { //solo inicia si no estamos  contando en ese momento
        tiempoAnterior = millis();
        contando = 1;//levantamos la bandera que estamos contando
      }

    }

    //-----------------
    void reiniciar() { //resetea el contador
      contando = 0; //dejamos de contar
      iniciar() ;//Llamamos a la funcion iniciar
    }

    void parar() { //resetea el contador
      contando = 0; //dejamos de contar

    }
};

De esta manera se pueden crear temporizadores fácilmente con poco código, por ejemplo se puede reescribir el ejemplo Blink como

#include "Temporizador.h" //incluimos el archivo que tenemos en la otra pestaña

Temporizador T1; //creamos los temporizadores
Temporizador T2;
const int ledPin =  LED_BUILTIN;// El numero donde se encuentra el led

void setup() {
  pinMode(ledPin, OUTPUT); //Seteamos el pin como salida
  T1.tiempo = 1000; //tiempo en milisegundos que esta apagado el Led
  T2.tiempo = 100; //tiempo en milisegundos que esta encendido  el Led
}

void loop() {
  T1.iniciar(); //iniciamos el temporizador uno
  if (T1.cumplido()) { //Cuando se cumple el tiempo uno
    digitalWrite(ledPin, HIGH); //encendemos el led
    T2.iniciar() ;//iniciamos el temporizador dos, que nos dara el tiempo que et encendido el led
  }
  if (T2.cumplido()) { //Cuando se cumple el tiempo dos (led encendido)
    digitalWrite(ledPin, LOW); //Apagamos  el led
    T1.parar(); //paramos los  temporizadores
    T2.parar(); //paramos los temporizadores
  }
}

El código completo (sin pestañas)

class Temporizador { //Clase temporizador

  private: //variables y funciones no disponibles para el usuario final
    unsigned long tiempoAnterior;
    bool contando = 0;

  public: //variables y funciones disponibles para el usuario final
    unsigned long tiempo; //seteo del temporizador
    //-----------------
    Temporizador() { //constructor
    }

    //-----------------
    bool cumplido() { //comprueba si paso el tiempo
      if ((millis() - tiempoAnterior >= tiempo) && contando == 1 ) {
        return true; //Retorna true si paso el tiempo
      } else {
        return false;//Retorna False no si paso el tiempo
      }
    }
    //-----------------
    bool iniciar() {
      if (contando == 0) { //solo inicia si no estamos  contando en ese momento
        tiempoAnterior = millis();
        contando = 1;//levantamos la bandera que estamos contando
      }

    }

    //-----------------
    void reiniciar() { //resetea el contador
      contando = 0; //dejamos de contar
      iniciar() ;//Llamamos a la funcion iniciar
    }

    void parar() { //resetea el contador
      contando = 0; //dejamos de contar

    }
};


Temporizador T1; //creamos los temporizadores
Temporizador T2;
const int ledPin =  LED_BUILTIN;// El numero donde se encuentra el led




void setup() {
  pinMode(ledPin, OUTPUT); //Seteamos el pin como salida
  T1.tiempo = 1000; //tiempo en milisegundos que esta apagado el Led
  T2.tiempo = 100; //tiempo en milisegundos que esta encendido  el Led

}

void loop() {
  T1.iniciar(); //iniciamos el temporizador uno
  if (T1.cumplido()) { //Cuando se cumple el tiempo uno
    digitalWrite(ledPin, HIGH); //encendemos el led
    T2.iniciar() ;//iniciamos el temporizador dos, que nos dara el tiempo que et encendido el led
  }
  if (T2.cumplido()) { //Cuando se cumple el tiempo dos (led encendido)
    digitalWrite(ledPin, LOW); //Apagamos  el led
    T1.parar(); //paramos los  temporizadores
    T2.parar(); //paramos los temporizadores
  }

}